我想通过在文本框中输入查询,让应用程序的用户在应用程序的数据库上执行任意SELECT
语句和SELECT
语句。
必须过滤哪些关键字以确保安全并考虑其他安全方面?
这是我已经想到的:
过滤掉以CREATE
,ALTER
,DROP
,TRUNCATE
,UPDATE
,DELETE
,{{开头的查询1}}
以分号分隔用户的输入并通过过滤器所有单独的语句
还有什么要检查的吗?
谢谢!
答案 0 :(得分:6)
简而言之,不要。你认为自己对SQL解析代码有多么好,并不论是否恶意,无论是否有恶意,都会找到你尚未涵盖的东西,这并不重要。唯一的安全方法是通过SQL Server权限。即使这样,它也不一定是个好主意,因为有人可以轻松地编写用于锁定数据库的SQL。
您可以查看自己的要求,看看用户是否真的需要能够执行任意查询。更有可能的是,他们想要在特定的基础上知道某些事情,在这种情况下,您可以提供在按钮点击时执行的预制查询,可能参数化。如果他们真的必须能够执行任意查询,那么他们是否可以在真实数据库的副本上进行,即每晚备份真实数据库并将其恢复到用户可以做任何他们想做的事情而不会造成太大损害的地方? / p>
作为最后的手段,这不是推荐,只是从经验中观察,给老板发电子邮件说它不安全,用户可以轻松地关闭系统,但只要你的老板他们以书面形式确认他们将承担责任,然后您乐意这样做。