k8凯发一触即发|Home

135-9299-6491
 
如何防范服务器SQL注入漏洞系列措施
日期:12-07 浏览次数:20

观察近来的一□□□□些安全事件及□□□其后果,安全专家们已※经得到一个结□□□□论,这些威胁主要□□是通过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安全拉警报已·经响起,安全形式异常□□□严峻,企业绝对不应□□□当草率从事。安全重于泰山!
 

← 上一篇 下一篇 → 返回首页
如有意向,请联系我们的客户经理
我们会根据您的需求为你制定详细的解决方案
在线咨询 or 拨打业务热线:135-9299-6491
在线咨询
咨询在线客服
热线电话
解决方案
扫一扫

扫一扫
关注k8凯发一触即发

全国咨询热线
135-9299-6491

返回顶部