如何保证SQL Server免遭SQL注入攻击

SQL注入攻击可能是黑客攻击面向互联网的SQL Server数据库最常用的方式。任何使用动态SQL、允许未经检验的用户输入提交到数据库的应用程序都面临SQL注入攻击的风险,无论你的网络有多安全,或者你安装了多少防火墙。最近有一项关于Web黑客攻击的报告显示,SQL注入攻击呈上升趋势,不仅仅导致数据盗窃和数据丢失,而且在最近一连串的自动注入攻击中,数据库被破坏,向用户提供恶意Java脚本。这种渗透导致Web服务器令客户端电脑感染上其它的病毒。报告对于已经遭到攻击的网站数量统计不一,不过,哪怕是最低的数字都上万。在感染的高峰期,甚至联合国的网站也无法幸免。

你可能会认为SQL Server平台既然这么不安全,不如考虑更换平台。但事实上,所有的数据库平台都受到这种攻击的困扰。由于在主机环境中更多部署的是SQL Server,所以,针对SQL Server的攻击也就相应更为普遍。开发人员进行网页开发工作,他们不知道如何防范这样的攻击。由于这种攻击的成功率很高,所以,在恶意软件的社区内颇为流行。

SQL注入攻击是如何工作的?

容易遭受SQL注入攻击的Web应用程序具有以下特点:

1.你的网站使用动态SQL。这不是指应用程序动态生成select或者insert语句。它是指任何代码是动态生成的,包括应用程序在执行语句之前,动态生成一个存储过程。

2.当从客户端应用程序取值的时候,这些值没有经过验证——也可能没有对语法或者转义符进行验证。

SQL注入攻击是这样进行的:攻击者修改现有命令行,通过在字符串值内插入一个单引号,或者在数字后面添加分号,在转义符后面写入SQL语句。命令行看上去类似这样:

exec sel_CustomerData @CustomerId=47663; truncate TABLE Customer

这样会执行sel_CustomerData过程,然后运行truncate TABLE命令,删除Customer数据表的内容。如果有Foreign Key约束这个数据表,数据库将会返回错误,向黑客提供受约束的数据表名称。一名聪明的黑客可以利用这个技巧,查找到数据库里面每一个表的名称。然后,黑客能够将数据插入你的数据库,或者从你的表中选择数据(取决于数据库给了应用程序什么样的权限)。当黑客获取了数据表中的数据,就可以使用xp_sendmail或sp_send_dbmail向他们自己发送电子邮件。即使你已经禁用这些过程,黑客可以轻易启用这些过程,或者使用sp_OA过程添加他们自己的过程。

如何确保SQL Server数据的安全,避免SQL注入?

有多种办法可以保护你的数据库,避免这样的攻击。

首先,我们需要采用数据库安全的最佳实践方法加固数据库安全。这包括将数据库的操作许可设置为最低级别(setting up the database security with the lowest set of permissions possible.)。同时,应用程序不要直接访问数据表。所有对数据表的访问应该通过存储过程进行,而且那些存储过程不应该包括任何动态SQL。

避免对表的直接访问,你可以很大地减少受攻击的层面。但是,这并不是唯一必须做的事情。存储过程也存在受到攻击的可能性。虽然对存储过程进行攻击需要花费更多的时间,但是,仍然有可能利用你的存储过程对数据库进行破坏。存储过程就是用来向数据库中插入、更新和删除数据。一个聪明的黑客可以利用你自己的存储过程攻击你。

这是需要应用开发人员和你共同工作的方面,以确保被执行的代码(the code being executed against the database)是安全的。如果不确保应用层的安全,防范SQL注入攻击,其他的工作都将是徒劳的。数据只要进入数据库,基本上不可能在数据库内进行验证。这需要在应用层对数据进行验证。

时间: 2024-08-31 13:22:48

如何保证SQL Server免遭SQL注入攻击的相关文章

sql server数据|sql server数据库入侵渗透~~求大神

问题描述 sql server数据|sql server数据库入侵渗透~~求大神 QQ200832005[招聘]渗透测试工程师(可兼职也可接私活) 技能要求 具有至少1年以上的职业黑客攻击经验,并实际操作过各类项目,拒绝理论派.熟悉渗透测试服务器提权方面. 1.掌握MySQL.MSSQL.Oracle.PostgreSQL等一种或多种主流数据库结构以及特殊性. 2.熟悉渗透测试的步骤.方法.流程.熟练掌握各种渗透测试工具. 3.有主机.网络或Web安全渗透测试相关项目实施经验&. 4.对网站/服

SQL Server 常用SQL总结

  SQL Server 常用SQL总结 order by NAME collate Chinese_PRC_Stroke_CS_AS_KS_WS /*sqlserver分组不能以text,ntext,image类型的字段作为分组依据*/ --强制查询使用索引: select id from table_name with(index(索引名)) where num=@num --全文检索(name like '%abc%')(substring(cal_name ,1,3)='abc') se

jsp-[Microsoft][ODBC SQL Server Driver][SQL Server]用户 'huyaozhong' 登录失败。18456

问题描述 [Microsoft][ODBC SQL Server Driver][SQL Server]用户 'huyaozhong' 登录失败.18456 <% String url = "jdbc:odbc:Temdata"; String username = "huyaozhong"; String password = "123456"; Connection con = null; try{ out.println("

SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)

原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍     Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候做了什么事情".具体是指审核SQL Server 数据库引擎实例或单独的数据库涉及到跟踪和记录数据库引擎中发生的事件.它的底层是基于扩展事件(Extented Event),所以其性能和灵活性相对较好.审核数据可以输出到审核文件.Windows安全日志和应用程序日志.     Audit都需

SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件

原文:SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件 从2005开始,就引入了"数据库邮件"功能.并且取代SQLMail.原有SQLMail可以继续使用. SQLMail要求有应用程序编程接口(Extended Messaging Application Programming Interface,MAPI),安装新的Office时可能导致SQLMail失败. 数据库邮件更加安全.可靠,并且不需要MAPI.具有群集感知能力.可以自动重传发送失败的

jsp sqlserver-[Microsoft][ODBC SQL Server Driver][SQL Server]??? &amp;amp;#39;??)&amp;amp;#39; ???????????

问题描述 [Microsoft][ODBC SQL Server Driver][SQL Server]??? '??)' ??????????? 2014-2-22 15:01:44 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [jsp] in context with path [/pro6] threw exception [An exception occur

SQL Server 的 SQL 语句导入导出大全_MsSql

MS SQL Server数据库SQL语句导入导出大全,包括与其他数据库和文件的数据的导入导出.     /*******  导出到excel     EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'     /***********  导入Excel     SELECT *   

SQL Server连接SQL Server、SQL Server连接ORACLE 链接服务器

SQL Server连接SQL Server.SQL Server连接ORACLE 链接服务器 >> > >                                  >>   &            

SQL Server 的 SQL 语句导入导出大全

MS SQL Server数据库SQL语句导入导出大全,包括与其他数据库和文件的数据的导入导出. /*******  导出到excel     EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'     /***********  导入Excel     SELECT *     FR