文章目录
  1. 1. 1. SQL注入(SQL Injection)
  2. 2. 2. 跨站点脚本攻击(XSS,Cross Site Scripting)
    1. 2.1. 2-1 如果用户输入和URL参数中含有下列敏感文字,则删除 之:
    2. 2.2. 2-2 如果用户输入和URL参数中含有下列敏感文字,则转换 之:
  3. 3. 3. 操作系统命令注入(OS Command Injection)
  4. 4. 4. 换行字符注入(Line Feed Code Injection)
  5. 5. 5. LDAP注入(LDAP Injection)
  6. 6. 6. Xpath注入(XPath Injection)
  7. 7. 7. SSI注入(SSI Injection)
  8. 8. 8. 目录遍历(Directory Traversal)
  9. 9. 9. 强制浏览(Forced Browsing)
  10. 10. 10. 跨站点请求伪装(Cross Site Request Forgery)
  11. 11. 11. 不正确的文件和目录分配(Invalid Allocation of Files and Directories)
  12. 12. 12. 不正确的错误处理(Invalid Error Handling)
  13. 13. 13. 不必要的信息(Unnecessary Information)
  14. 14. 14. 后门和调试选项(Backdoor & Debug Option)
  15. 15. 15. 客户端注释(Client Side Comment)
  16. 16. 16. 缓冲区溢出(Buffer Over Flow)

事实上,WEB应用是很脆弱的。因为这种应用的灵活性很大,用户输入的自由度也很高,所以对于WEB应用的恶意攻击也比较容易。

本文对常见的16种WEB攻击,给出了部分解决方案。

1. SQL注入(SQL Injection)

对于固定的SQL语句,一般在应用程序层不做处理,推荐添加一个包装类,把这些固定的SQL操作控制起来。

而对于动态生成的SQL语句,就需要对用户的输入进行处理,一般的处理是把【’】转换成【“】 。如:

abc”def”ghi’jkl’mno → abc”def”ghi’’jkl’’mno

2. 跨站点脚本攻击(XSS,Cross Site Scripting)

如果用户输入,URL参数在页面上表示时,必须对特殊文字进行过滤处理。

2-1 如果用户输入和URL参数中含有下列敏感文字,则删除 之:

  • Script
  • Object
  • Embed
  • Applet

2-2 如果用户输入和URL参数中含有下列敏感文字,则转换 之:

&    →    &
<    →    &lt;
>    →    &gt;
“     →    &quot;
‘      →    &#39;

3. 操作系统命令注入(OS Command Injection)

要尽量避免执行系统命令,如果非使用不可的话,要对以下的用户输入或者参数做处理:

