加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 湛江站长网 (https://www.0759zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

前端安全系列:如何防止XSS攻击?

发布时间:2018-10-20 12:07:49 所属栏目:业界 来源:佚名
导读:副标题#e# 【新产品上线啦】51CTO播客,随时随地,碎片化学习 前端安全 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时

最终,小明选择了白名单的方法,彻底解决了这个漏洞:

  1. // 根据项目情况进行过滤,禁止掉 "javascript:" 链接、非法 scheme 等  
  2. allowSchemes = ["http", "https"];  
  3. valid = isValid(getParameter("redirect_to"), allowSchemes);  
  4. if (valid) {  
  5.   <a href="<%= escapeHTML(getParameter("redirect_to"))%>">  
  6.     跳转...  
  7.   </a>  
  8. } else {  
  9.   <a href="/404">  
  10.     跳转...  
  11.   </a>  

通过这个事件,小明学习到了如下知识:

  •  做了 HTML 转义,并不等于高枕无忧。
  •  对于链接跳转,如 <a href="xxx" 或 location.href="xxx",要检验其内容,禁止以 javascript: 开头的链接,和其他非法的 scheme。

根据上下文采用不同的转义规则

某天,小明为了加快网页的加载速度,把一个数据通过 JSON 的方式内联到 HTML 中:

  1. <script>  
  2. var initData = <%= data.toJSON() %>  
  3. </script> 

插入 JSON 的地方不能使用 escapeHTML(),因为转义 " 后,JSON 格式会被破坏。

但安全组又发现有漏洞,原来这样内联 JSON 也是不安全的:

  •  当 JSON 中包含 U+2028 或 U+2029 这两个字符时,不能作为 JavaScript 的字面量使用,否则会抛出语法错误。
  •  当 JSON 中包含字符串 </script> 时,当前的 script 标签将会被闭合,后面的字符串内容浏览器会按照 HTML 进行解析;通过增加下一个 <script> 标签等方法就可以完成注入。

于是我们又要实现一个 escapeEmbedJSON() 函数,对内联 JSON 进行转义。

转义规则如下:

(编辑:PHP编程网 - 湛江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!