前端安全:简单来认识XSS

这是我参与更文挑战的第3天,活动详情查看: 更文挑战

昨天刚好简单认识了CSRF(链接在这里,欢迎拜访),今天刚好趁热打铁,再次重温下XSS,话不多说,现在开始。

XSS简介

跨站脚本攻击,英文全称是 Cross Site Scripting, 本来缩写是CSS, 但是为了和层叠样式表(Cascading Style Sheet, CSS)有所区别,所以在安全领域叫做”XSS”.

XSS攻击通常指的是攻击者通过利用网页开发时留下的漏洞,往Web页面里插入恶意Script代码,当用户浏览时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的.

简单举个例子:
一个网站有个评论输入框,评论的时候如果评论了JavaScript代码,比如<script>alert('我是攻击者的代码')</script>,如果没有做xss的过滤,则这段代码会被插入到html里面并执行,最终会弹出 ‘我是攻击者的代码’

下面这段代码可以模拟XSS:

<!DOCTYPE html>
<html lang="zh-cn">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    function testCode() {
      const script = document.createElement('script')
      script.innerHTML = 'alert("我是攻击者的代码")' 
      document.body.appendChild(script)
    }
    testCode()
  </script>
</body>

</html>
复制代码

XSS危害

攻击者可以通过恶意注入的js代码,做很多伤害用户的事情,比如:

  • 窃取用户的cookie,模拟用户登录,然后进行操作
  • 添加监听,监听用户的输入;
  • 伪造表单,欺骗用户登录,获取用户密码;
  • 生成垃圾广告
  • 等等

XSS分类

反射型XSS(经过服务端,不存储在数据库)

例子:用户访问一个带有XSS代码的URL请求时, 比如http://127.0.0.1:8080?test=<script>alert("XSS攻击")</script>,服务器端接收数据后,然后又把带有XSS代码的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,最终造成XSS漏洞

存储型XSS(经过服务端,存储在数据库)

嵌入到web页面的恶意HTML会被存储到服务端,简而言之就是会被存储到数据库,等用户在打开页面时,会继续执行恶意代码,能够持续的攻击用户

例子:博客评论,用户评论,留言板,聊天室等用户可以输入的地方

如何预防

  • 对输入内容进行特殊字符转义,比如 &, <, >,",',或者使用encodeURIComponent函数进行转义

  • cookie开启 HttpOnly,让攻击者获取不到cookie

  • 配置CSP(Content Security Policy), 也就是内容安全策略,通过配置CSP去设置浏览器只能允许哪些外部资源可以加载和执行

总结:

切记:永远不要相信任何用户的输入

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享