在sqlite3.connect()中使用用户输入的变量是否存在安全风险?



我让用户通过python应用程序创建和连接到数据库,

           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?(我知道用户可以通过一遍又一遍地运行程序来继续创建无限数量的数据库,但是我想不出任何其他解决方案,而不是配额)。

提前感谢!

特拉维斯

它们可以传入":memory",这可能会对系统产生不利影响,也可能不会,这取决于您的应用程序做什么。

它们可以控制事务(通过isolation_level参数),这可能会使程序与数据库的交互变得混乱。

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

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

严肃地说,你可能想给用户一个带有id的菜单,例如1..5与游戏相关联,然后在代码中使用类似switch case的语句来建立要连接的DB名称。

通常不需要担心连接本身。它是任何可能是恶意的或破坏性的查询。在我看来,让用户输入要连接的数据库的名称不会造成安全威胁,但请确保您的查询没有注入风险。

当有疑问时,清理数据,因为:

garbage in == garbage out

如果用户输入垃圾程序很可能会输出垃圾

引用:

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

通过转义、编码等对其进行净化。然后检查白名单,而不是黑名单(因为它不像白名单那样检查未知的危险)

最新更新