我有一个 Java Web 应用程序。我在代码端采取了防止SQL注入(inject)的措施,包括使用存储过程和正则表达式。然而,Java 很容易被反编译,并且可以修改为直接向 SQL Server 注入(inject) SQL 命令,这使得我使用存储过程和正则表达式变得毫无值(value)。
因此,我的问题是我可以在 SQL 服务器端设置哪些限制来防止执行恶意命令?目前,我有一个管理 SQL 用户访问数据库,这不是我想要的。我希望能够阻止如下命令:
EXEC master.dbo.sp_executesql N'Exec sp_configure ''show advanced option'', ''1'''
EXEC master.dbo.sp_executesql N'RECONFIGURE'
EXEC master.dbo.sp_executesql N'Exec sp_configure ''xp_cmdshell'', ''1'''
EXEC master.dbo.sp_executesql N'RECONFIGURE'
我认为我所采取的措施将阻止大多数脚本小子和黑客注入(inject),但我仍然担心那些足够聪明的黑客会反编译代码并相应地修改它。 (遗憾的是,由于性能原因,Java 应用程序被缓存,如果您知道自己在做什么,就可以执行此操作)
最佳答案
http://msdn.microsoft.com/en-us/library/ms188787.aspx
“要使用两个参数执行 sp_configure 以更改配置选项或运行 RECONFIGURE 语句,您必须被授予 ALTER SETTINGS 服务器级权限。ALTER SETTINGS 权限由 sysadmin 和 serveradmin 固定服务器角色隐式持有。 ”
您用于应用程序访问的 SQL 帐户不应具有此级别的权限。不确定这是否是您所表示的,但如果是这样,我会尽快取消这些权利。
关于java - 可以采取哪些 SQL Server 05/08 安全措施来防止 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5567028/