数据库入侵的六大手段与防范措施第五,SQL注入
SQL注入式攻击并不是什么新事物了,不过近来在网站上仍十分猖狂。近来这种攻击又侵入了成千上万的有着鲜明立场的网站。
虽然受影响的网页和访问它的用户在这些攻击中典型情况下都受到了重视,但这确实是黑客们进入数据库的一个聪明方法。数据库安全专家们说,执行一个面向前端数据库Web应用程序的SQL注入攻击要比对数据库自身的攻击容易得多。直接针对数据库的SQL注入攻击很少见。
在字段可用于用户输入,通过SQL语句可以实现数据库的直接查询时,就会发生SQL攻击。也就是说攻击者需要提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据。
除客户端之外,Web应用程序是最脆弱的环节。有些情况下,如果攻击者得到一个要求输入用户名和口令的应用程序的屏幕,而且应用程序并不检查登录的内容的话,他所需要做的就是提供一个SQL语句或者数据库命令,并直接转向数据库。Yuhanna说,问题是身份验证和授权已经被移交给了应用程序服务器。
他说,“此时输入的并不是一个用户名,而是一个SQL命令。它被输入到一个数据包中,并且由应用程序服务器发送给数据库。这个数据库会读取欺诈性的SQL命令,而且它能够完全关闭整个数据库。”
他说,“这是开发者的一种可悲的开发方法。你必须关注用户正在输入的内容。不管你想执行什么,数据库都会执行。这是很令人惊慌的问题。SQL注入式攻击是一个很大的问题。”
Sentrigo 的Markovich说,从Web应用程序到数据库两个方面都可以实施SQL注入式攻击,而且可以从数据库内部实施。但有一些程序设计方法可有助于防止应用程序中的SQL注入攻击漏洞,如使用所谓的绑定变量(bind variable)或者使用参数进行查询等。
Markovich说,在Java等语言中,这就意味着在SQL语句中将问号用作占位符,并将“接收”值与这些占位符绑定。另外一种方法是避免显示某些数据库错误消息,目的是避免将可能敏感的信息透露给潜在的攻击者。