0%

web-security

XSS

XSS = Cross Site Scripting, 即跨站脚本攻击为了和CSS(层叠样式表)区分开来,所以叫XSS。这种攻击方式是黑客向目标站点注入恶意代码,当用户浏览网页对应的恶意代码就会执行以窃取用户的信息,最常见的就是cookie盗取。常见的XSS攻击有三种

存储型

存储型攻击如下图所示:
alt text

  1. 黑客发现目标网站的漏洞,并提交恶意代码到目标网站,这些恶意代码存储到目标网站的数据库中。
  2. 用户访问目标网站,目标网站从数据库中读取恶意代码并返回给用户。
  3. 用户浏览器执行恶意代码,黑客获取用户的信息。
  • 首先黑客必须先发现目标网站存在XSS漏洞,然后黑客提交恶意代码(通过留言,创建表单等方式-这是方式都是目标网站提供的功能,所有用户都能使用)到网站服务器,服务器把提交的内容存储到后代数据库。假设黑客提交了某个博客文章的留言,或者创建了某个音频网站的一个专辑。
  • 正常用户访问目标网站,看到了黑客在博客上的留言,或者黑客创建的音频专辑,这时候浏览器会执行这些恶意代码,黑客就能获取用户的信息。

反射型

Dom型

如何防范XSS攻击

输入验证

在软件开发届有一句名言:永远不要相信前端传递过来的数据,后端一定要对前端传入的数据进行验证,即使前端已经验证了,后端也要验证。只要这样,才能保证安全。

对输出进行转义

现在流行的前端框架都会对用户的输入进行转义,比如React或者Angular框架,如果用户输入<script>alert('hello')</script>,这个内容会被转义成&lt;script&gt;alert('hello')&lt;/script&gt;,这样就可以正常渲染,而不会被浏览器执行了。

对Cookies使用HttpOnly属性

标记为HttpOnly的cookie,浏览器只能通过HTTP协议访问,而不能通过JavaScript访问,这样就可以防范XSS攻击。

CPS

CPS = Content Security Policy, 即内容安全策略,这是一种安全策略,可以防范XSS攻击。CPS是一个HTTP头部,可以告诉浏览器只能加载指定的资源,比如只能加载指定的域名下的资源,或者只能加载指定的类型的资源。这样就可以防范XSS攻击。
CPS只是众多防范XSS攻击方式的一种,还有其他方法可以方法XSS攻击,比如output encoding, sanitization等。

关于CSP的详细内容,请看这里

CPS也不只用于防范XSS攻击,还可以防范其他攻击,比如:

  1. Prevent Clickjacking(点击劫持)
  2. manipulator-in-the-middle(中间人攻击)

XSRF

XSRF = Cross Site Request Forgery, 即开展请求伪造。与XSS攻击方式不同,这种方式需要黑客自己有一个恶意站点,然后诱导用户点击恶意链接跳转到黑客的恶意站点,黑客再根据用户的cookie和其他信息伪造一个请求发送给用户访问的正常站点。

  1. 目标站点存在XSRF漏洞。
  2. 黑客自己有一个恶意站点。
  3. 用户登录过目标站点,并且在浏览器上保持有该站点的登录状态
  4. 黑客诱导用户点击恶意链接,跳转到黑客的恶意站点。

如何防范XSRF攻击

充分利用Cookies的SameSite属性

验证请求的来源站点

使用CSRF Token