| ! & `      命令执行总要使用的字符
“ ‘            字符串的区分字符
/ -            命令参数指定时使用的字符
“ . / ¥       目录指定时使用的字符
< >          文件操作是使用的字符
$             环境变量指定时使用的字符
( { [ ] } )   命令间的区分字符

4. 换行字符注入(Line Feed Code Injection)

在用户的输入信息中,检查是否不包含【0x0d】【0x0a】 这种换行的输入。

5. LDAP注入(LDAP Injection)

在LDAP使用的场合,要检查用户输入信息中,是否不包含下列LDAP的保留字:

(    )     *    ¥    NULL

6. Xpath注入(XPath Injection)

在XPath使用的场合,要检查用户输入信息中,是否不包含下列Xpath的保留字:

<    >    “    ‘    &

7. SSI注入(SSI Injection)

检查用户输入中,是否不包含SSI相关的危险关键字。

8. 目录遍历(Directory Traversal)

检查用户输入中,是否不包含访问文件系统的特殊文字【/】 和【\】 。

9. 强制浏览(Forced Browsing)

这种攻击的防止比较复杂,一般的策略是:

  • 验证请求是否是从合法的页面发送而来的,一般是检查请求的Referer。
  • 用户授权控制,认证认可

对于静态资源来说,WEB程序是无法防止这种强制浏览攻击的,只有通过设置中间件(如WEB服务器)来防止:

  • 对公开化网站目录的设定(比如在站点目录下禁止显示文件列表)
  • 在URL中指定目录的时候,必须提供index文件(如index.html等)
  • 对于下载文件的存放位置,要特别谨慎的设置

10. 跨站点请求伪装(Cross Site Request Forgery)

明确页面的操作流程,对于不符合操作流程而来的请求进行过滤。

11. 不正确的文件和目录分配(Invalid Allocation of Files and Directories)

不公开的配置文件,备份文件,数据文件等,不要在站点的公共目录(WebRoot或者www/htdocs)下存放WEB应用程序使用的库文件,不要再站点的公共目录下存放。

适合在公共目录下存放的资源如下所示:

/var/www/htdocs/
                Img/
                css/
                data/
                index.html

12. 不正确的错误处理(Invalid Error Handling)

一定要进行错误处理,错误处理的消息要显示为用户可理解的内容,不要把中间件(WEB服务器)的错误消息显示出来。

13. 不必要的信息(Unnecessary Information)

比如在用户登陆时,提示的这样的错误信息【用户密码不正确】,从侧面就说明了系统中存在一个叫做【userid】的用户。这就为恶意攻击者提供了情报。

所以,在处理系统显示的消息是,点到为止,不能暴露多余的用户细节。

14. 后门和调试选项(Backdoor & Debug Option)

  • 避免特殊的密码输入和认证策略
  • 指定调试选项是,调试选项和程序的参数都可以改变和查看
  • 要做出测试专用的页面

对于程序后门,可以通过代码复查力度强化来进行防止。
而对于调试选择,要统一开发标准,使用统一的调试开关。

15. 客户端注释(Client Side Comment)

对于WEB应用来说,客户端可以通过浏览器直接看到页面的代码。发送到浏览器的代码中,可以开发者的注释。对于恶意攻击者来说,这些注释信息会暴露出WEB应用的很多细节。

比如说下面所说的注释就应该引起关注:

  • 对于请求参数的注释
  • Javascript的内部逻辑的注释
  • 注释外的Javascript内部逻辑和URL请求

解决方法如下:

  • 对于代码的注释,事先要有统一的代码规范
  • 尽量使用服务器端得注释标签,如JSP的【<%– –%>】,这样的注释内容不会发送到客户端。

16. 缓冲区溢出(Buffer Over Flow)

如果用户输入中包含了超过服务器缓冲区大小的输入,很可能会导致服务器存储不足,甚至导致服务器停机。

解决方法如下:

  • 一定要检查用户输入的大小
  • 文件上传是,对于上传文件的大小进行检查和限制。
文章目录
  1. 1. 1. SQL注入(SQL Injection)
  2. 2. 2. 跨站点脚本攻击(XSS,Cross Site Scripting)
    1. 2.1. 2-1 如果用户输入和URL参数中含有下列敏感文字,则删除 之:
    2. 2.2. 2-2 如果用户输入和URL参数中含有下列敏感文字,则转换 之:
  3. 3. 3. 操作系统命令注入(OS Command Injection)
  4. 4. 4. 换行字符注入(Line Feed Code Injection)
  5. 5. 5. LDAP注入(LDAP Injection)
  6. 6. 6. Xpath注入(XPath Injection)
  7. 7. 7. SSI注入(SSI Injection)
  8. 8. 8. 目录遍历(Directory Traversal)
  9. 9. 9. 强制浏览(Forced Browsing)
  10. 10. 10. 跨站点请求伪装(Cross Site Request Forgery)
  11. 11. 11. 不正确的文件和目录分配(Invalid Allocation of Files and Directories)
  12. 12. 12. 不正确的错误处理(Invalid Error Handling)
  13. 13. 13. 不必要的信息(Unnecessary Information)
  14. 14. 14. 后门和调试选项(Backdoor & Debug Option)
  15. 15. 15. 客户端注释(Client Side Comment)
  16. 16. 16. 缓冲区溢出(Buffer Over Flow)