XSS 攻击及其防护措施 | 青训营笔记

443 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第2天

一、XSS攻击的含义

XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的

举个例子,在留言板中,如果用户不按正常套路出牌,在留言板输入

<script>alert("xss");</script>

此时,界面就变成了

<ul>
    <li><script>alert("xss");</script></li>
</ul>

当浏览器解析到这一行时,就会跳出弹窗,从而达到了目的(但真正的xss一般不是跳出弹窗,而是携带恶意代码)

二、为什么会触发XSS攻击

1.盲目相信用户的提交内容 string——dom

  • document.referer
  • window.name
  • location
  • innerHTML
  • documen.write

2.上传svg

<svg>
    <script>alert('xss');</script>
</svg>

3.blob动态生成script

const blob = new Blob(
    [script],
    { type: "text"/javascript }
);
const url = new URL.createObjectURL(blob);
const script = document.createElement("script");
script.src = url

4.自定义跳转链接

<a href="javascript:alert('xss')"><a>

5.自定义样式

image.png

image.png

三、XSS攻击的危害

针对用户

  • 窃取用户信息(cookie/token),劫持会话
  • 网络钓鱼
  • 放马挖矿
  • 广告刷流量

针对web服务

  • 劫持后台
  • 篡改页面
  • 传播蠕虫
  • 内网扫描

四、xss攻击的分类

  • 存储型XSS(Stored XSS)
  • 反射型XSS(Refelcted XSS)
  • DOM型XSS(DOM-based XSS Demo)

(1)存储型XSS

1.特点

恶意脚本被存在在数据库中

访问页面——读数据 === 被攻击

危害最大,对全部用户可见

2.demo

<form action="action2.php" method="post">
     ID:  <input type="text" name="id" /> <br/>
     Name:<input type="text" name="name" /> <br/>
     <input type="submit" value="提交">
</form>

image.png

如图,我们往数据库提交1和

image.png

可见,我们的xss语句已经插入到数据库中了,当其他用户访问该页面时,插入的xss代码就执行了

(2)反射型XSS(Refelcted XSS)

1.特点

  • 不涉及数据库攻击
  • 从URL上攻击

2.demo

public async render(ctx){
    const { param } = ctx.qurey
    ctx.status = 200ctx.body = `<div>${param}</div>`
}

当我们通过输入框提交数据:,就会让url变成,从而使插入的xss代码执行

image.png

(3)DOM型XSS

1.特点

  • 不需要服务器的参与
  • 恶意攻击的发起 + 执行,全在浏览器完成
const content = new URL()

2.demo

<body>
    <textarea name="" id=""></textarea>
    <button>发布</button>
    <ul>
    </ul>
​
    <script>
        btn.onclick = function() {
            var li = document.createElement('li');
            li.innerHTML = text.value;
            ul.insertBefore(li,ul.children[0])
        }
    </script>
</body>

当我们在输入框输入

image.png

用户点击该连接时,就可以达到窃取用户信息cookie的目的

五、XSS的防御

xss防御的思路为: 永远不信任用户的提交内容,不要将用户提交内容直接转换成 DOM,即对用户的输入(和URL参数)进行过滤,对输出进行html编码。

xss防御的现成工具:

image.png

六.结语

网络攻击的方式有很多,xss不过是其中最基本的一种罢了

如果文章对你有帮助的话,欢迎点个赞( ̄﹃ ̄),如果有不对的,欢迎评论区指出