什么是XSS攻击

  • XSS(Cross Site Scripting)攻击是指浏览器中执行恶意脚本(无论是跨域还是同域),从而拿到用户的信息并操作
    • 这些操作一般可以完成下面这些事情:
      1. 窃取cookie
      2. 监听用户的行为,比如输入账号密码等
      3. 修改DOM伪造登录表单
      4. 在页面中生成浮窗广告

xss攻击指的是跨站脚本攻击,是一种代码注入攻击,攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息,如cookie等, xss的本质是因为网站没有对恶意脚本进行过滤,与正常代码混合在一起,浏览器没有办法辨别出哪些脚本是可信的,从而导致了恶意脚本的执行

xss攻击的类型

  • xss一般分为
    1. 存储型:指的是恶意代码提交到了网站的数据库中,当用户请求数据的时候,服务器将其拼接为HTML后返回给了用户,从而导致了恶意代码的执行
    2. 反射型:指的是攻击者构建了特殊了URL,当服务器接收到请求后,从URL中获取数据,拼接到HTML后返回,从而导致了恶意代码的执行
    3. DOM型:指的是攻击者构建了特殊的URL,用户打开网站后,js脚本从URL中获取数据,从而导致了恶意代码的执行

反射型XSS 跟存储型XSS的区别是:存储型xss的恶意代码存在数据库中,反射型XSS 的恶意代码存在URL里
反射型XSS漏洞常见于通过URL传递参数的功能,如网站搜索,跳转等,由于需要用户主动打开恶意的URL,攻击会结合有很多诱导性手段让你点开
DOM 型 XSS 跟前两者 XSS 的区别: DOM 型 XSS 攻击,取出和执行恶意代码都是由浏览器完成,属于前端javascript自身的安全漏洞,前两者属于 后端的安全漏洞

如何预防XSS 攻击

  • 预防XSS 攻击可以从两个方面入手,一个是恶意代码提交给后端的时候,一个是浏览器执行恶意代码的时候
    1. 对于的第一个方面,可以对存入数据库的数据都进行转义处理,但是一个数据可能在多个地方使用,有的地方可能不需要转义,我们没有办法判断数据的最后的使用场景,所以在这一方面处理是不太可靠的
    2. 因此我们可以从浏览器的执行来进行预防,一种是使用纯前端的方式,不用服务端拼接后返回(不发送请求给后端).另一种是对可以插入HTML代码的DOM位置做好充分的转义.
  • 还有一些方式,比如使用CSP,CSP的本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行,从而防止恶意代码的注入攻击
  • 还可以对一些敏感信息进行保护,比如cookie使用http-only,使得脚本无法获取cookie.也可以使用验证码,避免脚本伪装用户执行一些操作

什么是CSP

CSP (内容安全策略),其本质就是建立一个白名单,告诉浏览器哪些外部资源可以加载引用和执行

通常有两种方式来开启CSP,一种是设置HTTP首部的content-security-policy,一种是设置meta标签的方式

1
<meta http-equiv='Content-security-Policy'>