什么是xss攻击,如何预防?

xss(Cross Site Scripting),即跨站脚本攻击,是一种常见于web应用程序中的计算机安全漏洞。指的是在用户浏览器上,在渲染DOM树的时候,执行了不可预期的JS脚本,从而发生了安全问题。

XSS就是通过在用户端注入恶意的可运行脚本,若服务端对用户的输入不进行处理,直接将用户的输入输出到浏览器,然后浏览器将会执行用户注入的脚本。 所以XSS攻击的核心就是浏览器渲染DOM的时候将文本信息解析成JS脚本从而引发JS脚本注入,那么XSS攻击的防御手段就是基于浏览器渲染这一步去做防御。只要我们使用HTML编码将浏览器需要渲染的信息编码后,浏览器在渲染DOM元素的时候,会自动解码需要渲染的信息,将上述信息解析成字符串而不是JS脚本,这就是我们防御XSS攻击的核心想法。

预防:
1、获取用户的输入,不用innerHtml,用innerText,用户的输入永远是不可以信任的,不能让所有的输入保持原样,对用户输入的数据进行HTML Entity编码,最普遍的做法就是转义输入输出的内容,对于引号、尖括号、斜杠 进行转义。白名单库:xss库

  const xss = require('xss')  let html = xss('<h1 id="title">XSS Demo</h1<script>alert("xss");</script>')  
  // -> <h1>XSS Demo</h1>&lt;script&gt;alert("xss");&lt;/script&gt;  console.log(html)

2、对用户的输入进行过滤,如对& < > " ' / <a>等进行转义;
3、设置HttpOnly以避免cookie劫持的风险;
response.addHeader("Set-Cookie", "uid=112; Path=/; HttpOnly")
4、csp: Content Security Plicy
内容安全策略是一个附加的安全层,用于帮助检查和缓解某些类型的攻击,包括跨站脚本(xss)和数据注入等攻击,这些攻击可用于实现从数据窃取到网站破坏或作为恶意软件分发版本等用途

  // 只允许加载本站资源 
  Content-Security-Policy: default-src 'self'
  // 只允许加载 HTTPS 协议图片 
  Content-Security-Policy: img-src https://*
  // 不允许加载任何来源框架 
  Content-Security-Policy: child-src 'none'

5、编码后显示的时候还需要解码,解码后显示原样代码前过滤,过滤掉不合法输入,以保证安全,移除用户上传的DOM属性,如onerror等,移除用户上传的Style节点,Iframe节点等;onerror自动触发xss。style:body:display:none .js对页面有百分比操作权限。iframe引入其它页面资源。通过xss注入的方式,引诱用户触发csrf攻击。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 跨站脚本(XSS)是web应用中的一种典型的计算机安全漏洞。XSS允许攻击者可以在其他用户浏览的web页面中注入客...
    留七七阅读 8,069评论 1 26
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,749评论 1 45
  • 什么是XSS** 综述Cross-Site Scripting(XSS)是一类注入问题,恶意脚本被注入到健康的、...
    little_short阅读 1,495评论 0 0
  • 说起来,我已经步入了大龄剩女的年龄了。每次回家都会有大把的亲戚来问,有合适的吗,将就过就行了,不能挑了,谁谁谁家的...
    凉薄少年king阅读 156评论 0 0
  • 二货夫妇一起逛街。二货哥逛久了无比尿急,找了好久都没有找到厕所。 转了几圈之后终于找到一个残疾人专用厕所,门没锁。...
    老罗xt阅读 131评论 0 1