XSS 跨站脚本攻击原理分析与防御

个人介绍

什么是 XSS ?

定义

XSS 是指恶意攻击者利用网站没有对用户提交数据进行安全处理的缺陷

web 页面或相关资源中嵌入了恶意代码

使别的用户访问都会执行相应的嵌入代码。

简单说就是

攻击者通过 XSS 攻击,

能在用户的浏览器上伪装成用户做很多可怕的事情

比如这里通过 XSS

获取了 localStorage 里的信息

 为什么会有 XSS ?

不可信数据

没有充分控制不可信数据在页面中的展现


<script>...绝对不要将不可信数据放在这...</script>   直接放置在script内

<!--...绝对不要将不可信数据放在这....-->        放在HTML注释内

<div ...绝对不要将不可信数据放在这...=test />    放在属性名

<绝对不要将不可信数据放在这... href="/test" />    放在标签名内

<style>...绝对不要将不可信数据放在这...</style>    直接放在CSS中

未知的外部数据获得了执行权限

未知的外部数据获得了执行权限

 哪些场景会导致 XSS  ?

 XSS  ?

  • 存储型
  • 反射型
  • DOM-based 

 如何防御 XSS  ?

 如何防御 XSS  ?

  • 避免使用不可信数据
  • 数据过滤
  • CSP
  • 监控

避免使用不可信数据

var id = this.$route.query.id

document.write(`
    <div>
        产品ID: ${id}
    </div>
`)

来自用户输入的数据,都是不可信数据

axios(...)
  .then({ data } => {
    el.innnerHTML = data.userComment
  })

如果一定要使用

  • 转义
  • 过滤

HTML 转义

<body>...将不可信数据放在这前进行转义...</body>

<div>...将不可信数据放在这前进行转义...</div> 

<div attr=...将不可信数据放在这前进行转义...>content</div>     在无引号属性间

<div attr='... 将不可信数据放在这前进行转义...'>content</div>   在单引号属性间

<div attr="...将不可信数据放在这前进行转义...">content</div>   在双引号属性间

<script>alert('... 将不可信数据放在这前进行转义...')</script>    在被引号包含的字符串

<script>x='... 将不可信数据放在这前进行转义...'</script>         被引号包含的表达式

 QA  ?

Thanks

XSS Cross-Site Scripting Attack and Defense

By Awe

XSS Cross-Site Scripting Attack and Defense

XSS Cross-Site Scripting Attack Analysis and Defense

  • 960