首页 > 代码库 > WEB安全:SQL注入
WEB安全:SQL注入
SQL注入是网站和web应用程序中最常见的安全漏洞。这种恶意技术有很多应用场景, 但(SQL注入)通常是指在数据输入的地方注入代码以利用数据库应用程序中的安全漏洞。 SQL注入在接收用户输入的接口处 (也就是说在注册表单、查询表单等地方)尝试执行注入操作。对(SQL注入)高度关注以及方便检测数据库应用程序中的安全漏洞使得攻击者经常地以最小的努力“测试”网站/应用程序的安全完整性。
危害
成功执行的SQL注入有可能严重危害数据库中存储的数据。这种攻击的意图可能包括(但不限于)任何以下方式:
● 数据提取
● 添加或修改数据
● 瘫痪服务
● 绕过身份验证
● 执行远程命令
● 修改权限
总结来说,一个成功执行的SQL注入可能让攻击者像管理员一样控制数据库。
SQL注入著名的例子包括:
2008年4月---- 在一个SQL注入导致攻击者下载了10597个属于性犯罪者的社会安全号码后,俄克拉荷马州的性暴力犯罪者注册机构关闭了他们的网站。http://thedailywtf.com/Articles/Oklahoma-Leaks-Tens-of-Thousands-of-Social-Security-Numbers,-Other-Sensitive-Data.aspx
2011年6月--- PBS 被黑客LulzSec攻击了,他在PBS首页添加了一个故事声称在过去的15年里图帕克沙克一直在新西兰生活。http://www.huffingtonpost.com/2011/05/30/pbs-hacked-tupac-alive_n_868673.html
2011年6月--- 在一个用户把SQL注入漏洞的细节发布到黑客论坛之后,Lady Gaga’s网站成千上万粉丝的个人信息(电子邮件、名字)被泄露。据报道,被泄露信息的粉丝收到了推送 lady Gaga’s商品的欺诈邮件。http://www.mirror.co.uk/celebs/news/2011/07/16/lady-gaga-website-hacked-and-fans-details-stolen-115875-23274356/
预防措施
转义符号
许多的SQL注入攻击可以被预防只要在提交查询之前转义引号。请参考谷歌的Code University网站的例子。一些开发人员使用一种被称为“黑名单”类似于转义(符号)的技术,输入接口处过滤危险的字符。通常不推荐这种方式,因为当你选择这种替代方案时也影响到了数据本身。
重要事项
无论是转义还是“黑名单”技术都不能提供完全的保护以防止SQL注入,因为他们不能阻止数字参数攻击。数字参数攻击不需要引号或任何特殊字符。
白名单
白名单是表单输入校验,其中只接受一个良好定义的设置(或列表)输入的值。输入限制越具体,越能降低SQL注入攻击的风险。例如,如果你是接受一个月份的输入参数,你可以按以下方式检查:
● 是否是integer类型
● 这个integer类型参数是否大于0
● 这个integer类型参数是否小于12
这样当攻击者发动对你的数据库攻击时,每个限制条件都会缩小攻击者的试探范围。
最小权限原则
只启用网站、应用所需的权限功能。通过限制您访问数据库的账户权限,同时你也限制了容易遭受的SQL注入攻击。例如,如果你有一个查询数据库的需求,查询数据库的账户应当只有读取权限。一般来说,查询者不需要修改、添加数据,所以他不需要Insert或Update权限。在这种情况下,这些权限不需要存在,因此他们(查询者)也不需要有这些权限。如果这些权限在你的网站、应用中不存在,它们就不会被攻击者利用。
不要显示详细的错误信息
错误消息有时会暴露一些信息,这使得攻击者能获取数据库的某些特征。攻击者获取数据库的信息越多,他就越能对已知漏洞发起攻击。
加密敏感数据
以上所有的信息有助于您保护数据库中的数据避免被攻击,而且你也应当加密数据。使用对称加密算法,你可以轻松加密敏感数据(只能使用密钥来解密)。这种技术的缺点是如果攻击者知道了你的密钥,他们就能很容易解密你的数据。这就是为什么不要把密钥和数据库中的数据存放在一起而是存放在服务器文件里如此重要。
1. 本文由mathew翻译
2. 本文译自Web Security: SQL Injection | DBS Interactive
3. 转载请务必注明本文出自:程序员学架构(微信号:archleaner )
4. 更多文章请扫码:
WEB安全:SQL注入