XSS攻击不完全指南

172 阅读1分钟
  • 防止XSS攻击的方法
    • 采用成熟的转义库,对需要用户输入的文本进行处理,输出HTML时处理

    • 页面meta添加Content-Security-Policy属性,启用浏览器支持的CSP

    • 页面添加脚本,改写append和appendChild的方法,拦截不在白名单的script或者iframe

    • 服务器设置cookie 属性httpOnly和secure,防止攻击者盗取和更改重要隐秘cookie

    • 服务器将http升级为https,或者将http重定向到https

    • 服务器专区对链接上的脚本进行过滤,直接拒绝访问,返回412状态码

    • 记录Log,记录证据,向工信部投诉

【改写append和appendChild的方法,拦截不在白名单的script或者iframe】 具体的代码如下:

    <script>
        // append方法同理
        Element.prototype._appendChild = Element.prototype.appendChild
        Element.prototype.appendChild = function(Elem){
            const whiteList = ['baidu.com']
            var srcFilterTags = ['script', 'iframe'];
            console.log(srcFilterTags.indexOf(Elem.nodeName.toLocaleLowerCase()) > -1 && whiteList.indexOf(Elem.src)<=-1)
            if(srcFilterTags.indexOf(Elem.nodeName.toLocaleLowerCase()) > -1 && whiteList.indexOf(Elem.src)<=-1){
                console.log('hhhh,被劫持啦')
                return 
            }else{
                console.log('append:',Elem)
                return this._appendChild(Elem)
            }

        }
        setTimeout(function(){
            var script = document.createElement("script");
            script.src = 'http://test.com/qiho-h5/jqg/shendun_test.js'
            document.head.appendChild(script);
        }, 1000)
    </script>

参考: 美团技术团队的【前端安全系列(一)】