sc3*_*c3w 1 sql sql-server security
我想让应用程序的用户通过在文本框中输入查询来执行应用程序数据库中的任意SELECT语句和SELECT语句.
必须过滤哪些关键字以保证安全,还应考虑其他安全方面?
这是我已经想到的:
过滤掉查询开始:CREATE,ALTER,DROP,TRUNCATE,UPDATE,DELETE,INSERT
以分号分隔用户输入并通过过滤器传递所有单独的语句
还有什么要检查的吗?
谢谢!
总之,不要.你认为自己的SQL解析代码有多好并不重要,不管是恶意与否,有人会找到你未涵盖的内容.唯一安全的方法是通过SQL Server权限.即使这样,它也不一定是个好主意,因为有人可以轻松地编写用于锁定数据库的SQL.
您能否查看您的要求,看看用户是否真的需要能够执行任意查询.更有可能的是,他们想要在特定的基础上知道某些事情,在这种情况下,您可以提供按钮点击执行的预制查询,可能参数化.如果他们真的必须能够执行任意查询,那么他们可以在真实数据库的副本上进行,即每晚备份真实数据库并将其恢复到用户可以做任何他们想做的事情而不会造成太大损害的地方吗?
作为最后的手段,这不是一个建议,只是从经验观察,给老板发电子邮件说它不安全,用户可以轻松地关闭系统,但只要你的老板以书面形式确认他们会采取责任,那么你很乐意这样做.