我想通过在文本框中输入查询,让应用程序的用户执行任意SELECT
语句,并且仅执行SELECT
应用程序数据库上的语句。
必须滤除哪些关键字以确保事物安全,还应考虑其他哪些安全方面?
这是我已经弄清楚的:
过滤掉查询开始:CREATE
,ALTER
,DROP
,TRUNCATE
,UPDATE
,DELETE
,INSERT
以分号分隔用户的输入,并通过过滤器所有单独的语句
还有什么要检查的吗?
谢谢!
简而言之,不要。不管您认为使用SQL解析代码有多好,无论是否有恶意,迟早有人都会发现您未涵盖的内容。唯一安全的方法是通过SQL Server权限。即使这样,也不一定是个好主意,因为有人可以轻松编写可锁定数据库的SQL。
您能否查看您的需求并查看用户是否真的需要能够执行任意查询。他们更有可能希望事先知道某些事情,在这种情况下,您可以提供罐装查询,这些查询可以通过单击按钮执行,并且可能会进行参数化。如果他们真的必须能够执行任意查询,那么他们可以在真实数据库的副本上执行该查询吗,即每天晚上备份真实数据库并将其还原到用户可以做任何想要的事情而又不会造成太大损害的地方?
作为最后的选择,这不是建议,只是从经验中观察,向您的老板发送电子邮件说这是不安全的,并且用户可以轻松关闭系统,但前提是您的老板以书面形式确认他们会采取责任,那么您很乐意这样做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句