Web安全之XSS

2019-01-22  本文已影响0人  sarah_wqq

XSS :cross site script 跨站脚本攻击
比如在input框中输入script代码

<script>alert('hehehe')</script>

1.危害

获取页面数据、获取Cookie、劫持前端逻辑、发送请求、偷取用户资料...

2.攻击方法

url中注入脚本
查询框注入脚本
存储型注入,通过form表带提交到数据库中

3.要防护的地方

动态生成的HTML节点、HTML属性(如src),依赖与用户输入的JS代码,富文本等


富文本例子.png

4.防御方法

1)对HTML内容和属性实体进行转义escape

 < --------> &lt;
 > --------> &gt;
 " --------> &quto; 或&#34;
 '  --------> 或&#39;

&符号可转可不转,空格一般不做转义,但是要求html中属性值必须加上引号

2)对JS做转义

加 \ 或者转为JSON

str = str.replace(/\\/g, '\\\\');
str = str.replace(/"/g, '\\"');
str = str.replace(/'/g, "\\'");
//or
str = JSON.stringify(str);

3)对于富文本,黑名单方法过滤指定标签(如<script>),或白名单方法只支持指定标签

html = html.replace(/<\s*\/?script\s*>/g, '');

由于XSS攻击方式变种非常多,所以推荐白名单的方式防御,可用cheerio库

4)浏览器内置防御机制

防御效果有限,只对url参数中的script有效

5.CSP

CSP: Content security policy 内容安全策略
用于指定哪些内容可执行,通过CSP所约束的的规责指定可信的内容来源。

在HTTP头中加入属性Content-Security-Policy,并写入常用的指令:

并在服务器端进行相应的配置

Header set Content-Security-Policy "default-src 'self';"
add_header Content-Security-Policy "default-src 'self';";

6.PHP中的XSS防御

1.strip_tags():移除所有html标签,只留下内容
2.htmlspecialchars($content, ENT_NOQUOTES):对& < >等特殊字符做转义
3.使用各种第三方库,如HTMLPurifier
4.用php Document类解析Dom节点,根据白名单过滤
5.CSP

上一篇下一篇

猜你喜欢

热点阅读