您的位置:首页 > 数据库

【常见Web应用安全问题】---2、SQL Injection

2011-12-22 10:07 495 查看
 Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里只介绍常见、比较常见和有点常见的。

常见Web应用安全问题安全性问题的列表:

  1、跨站脚本攻击(CSS or XSS, Cross Site Scripting)

  2、SQL注入攻击(SQL injection)

  3、远程命令执行(Code execution,个人觉得译成代码执行并不确切)

  4、目录遍历(Directory traversal)

  5、文件包含(File inclusion)

  6、脚本代码暴露(Script source code disclosure)

  7、Http请求头的额外的回车换行符注入(CRLF injection/HTTP response splitting)

  8、跨帧脚本攻击(Cross Frame Scripting)

  9、PHP代码注入(PHP code injection)

  10、XPath injection

  11、Cookie篡改(Cookie manipulation)

  12、URL重定向(URL redirection)

  13、Blind SQL/XPath injection for numeric/String inputs

  14、Google Hacking

SQL注入攻击(SQL injection)

  早在十几年前,基于数据库的Web应用刚刚盛行的时候,几乎所有的开发商都忽略了SQL注入弱点,导致当时绝大多数的网站的登录入口形同虚设!为什么呢?先给一个小小的例子,假如以下SQL代码是用来在网站登录入口入执行用户验证时的查询代码:

SELECT count(*)

FROM users_list_table

WHERE username='USERNAME'

AND password='PASSWORD'

以上的USERNAME就是我们登录时提供的用户名,PASSWORD就是我们登录时提供的密码。当用户输入正确的用户名和密码时,这条语句的执行结果将为真(True),否则为假(False),当然为真时我们就认为认证通过,为假时就认为认证失败,即非法登录。试想一下,如果我在输入用户名和密码的时候输入如下的内容:

用户名:a' or 'a'='a

密码:a' or 'a'='a

用代入法把用户名和密码输入值代入到上述的SQL脚本里结果如下:

SELECT count(*)

FROM users

WHERE username='a' or 'a'='a'

AND password='a' or 'a'='a'

相信稍懂一点儿SQL语句的人都知道,这条语句的执行结果就永远是真了!此时你不需要有帐号,就直接登录成功了!你对此漏洞理解的深度同样取决于你的对SQL语句的技能和web安全知识能力。一个具有良好技能的攻击者可能利用此漏洞获取后台DB的结构并逐步获取DB的信息。

总结一下:SQL注入弱点是存在基于数据库的Web应用中,黑客利用精心组织的SQL语句,通过Web接口(通常指我们的Web页面的表单)注入的Web应用中,从而获取后台DB的访问与存取权的一种安全弱点。

  简要的解决方案:

  刚刚介绍了XSS,在这里关于SQL Injection我想就无需多说了,都是过滤、合法性检查和长度限制等通用方法。

  有没有注意到,XSS和SQL Injection,虽然名字不一样,但它们似乎都属于我前一篇文章《解读Web安全性问题的本质》中的第一部分,即输入/输出验证。下面将要介绍的远程命令执行目录遍历文件包含同样也是输入/输出验证问题。

来自CSDN,原文出处:/article/2810542.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: