浅淡XSS跨站脚本攻击的防御方法

一、HttpOnly属性         

       为Cookie中的关键值设置httponly属性,众所周知,大部分XSS(跨站脚本攻击)的目的都是通过浏览器的同源策略,来获取用户Cookie,从而冒充用户登陆系统的。

       如果为Cookie中用于用户认证的关键值设置httponly属性,浏览器将会禁止js通过同源策略访问cookie中设有httponly属性的信息,因此以劫持用户认证cookie为目的XSS攻击将会失败。

        但很明显,只为cookie中的值设置Httponly是不够的,因为XSS攻击并不是只能获取用户COOKIE,它还可以窃取用户浏览器信息,模拟用户身份执行操作等等。(具体内容详见:《白帽子讲Web安全》)

 

二、对用户输入进行检查——XSS filter

       XSS filter是在用户提交数据时获取变量,并进行XSS 过滤的。此时的XSS filter只对用户输入数据进行XSS检查,并没有结合渲染页面的HTML代码。

       所以针对XSS filter需要强调两点:

       1.XSS filter对语境的理解并不完整(比如:无法针对输出点位置进行合适的XSS过滤。所以有时可能会造成遗漏、破坏原有语义等后果)

       2.XSS filter是在服务器进行URL解码之前生效的,所以要考虑URL编码绕过的问题。(比如XSS filter过滤了

但如果直接在

其中上述\u编码内容为alert(123),但该代码并没有更新DOM树,所以不会弹窗。

 

四、针对不同的输出点使用合适的编码方式

1.输出点在HTML标签之间

输出点

攻击者如果想要构造XSS语句并执行,需要构造一个能执行脚本的环境。示例如下:

此处适合使用HtmlEncode,将攻击者输入的<>编码为<> 
使得攻击者无法构造JS环境,导致XSS失败。

 

2.输出点在HTML属性中输出

普通攻击者尝试的方法为将name属性的双引号闭合,然后再构造xss语句。

<"">

此处同样推荐使用HtmlEncode

 

3.输出点在

此处的防御思想是:使攻击者无法闭合标签,导致无论输入什么参数都会被浏览器当作字符串处理。

此处应使用JavascriptEncode。
 

4.在事件中输出
   在事件中输出和在

所以此处的防御方法应为:

你可能感兴趣的:(安全漏洞)