2011-07-28 18 views
3

我有两个用户创建并通过Python应用程序连接到数据库,在sqlite3.connect()中使用用户输入变量时是否存在安全风险?

  dbname = raw_input("Please enter the game name you wish to connect to, or the name of a new game: ") 
      db = sqlite3.connect(dbname) 

我很好奇:有没有一种输入一个潜在恶意用户可以用它来攻击数据库(提供我有其他处理程序中没有其他漏洞),或者攻击运行python的底层系统? (据我所知,用户可以继续一遍又一遍运行程序来创建数据库无限多,但我想不出比配额任何其他解决方案可为的)。

在此先感谢!

特拉维斯

+3

所有输入,直到证明不是这样,(1)的恶意,(2)愿意打破你的代码,(3)完全有能力这样做。 (也就是说,这看起来不像典型的安全漏洞。) – delnan

回答

3

他们可以通过在":memory",这可能会或可能不会对系统产生不利影响,这取决于你的应用程序的功能。

他们可以control transactions(通过参数isolation_level),这可能会搞乱你的程序与数据库的交互。

我会检查用户输入针对可能的数据库名称的字典。

0

通常这些连接本身并不值得担心。这是任何可能具有恶意或破坏性的查询。让用户输入要连接的数据库的名称不会构成我可以看到的安全威胁,但要确保您的查询无风险注入。

1

你不应该允许的。想象一下,如果用户输入“全球热核战争”会发生什么?

在所有的严重性,你可能会想给用户一个菜单,其中的ID例如1..5与游戏代码中使用像一个开关case语句建立数据库名连接相关联,则至。

0

如有疑问消毒数据,因为:

garbage in == garbage out 

如果用户输入垃圾程序将最有可能输出垃圾

引述:

所有输入是,除非证实,(1)的恶意,(2)愿意 破坏你的代码,以及(3)完全有能力这样做。 (也就是说,这 看起来并不像典型的安全漏洞。) - delnan

...

通过转义,编码等消毒它然后检查针对白名单,不是黑名单(因为它不检查未知的危险不像白名单

相关问题