首页 > 代码库 > 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
这样当攻击者发动对你的数据库攻击时。每一个限制条件都会缩小攻击者的试探范围。
最小权限原则
仅仅启用站点、应用所需的权限功能。通过限制您訪问数据库的账户权限。同一时候你也限制了easy遭受的SQL注入攻击。比如,假设你有一个查询数据库的需求。查询数据库的账户应当仅仅有读取权限。一般来说,查询者不须要改动、加入数据,所以他不须要Insert或Update权限。
在这样的情况下,这些权限不须要存在,因此他们(查询者)也不须要有这些权限。假设这些权限在你的站点、应用中不存在,它们就不会被攻击者利用。
不要显示具体的错误信息
错误消息有时会暴露一些信息,这使得攻击者能获取数据库的某些特征。攻击者获取数据库的信息越多,他就越能对已知漏洞发起攻击。
加密敏感数据
以上全部的信息有助于您保护数据库中的数据避免被攻击,并且你也应当加密数据。使用对称加密算法,你能够轻松加密敏感数据(仅仅能使用密钥来解密)。这样的技术的缺点是假设攻击者知道了你的密钥,他们就能非常easy解密你的数据。这就是为什么不要把密钥和数据库中的数据存放在一起而是存放在server文件中如此重要。
1. 本文由mathew翻译
2. 本文译自Web Security: SQL Injection | DBS Interactive
3. 转载请务必注明本文出自:程序猿学架构(微信号:archleaner )
4. 很多其它文章请扫码:
WEB安全:SQL注入