如何防止XSS攻击

xss = getParameter("redirect_to").startsWith('javascript:');allowSchemes = ["http", "https"];

用户点击这个 URL 时,服务端取出请求 URL,拼接到 HTML 响应中:


  • 浏览器接收到响应后就会加载执行恶意脚本 //xxxx.cn/image/t.js,在恶意脚本中利用用户的登录状态进行关注、发微博、发私信等操作,发出的微博和私信可再带上攻击 URL,诱导更多人点击,不断放大攻击范围。这种窃用受害者身份发布恶意内容,层层放大攻击范围的方式,被称为“XSS 蠕虫”。

    XSS攻击扩展阅读:Automatic Context-Aware Escaping

    上文我们说到:

    1. 合适的 HTML 转义可以有效避免 XSS 漏洞。完善的转义库需要针对上下文制定多种规则,例如 HTML 属性、HTML 文字内容、HTML 注释、跳转链接、内联 JavaScript 字符串、内联 CSS 样式表等等。业务 RD 需要根据每个插入点所处的上下文,选取不同的转义规则。

    通常,转义库是不能判断插入点上下文的(Not Context-Aware),实施转义规则的责任就落到了业务 RD 身上,需要每个业务 RD 都充分理解 XSS 的各种情况,并且需要保证每一个插入点使用了正确的转义规则。

    这种机制工作量大,全靠人工保证,很容易造成 XSS 漏洞,安全人员也很难发现隐患。

    2009年,Google 提出了一个概念叫做:Automatic Context-Aware Escaping。

    所谓 Context-Aware,就是说模板引擎在解析模板字符串的时候,就解析模板语法,分析出每个插入点所处的上下文,据此自动选用不同的转义规则。这样就减轻了业务 RD 的工作负担,也减少了人为带来的疏漏。

    在一个支持 Automatic Context-Aware Escaping 的模板引擎里,业务 RD 可以这样定义模板,而无需手动实施转义规则:




    {{.title}}





    模板引擎经过解析后,得知三个插入点所处的上下文,自动选用相应的转义规则:




    {{.title | htmlescaper}}





    目前已经支持 Automatic Context-Aware Escaping 的模板引擎有:

    • go html/templateGoogle Closure Templates

    原文地址:https://zhuanlan.zhihu.com/p/45568315

    作者介绍 李阳,美团点评前端工程师。


    分享到:


  • 相關文章: