java - 可以采取哪些 SQL Server 05/08 安全措施来防止 SQL 注入(inject)?

标签 java sql-server-2005

我有一个 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/

相关文章:

sql - 主表的明细记录计数

sql-server-2005 - 如何在 Windows 8 中安装 SQL Server 2005 Express

java - 单例的奇怪行为

java - Java 结果集限制的任何解决方法

sql - ',' 附近的语法不正确

sql - 获取在特定日期创建和/或修改的存储过程的列表?

java - 可靠的 Web 应用程序 GUI 测试

java - 在 Flutter 中从 Play 商店获取产品时应用内购买崩溃

java - 如何判断 ImageView 在 android 中是否有设置图像?

sql-server - MSSQL - 如何在批量插入中设置默认值?