XSS的防御方法解析

XSS漏洞的总体防御原则: 输入做过滤,输出做转义

1、用户输入过滤

对用户输入的script等HTML标签和一些JS关键字进过滤。常见的过滤方法由白名单和黑名单两种。
其中Java的JSOUP采用了白名单的方式对用户的输入进行了过滤,在使用时需要指定一个可配置的Whitelist。在JSOUP中提供了一系列的Whitelist基本配置,能够满肚大多数的过滤要求,在有必要的情况下也可以自己配修改配置。
此外还有OWASP ESAPI也能较好的防御XSS漏洞。

2、转义输入与输出的特殊字符

在HTML中,<,>,",& 等符号都有其特殊意义,HTML标签、属性等也都由这些符号所标识。当我们这些字符做转义之后,对XSS漏洞的防御会起到较好的效果。
在PHP中,提供了htmlspecialchars()、htmlentites()函数可以把预定义的字符转义为HTML实体。
预定义的字符与转义结果如下:

  • &(和号)–> &amp;
  • "(双引号)–>&quot;
  • '(单引号)–>&#039;
  • <(小于)–>&lt;
  • 》>(大于)–>&gt;

3、使用HttpOnly

HttpOnly简介:
HttpOnly是微软公司的Internet Explorer 6 SPI 引入的一个新特性。这个特性为cookie提供了与i个新的属性,可以用于阻止用户客户端访问cookie。现在已经成为了一个标准,几乎所有的浏览器都支持HttpOnly。
所以严格来说,HttpOnly对防御XSS漏洞并不起作用,只能解决XSS漏洞后续的cookie劫持的问题。
将cookie设置了HttpOnly属性之后,在浏览器中查看cookie信息,就会发现用户的cookie信息中多了HTTP Only标识。这代表了JavaScript将不能获取该cookie值。
对于XSS漏洞来说,HttpOnly只能防御cookie会话劫持,对于其他的非正常操作、盗取用户信息、钓鱼等攻击并不能起到作用,所以关键还是在于输入输出的过滤与转义。

猜你喜欢

转载自blog.csdn.net/qq_45590334/article/details/112298300