Page

[笔记]富文本编辑器过滤xss攻击一般手段(php配合xss.js库)

1039Anson17-10-29


因为富文本编辑器是以html代码的形式存在的,也就是说最后html是显示在源代码里的,那么常规的htmlspecialchars过滤存数据库,取出来的时候也要htmlspecialchars_decode,也阻止不了xss攻击。

那么如何阻止xss呢?


①htmlspecialchars配合htmlspecialchars_decode过滤

这里的过滤不是为了阻止xss,而是为了防止其他攻击。

htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
htmlspecialchars_decode($data, ENT_QUOTES);


②把不允许使用的标签过滤:

function editor_safe_replace($content){
    $tags = array(
        "'<iframe[^>]*?>.*?</iframe>'is",
        "'<frame[^>]*?>.*?</frame>'is",
        "'<script[^>]*?>.*?</script>'is",
        "'<head[^>]*?>.*?</head>'is",
        "'<title[^>]*?>.*?</title>'is",
        "'<meta[^>]*?>'is",
        "'<link[^>]*?>'is",
    );
    return preg_replace($tags, "", $content);
}

这个能过滤大部分恶意标签,同时我们不能忽略标签事件也会被人利用攻击。例如<p onclick="alert(1);"></p>,所以还要用xss.js来过滤。


③使用xss.js过滤标签事件

<div class="content">
<script>
document.write(filterXSS('<?=htmlspecialchars_decode($article['content'], ENT_QUOTES)?>'));
</script>
</div>

这个库能过滤标签上的所有事件


xss.js中文官网:http://jsxss.com/zh/index.html

cdn资源:https://cdn.bootcss.com/js-xss/0.3.3/xss.min.js



2017年10月30日增加:


④CSP(Content Security Policy)内容安全策略检查

CSP是减少XSS攻击一个策略。如果我们只允许加载自己域的图片的话,可以加上下面这个meta标签:

<meta http-equiv="Content-Security-Policy" content="img-src 'self';">

或者是后端设置这个http响应头。


可选择限制列表


  • script-src:外部脚本

  • style-src:样式表

  • img-src:图像

  • media-src:媒体文件(音频和视频)

  • font-src:字体文件

  • object-src:插件(比如 Flash)

  • child-src:框架

  • frame-ancestors:嵌入的外部资源(比如<frame>、<iframe>、<embed>和<applet>)

  • connect-src:HTTP 连接(通过 XHR、WebSockets、EventSource等)

  • worker-src:worker脚本

  • manifest-src:manifest 文件

  • frame-ancestors:限制嵌入框架的网页

  • base-uri:限制<base#href>

  • form-action:限制<form#action>

  • block-all-mixed-content:HTTPS 网页不得加载 HTTP 资源(浏览器已经默认开启)

  • upgrade-insecure-requests:自动将网页上所有加载外部资源的 HTTP 链接换成 HTTPS 协议

  • plugin-types:限制可以使用的插件格式

  • sandbox:浏览器行为的限制,比如不能有弹出窗口等。





过滤函数出自:http://bbs.csdn.net/topics/320144592


CSP出自:https://juejin.im/entry/59f6081e51882554f6661403?utm_source=gold_browser_extension

以及:

作者:阿里聚安全
链接:https://www.zhihu.com/question/21979782/answer/122682029
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


来自ansion博客 

http://www.tp0.top

2017-10-29 20:18:38