发布者:售前小志 | 本文章发表于:2025-08-04 阅读数:528
网站频繁遭遇SQL注入、XSS攻击,会导致数据泄露、页面篡改甚至服务器被控制,这类应用层攻击仅靠防火墙难以防御,需“工具拦截 + 代码修复”双重防护。
WAF是如何实时拦截SQL注入与XSS攻击?
SQL注入防护:通过识别“SELECT*FROM”“UNION”等注入特征语句,直接阻断异常请求,可针对搜索框、登录页等高频攻击点设置严格检测规则。
XSS攻击拦截:过滤含“<script>”等恶意脚本的提交内容,对动态页面输出数据自动转义,避免攻击者窃取用户Cookie。部署后可在控制台查看攻击日志,精准定位易受攻击的接口(如商品搜索页),针对性强化防护。
根治漏洞源头怎么从代码与配置进行优化?
防SQL注入:采用参数化查询(如Java的PreparedStatement),避免直接拼接用户输入的SQL语句;限制输入内容格式(如手机号仅允许数字)。
防XSS攻击:在评论展示、用户资料页等区域,将“<”转义为“<”等安全字符;添加Content-Security-Policy头,限制脚本执行来源。
关闭错误详情显示(如PHP的 display_errors 设为Off),避免攻击者通过报错信息推测数据库结构。定期更新网站程序及插件,及时修补已知漏洞;数据库账号仅授予必要权限,禁止“删除表”等高风险操作。
每月用漏洞扫描工具检测网站,重点排查表单提交、用户输入等环节;每年至少做一次渗透测试,模拟攻击发现隐蔽漏洞。发现攻击后,立即通过WAF拉黑攻击IP,用备份恢复被篡改数据,修复漏洞后再全面扫描确认。
网站频繁遭遇SQL注入、XSS攻击,需 “实时拦截+根源修复+长期监测” 三管齐下:用WAF挡在前端,快速拦截已知攻击;通过代码优化和配置调整,根治漏洞源头;定期扫描与测试,提前发现新风险。核心是让防护覆盖 “攻击发生时-漏洞修复-潜在风险排查” 全流程,才能从根本上减少攻击威胁,保障网站数据与运行安全。
上一篇
下一篇
什么是XSS攻击?
在互联网的广袤世界里,有一种名为“跨站脚本攻击”(Cross-Site Scripting, 简称XSS)的技巧,它如同隐藏在网络背后的影子战士,悄无声息地影响着网页的安全。XSS攻击是指攻击者将恶意代码注入到用户浏览的网页中,这些代码通常以JavaScript的形式存在,当受害者的浏览器加载了含有恶意代码的页面时,代码就会被执行,从而可能窃取用户的敏感信息或执行其他有害操作。想象一下,你正在访问一个你喜欢的社交网站,这个网站允许用户发布自己的状态更新。如果这个网站没有妥善处理用户输入的数据,那么攻击者就可以通过发布包含恶意脚本的状态更新来实施攻击。当其他用户查看这条状态更新时,他们浏览器中的恶意脚本就会自动运行,而这一切都发生在用户不知情的情况下。XSS攻击主要分为三种类型:存储型、反射型和基于DOM的XSS。存储型XSS:这种类型的攻击类似于把毒药存放在井中。攻击者将恶意脚本直接储存在目标网站的数据库中,比如在一个评论区或者用户资料页面。每当有新用户访问该页面时,恶意脚本就会被加载并执行。反射型XSS:这就好比是镜子反射光线。攻击者需要找到一个方法让受害者点击一个特殊构造的链接,这个链接包含了恶意脚本。当受害者点击链接后,脚本会作为HTTP请求的一部分发送到服务器,然后由服务器响应返回给浏览器,最终在用户的浏览器上执行。基于DOM的XSS:这类攻击利用的是网页的DOM结构,即文档对象模型。它不依赖于服务器端的响应,而是通过修改页面上的现有内容,如URL参数或页面元素,来触发攻击。如何防御XSS攻击?为了保护自己不受XSS攻击的影响,网站开发者可以采取多种措施:输入验证:确保所有用户提交的数据都是安全的,去除或编码任何可能引起问题的字符。输出编码:当数据显示给用户时,应该正确地进行HTML实体编码,以防止脚本标签被浏览器解释为可执行代码。使用CSP(内容安全策略):这是一种额外的安全层,它告诉浏览器哪些资源是可以信任的,哪些不可以,从而限制了恶意脚本的执行环境。了解XSS攻击的本质及其防范方法,对于构建更加安全的网络环境至关重要。无论是作为开发人员还是普通网民,我们都有责任维护网络安全,避免成为下一个XSS攻击的受害者。
https被攻击有解决方法么?
虽然HTTPS能有效加密传输数据,保护用户隐私,但它并非网络安全的“万无一失”。黑客依然能通过各种攻击手段瞄准HTTPS网站,比如DDoS攻击、SSL劫持等。那么,HTTPS被攻击怎么办?别急,接下来我为大家分享几种实用的应对措施。1. 部署WAF防火墙Web应用防火墙(WAF)是抵御网络攻击的第一道防线。它能够实时监控并拦截常见的网络攻击,比如SQL注入、跨站脚本(XSS)、以及针对HTTPS的攻击。WAF能够自动分析流量,识别恶意请求,从而为你的网站筑起安全屏障。如果你的网站使用了HTTPS,但依然遭到攻击,WAF是一个强有力的防护工具。2. 启用DDoS防护DDoS(分布式拒绝服务)攻击是HTTPS网站常见的威胁。攻击者通过向服务器发送大量伪造的请求,耗尽带宽资源,使网站无法正常访问。为了抵御这种攻击,建议使用高防服务器或者CDN(内容分发网络)服务。这些服务通常具有DDoS防护功能,能够在攻击时自动分流、清洗恶意流量,确保网站依然稳定运行。3. 证书配置优化虽然HTTPS采用SSL/TLS协议加密,但不正确的证书配置可能成为攻击的突破口。务必使用强加密算法,并且定期更新SSL证书,避免使用过时的协议版本,比如TLS 1.0和1.1。通过升级到最新的TLS 1.2或1.3版本,能够大幅提高加密强度,降低被攻击的风险。4. 启用HSTSHTTP严格传输安全(HSTS)是一种防御中间人攻击的有效方式。HSTS可以强制客户端使用HTTPS访问网站,防止攻击者通过HTTP劫持流量。如果没有启用HSTS,黑客可能会通过中间人攻击拦截加密流量,甚至欺骗用户跳转到虚假的HTTP页面。5. 定期安全审查与漏洞扫描即使HTTPS加密了数据传输,也不意味着万事大吉。定期进行网站安全审查和漏洞扫描,可以及时发现潜在的风险。通过专业的安全扫描工具,检查是否存在弱点,比如过期的库、潜在的配置错误等,以提前防止黑客利用这些漏洞发起攻击。HTTPS虽然为网站提供了加密保护,但仍然可能面临攻击威胁。通过部署WAF、防护DDoS攻击、优化证书配置、启用HSTS以及定期进行安全审查,可以大幅提高网站的抗攻击能力。记住,网络安全是个系统工程,HTTPS只是其中的一环,配合其他防护措施,才能真正做到固若金汤。
SQL注入攻击的种类和防范方法
观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的。虽然有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施。 知彼知己,方可取胜。首先要清楚SQL注入攻击有哪些种类。 SQL注入攻击的种类 1.没有正确过滤转义字符 在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句。这样就会导致应用程序的终端用户对数据库上的语句实施操纵。比方说,下面的这行代码就会演示这种漏洞: statement := "SELECT * FROM users WHERE name = ’" + userName + "’;" 这种代码的设计目的是将一个特定的用户从其用户表中取出,但是,如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不仅仅是代码的作者所期望的那样了。例如,将用户名变量(即username)设置为: a’ or ’t’=’t,此时原始语句发生了变化: SELECT * FROM users WHERE name = ’a’ OR ’t’=’t’; 如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值’t’=’t永远是正确的。 在一些SQL服务器上,如在SQL Server中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。下面语句中的username的值将会导致删除“users”表,又可以从“data”表中选择所有的数据(实际上就是透露了每一个用户的信息)。 a’;DROP TABLE users; SELECT * FROM data WHERE name LIKE ’% 这就将最终的SQL语句变成下面这个样子: SELECT * FROM users WHERE name = ’a’;DROP TABLE users; SELECT * FROM DATA WHERE name LIKE ’%’; 其它的SQL执行不会将执行同样查询中的多个命令作为一项安全措施。这会防止攻击者注入完全独立的查询,不过却不会阻止攻击者修改查询。 2.Incorrect type handling 如果一个用户提供的字段并非一个强类型,或者没有实施类型强制,就会发生这种形式的攻击。当在一个SQL语句中使用一个数字字段时,如果程序员没有检查用户输入的合法性(是否为数字型)就会发生这种攻击。例如: statement := "SELECT * FROM data WHERE id = " + a_variable + ";" 从这个语句可以看出,作者希望a_variable是一个与“id”字段有关的数字。不过,如果终端用户选择一个字符串,就绕过了对转义字符的需要。例如,将a_variable设置为:1;DROP TABLE users,它会将“users”表从数据库中删除,SQL语句变成:SELECT * FROM DATA WHERE id = 1;DROP TABLE users; 3.数据库服务器中的漏洞 有时,数据库服务器软件中也存在着漏洞,如MYSQL服务器中mysql_real_escape_string()函数漏洞。这种漏洞允许一个攻击者根据错误的统一字符编码执行一次成功的SQL注入式攻击。 4.盲目SQL注入式攻击 当一个Web应用程序易于遭受攻击而其结果对攻击者却不见时,就会发生所谓的盲目SQL注入式攻击。有漏洞的网页可能并不会显示数据,而是根据注入到合法语句中的逻辑语句的结果显示不同的内容。这种攻击相当耗时,因为必须为每一个获得的字节而精心构造一个新的语句。但是一旦漏洞的位置和目标信息的位置被确立以后,一种称为Absinthe的工具就可以使这种攻击自动化。 5.条件响应 注意,有一种SQL注入迫使数据库在一个普通的应用程序屏幕上计算一个逻辑语句的值: SELECT booktitle FROM booklist WHERE bookId = ’OOk14cd’ AND 1=1 这会导致一个标准的面面,而语句 SELECT booktitle FROM booklist WHERE bookId = ’OOk14cd’ AND 1=2在页面易于受到SQL注入式攻击时,它有可能给出一个不同的结果。如此这般的一次注入将会证明盲目的SQL注入是可能的,它会使攻击者根据另外一个表中的某字段内容设计可以评判真伪的语句。 6.条件性差错 如果WHERE语句为真,这种类型的盲目SQL注入会迫使数据库评判一个引起错误的语句,从而导致一个SQL错误。例如: SELECT 1/0 FROM users WHERE username=’Ralph’。显然,如果用户Ralph存在的话,被零除将导致错误。 7.时间延误 时间延误是一种盲目的SQL注入,根据所注入的逻辑,它可以导致SQL引擎执行一个长队列或者是一个时间延误语句。攻击者可以衡量页面加载的时间,从而决定所注入的语句是否为真。 以上仅是对SQL攻击的粗略分类。但从技术上讲,如今的SQL注入攻击者们在如何找出有漏洞的网站方面更加聪明,也更加全面了。出现了一些新型的SQL攻击手段。黑客们可以使用各种工具来加速漏洞的利用过程。我们不妨看看the Asprox Trojan这种木马,它主要通过一个发布邮件的僵尸网络来传播,其整个工作过程可以这样描述:首先,通过受到控制的主机发送的垃圾邮件将此木马安装到电脑上,然后,受到此木马感染的电脑会下载一段二进制代码,在其启动时,它会使用搜索引擎搜索用微软的ASP技术建立表单的、有漏洞的网站。搜索的结果就成为SQL注入攻击的靶子清单。接着,这个木马会向这些站点发动SQL注入式攻击,使有些网站受到控制、破坏。访问这些受到控制和破坏的网站的用户将会受到欺骗,从另外一个站点下载一段恶意的JavaScript代码。最后,这段代码将用户指引到第三个站点,这里有更多的恶意软件,如窃取口令的木马。 以前,我们经常警告或建议Web应用程序的程序员们对其代码进行测试并打补丁,虽然SQL注入漏洞被发现和利用的机率并不太高。但近来攻击者们越来越多地发现并恶意地利用这些漏洞。因此,在部署其软件之前,开发人员应当更加主动地测试其代码,并在新的漏洞出现后立即对代码打补丁。 防御和检查SQL注入的手段 1.使用参数化的过滤性语句 要防御SQL注入,用户的输入就绝对不能直接被嵌入到SQL语句中。恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。然后,用户输入就被限于一个参数。下面是一个使用Java和JDBC API例子: PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE PASSWORD=?"); prep.setString(1, pwd); 总体上讲,有两种方法可以保证应用程序不易受到SQL注入的攻击,一是使用代码复查,二是强迫使用参数化语句的。强迫使用参数化的语句意味着嵌入用户输入的SQL语句在运行时将被拒绝。不过,目前支持这种特性的并不多。如H2 数据库引擎就支持。 2.还要避免使用解释程序,因为这正是黑客们借以执行非法命令的手段。 3.防范SQL注入,还要避免出现一些详细的错误消息,因为黑客们可以利用这些消息。要使用一种标准的输入确认机制来验证所有的输入数据的长度、类型、语句、企业规则等。 4.使用专业的漏洞扫描工具。但防御SQL注入攻击也是不够的。攻击者们目前正在自动搜索攻击目标并实施攻击。其技术甚至可以轻易地被应用于其它的Web架构中的漏洞。企业应当投资于一些专业的漏洞扫描工具,如大名鼎鼎的Acunetix的Web漏洞扫描程序等。一个完善的漏洞扫描程序不同于网络扫描程序,它专门查找网站上的SQL注入式漏洞。最新的漏洞扫描程序可以查找最新发现的漏洞。 5.最后一点,企业要在Web应用程序开发过程的所有阶段实施代码的安全检查。首先,要在部署Web应用之前实施安全测试,这种措施的意义比以前更大、更深远。企业还应当在部署之后用漏洞扫描工具和站点监视工具对网站进行测试。 Web安全拉警报已经响起,安全形式异常严峻,企业绝对不应当草率从事。安全重于泰山 新一代云安全引领者-------云安全领域服务商------------ 快快网络小潘QQ:712730909
阅读数:5375 | 2021-08-27 14:36:37
阅读数:4357 | 2023-06-01 10:06:12
阅读数:4290 | 2021-06-03 17:32:19
阅读数:3839 | 2021-06-03 17:31:34
阅读数:3757 | 2021-06-09 17:02:06
阅读数:3684 | 2021-11-04 17:41:44
阅读数:3564 | 2021-11-25 16:54:57
阅读数:3182 | 2021-09-26 11:28:24
阅读数:5375 | 2021-08-27 14:36:37
阅读数:4357 | 2023-06-01 10:06:12
阅读数:4290 | 2021-06-03 17:32:19
阅读数:3839 | 2021-06-03 17:31:34
阅读数:3757 | 2021-06-09 17:02:06
阅读数:3684 | 2021-11-04 17:41:44
阅读数:3564 | 2021-11-25 16:54:57
阅读数:3182 | 2021-09-26 11:28:24
发布者:售前小志 | 本文章发表于:2025-08-04
网站频繁遭遇SQL注入、XSS攻击,会导致数据泄露、页面篡改甚至服务器被控制,这类应用层攻击仅靠防火墙难以防御,需“工具拦截 + 代码修复”双重防护。
WAF是如何实时拦截SQL注入与XSS攻击?
SQL注入防护:通过识别“SELECT*FROM”“UNION”等注入特征语句,直接阻断异常请求,可针对搜索框、登录页等高频攻击点设置严格检测规则。
XSS攻击拦截:过滤含“<script>”等恶意脚本的提交内容,对动态页面输出数据自动转义,避免攻击者窃取用户Cookie。部署后可在控制台查看攻击日志,精准定位易受攻击的接口(如商品搜索页),针对性强化防护。
根治漏洞源头怎么从代码与配置进行优化?
防SQL注入:采用参数化查询(如Java的PreparedStatement),避免直接拼接用户输入的SQL语句;限制输入内容格式(如手机号仅允许数字)。
防XSS攻击:在评论展示、用户资料页等区域,将“<”转义为“<”等安全字符;添加Content-Security-Policy头,限制脚本执行来源。
关闭错误详情显示(如PHP的 display_errors 设为Off),避免攻击者通过报错信息推测数据库结构。定期更新网站程序及插件,及时修补已知漏洞;数据库账号仅授予必要权限,禁止“删除表”等高风险操作。
每月用漏洞扫描工具检测网站,重点排查表单提交、用户输入等环节;每年至少做一次渗透测试,模拟攻击发现隐蔽漏洞。发现攻击后,立即通过WAF拉黑攻击IP,用备份恢复被篡改数据,修复漏洞后再全面扫描确认。
网站频繁遭遇SQL注入、XSS攻击,需 “实时拦截+根源修复+长期监测” 三管齐下:用WAF挡在前端,快速拦截已知攻击;通过代码优化和配置调整,根治漏洞源头;定期扫描与测试,提前发现新风险。核心是让防护覆盖 “攻击发生时-漏洞修复-潜在风险排查” 全流程,才能从根本上减少攻击威胁,保障网站数据与运行安全。
上一篇
下一篇
什么是XSS攻击?
在互联网的广袤世界里,有一种名为“跨站脚本攻击”(Cross-Site Scripting, 简称XSS)的技巧,它如同隐藏在网络背后的影子战士,悄无声息地影响着网页的安全。XSS攻击是指攻击者将恶意代码注入到用户浏览的网页中,这些代码通常以JavaScript的形式存在,当受害者的浏览器加载了含有恶意代码的页面时,代码就会被执行,从而可能窃取用户的敏感信息或执行其他有害操作。想象一下,你正在访问一个你喜欢的社交网站,这个网站允许用户发布自己的状态更新。如果这个网站没有妥善处理用户输入的数据,那么攻击者就可以通过发布包含恶意脚本的状态更新来实施攻击。当其他用户查看这条状态更新时,他们浏览器中的恶意脚本就会自动运行,而这一切都发生在用户不知情的情况下。XSS攻击主要分为三种类型:存储型、反射型和基于DOM的XSS。存储型XSS:这种类型的攻击类似于把毒药存放在井中。攻击者将恶意脚本直接储存在目标网站的数据库中,比如在一个评论区或者用户资料页面。每当有新用户访问该页面时,恶意脚本就会被加载并执行。反射型XSS:这就好比是镜子反射光线。攻击者需要找到一个方法让受害者点击一个特殊构造的链接,这个链接包含了恶意脚本。当受害者点击链接后,脚本会作为HTTP请求的一部分发送到服务器,然后由服务器响应返回给浏览器,最终在用户的浏览器上执行。基于DOM的XSS:这类攻击利用的是网页的DOM结构,即文档对象模型。它不依赖于服务器端的响应,而是通过修改页面上的现有内容,如URL参数或页面元素,来触发攻击。如何防御XSS攻击?为了保护自己不受XSS攻击的影响,网站开发者可以采取多种措施:输入验证:确保所有用户提交的数据都是安全的,去除或编码任何可能引起问题的字符。输出编码:当数据显示给用户时,应该正确地进行HTML实体编码,以防止脚本标签被浏览器解释为可执行代码。使用CSP(内容安全策略):这是一种额外的安全层,它告诉浏览器哪些资源是可以信任的,哪些不可以,从而限制了恶意脚本的执行环境。了解XSS攻击的本质及其防范方法,对于构建更加安全的网络环境至关重要。无论是作为开发人员还是普通网民,我们都有责任维护网络安全,避免成为下一个XSS攻击的受害者。
https被攻击有解决方法么?
虽然HTTPS能有效加密传输数据,保护用户隐私,但它并非网络安全的“万无一失”。黑客依然能通过各种攻击手段瞄准HTTPS网站,比如DDoS攻击、SSL劫持等。那么,HTTPS被攻击怎么办?别急,接下来我为大家分享几种实用的应对措施。1. 部署WAF防火墙Web应用防火墙(WAF)是抵御网络攻击的第一道防线。它能够实时监控并拦截常见的网络攻击,比如SQL注入、跨站脚本(XSS)、以及针对HTTPS的攻击。WAF能够自动分析流量,识别恶意请求,从而为你的网站筑起安全屏障。如果你的网站使用了HTTPS,但依然遭到攻击,WAF是一个强有力的防护工具。2. 启用DDoS防护DDoS(分布式拒绝服务)攻击是HTTPS网站常见的威胁。攻击者通过向服务器发送大量伪造的请求,耗尽带宽资源,使网站无法正常访问。为了抵御这种攻击,建议使用高防服务器或者CDN(内容分发网络)服务。这些服务通常具有DDoS防护功能,能够在攻击时自动分流、清洗恶意流量,确保网站依然稳定运行。3. 证书配置优化虽然HTTPS采用SSL/TLS协议加密,但不正确的证书配置可能成为攻击的突破口。务必使用强加密算法,并且定期更新SSL证书,避免使用过时的协议版本,比如TLS 1.0和1.1。通过升级到最新的TLS 1.2或1.3版本,能够大幅提高加密强度,降低被攻击的风险。4. 启用HSTSHTTP严格传输安全(HSTS)是一种防御中间人攻击的有效方式。HSTS可以强制客户端使用HTTPS访问网站,防止攻击者通过HTTP劫持流量。如果没有启用HSTS,黑客可能会通过中间人攻击拦截加密流量,甚至欺骗用户跳转到虚假的HTTP页面。5. 定期安全审查与漏洞扫描即使HTTPS加密了数据传输,也不意味着万事大吉。定期进行网站安全审查和漏洞扫描,可以及时发现潜在的风险。通过专业的安全扫描工具,检查是否存在弱点,比如过期的库、潜在的配置错误等,以提前防止黑客利用这些漏洞发起攻击。HTTPS虽然为网站提供了加密保护,但仍然可能面临攻击威胁。通过部署WAF、防护DDoS攻击、优化证书配置、启用HSTS以及定期进行安全审查,可以大幅提高网站的抗攻击能力。记住,网络安全是个系统工程,HTTPS只是其中的一环,配合其他防护措施,才能真正做到固若金汤。
SQL注入攻击的种类和防范方法
观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的。虽然有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施。 知彼知己,方可取胜。首先要清楚SQL注入攻击有哪些种类。 SQL注入攻击的种类 1.没有正确过滤转义字符 在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句。这样就会导致应用程序的终端用户对数据库上的语句实施操纵。比方说,下面的这行代码就会演示这种漏洞: statement := "SELECT * FROM users WHERE name = ’" + userName + "’;" 这种代码的设计目的是将一个特定的用户从其用户表中取出,但是,如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不仅仅是代码的作者所期望的那样了。例如,将用户名变量(即username)设置为: a’ or ’t’=’t,此时原始语句发生了变化: SELECT * FROM users WHERE name = ’a’ OR ’t’=’t’; 如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值’t’=’t永远是正确的。 在一些SQL服务器上,如在SQL Server中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。下面语句中的username的值将会导致删除“users”表,又可以从“data”表中选择所有的数据(实际上就是透露了每一个用户的信息)。 a’;DROP TABLE users; SELECT * FROM data WHERE name LIKE ’% 这就将最终的SQL语句变成下面这个样子: SELECT * FROM users WHERE name = ’a’;DROP TABLE users; SELECT * FROM DATA WHERE name LIKE ’%’; 其它的SQL执行不会将执行同样查询中的多个命令作为一项安全措施。这会防止攻击者注入完全独立的查询,不过却不会阻止攻击者修改查询。 2.Incorrect type handling 如果一个用户提供的字段并非一个强类型,或者没有实施类型强制,就会发生这种形式的攻击。当在一个SQL语句中使用一个数字字段时,如果程序员没有检查用户输入的合法性(是否为数字型)就会发生这种攻击。例如: statement := "SELECT * FROM data WHERE id = " + a_variable + ";" 从这个语句可以看出,作者希望a_variable是一个与“id”字段有关的数字。不过,如果终端用户选择一个字符串,就绕过了对转义字符的需要。例如,将a_variable设置为:1;DROP TABLE users,它会将“users”表从数据库中删除,SQL语句变成:SELECT * FROM DATA WHERE id = 1;DROP TABLE users; 3.数据库服务器中的漏洞 有时,数据库服务器软件中也存在着漏洞,如MYSQL服务器中mysql_real_escape_string()函数漏洞。这种漏洞允许一个攻击者根据错误的统一字符编码执行一次成功的SQL注入式攻击。 4.盲目SQL注入式攻击 当一个Web应用程序易于遭受攻击而其结果对攻击者却不见时,就会发生所谓的盲目SQL注入式攻击。有漏洞的网页可能并不会显示数据,而是根据注入到合法语句中的逻辑语句的结果显示不同的内容。这种攻击相当耗时,因为必须为每一个获得的字节而精心构造一个新的语句。但是一旦漏洞的位置和目标信息的位置被确立以后,一种称为Absinthe的工具就可以使这种攻击自动化。 5.条件响应 注意,有一种SQL注入迫使数据库在一个普通的应用程序屏幕上计算一个逻辑语句的值: SELECT booktitle FROM booklist WHERE bookId = ’OOk14cd’ AND 1=1 这会导致一个标准的面面,而语句 SELECT booktitle FROM booklist WHERE bookId = ’OOk14cd’ AND 1=2在页面易于受到SQL注入式攻击时,它有可能给出一个不同的结果。如此这般的一次注入将会证明盲目的SQL注入是可能的,它会使攻击者根据另外一个表中的某字段内容设计可以评判真伪的语句。 6.条件性差错 如果WHERE语句为真,这种类型的盲目SQL注入会迫使数据库评判一个引起错误的语句,从而导致一个SQL错误。例如: SELECT 1/0 FROM users WHERE username=’Ralph’。显然,如果用户Ralph存在的话,被零除将导致错误。 7.时间延误 时间延误是一种盲目的SQL注入,根据所注入的逻辑,它可以导致SQL引擎执行一个长队列或者是一个时间延误语句。攻击者可以衡量页面加载的时间,从而决定所注入的语句是否为真。 以上仅是对SQL攻击的粗略分类。但从技术上讲,如今的SQL注入攻击者们在如何找出有漏洞的网站方面更加聪明,也更加全面了。出现了一些新型的SQL攻击手段。黑客们可以使用各种工具来加速漏洞的利用过程。我们不妨看看the Asprox Trojan这种木马,它主要通过一个发布邮件的僵尸网络来传播,其整个工作过程可以这样描述:首先,通过受到控制的主机发送的垃圾邮件将此木马安装到电脑上,然后,受到此木马感染的电脑会下载一段二进制代码,在其启动时,它会使用搜索引擎搜索用微软的ASP技术建立表单的、有漏洞的网站。搜索的结果就成为SQL注入攻击的靶子清单。接着,这个木马会向这些站点发动SQL注入式攻击,使有些网站受到控制、破坏。访问这些受到控制和破坏的网站的用户将会受到欺骗,从另外一个站点下载一段恶意的JavaScript代码。最后,这段代码将用户指引到第三个站点,这里有更多的恶意软件,如窃取口令的木马。 以前,我们经常警告或建议Web应用程序的程序员们对其代码进行测试并打补丁,虽然SQL注入漏洞被发现和利用的机率并不太高。但近来攻击者们越来越多地发现并恶意地利用这些漏洞。因此,在部署其软件之前,开发人员应当更加主动地测试其代码,并在新的漏洞出现后立即对代码打补丁。 防御和检查SQL注入的手段 1.使用参数化的过滤性语句 要防御SQL注入,用户的输入就绝对不能直接被嵌入到SQL语句中。恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。然后,用户输入就被限于一个参数。下面是一个使用Java和JDBC API例子: PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE PASSWORD=?"); prep.setString(1, pwd); 总体上讲,有两种方法可以保证应用程序不易受到SQL注入的攻击,一是使用代码复查,二是强迫使用参数化语句的。强迫使用参数化的语句意味着嵌入用户输入的SQL语句在运行时将被拒绝。不过,目前支持这种特性的并不多。如H2 数据库引擎就支持。 2.还要避免使用解释程序,因为这正是黑客们借以执行非法命令的手段。 3.防范SQL注入,还要避免出现一些详细的错误消息,因为黑客们可以利用这些消息。要使用一种标准的输入确认机制来验证所有的输入数据的长度、类型、语句、企业规则等。 4.使用专业的漏洞扫描工具。但防御SQL注入攻击也是不够的。攻击者们目前正在自动搜索攻击目标并实施攻击。其技术甚至可以轻易地被应用于其它的Web架构中的漏洞。企业应当投资于一些专业的漏洞扫描工具,如大名鼎鼎的Acunetix的Web漏洞扫描程序等。一个完善的漏洞扫描程序不同于网络扫描程序,它专门查找网站上的SQL注入式漏洞。最新的漏洞扫描程序可以查找最新发现的漏洞。 5.最后一点,企业要在Web应用程序开发过程的所有阶段实施代码的安全检查。首先,要在部署Web应用之前实施安全测试,这种措施的意义比以前更大、更深远。企业还应当在部署之后用漏洞扫描工具和站点监视工具对网站进行测试。 Web安全拉警报已经响起,安全形式异常严峻,企业绝对不应当草率从事。安全重于泰山 新一代云安全引领者-------云安全领域服务商------------ 快快网络小潘QQ:712730909
查看更多文章 >