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,原文出处: