XSS
XSS = Cross Site Scripting, 即跨站脚本攻击为了和CSS(层叠样式表)区分开来,所以叫XSS。这种攻击方式是黑客向目标站点注入恶意代码,当用户浏览网页对应的恶意代码就会执行以窃取用户的信息,最常见的就是cookie盗取。常见的XSS攻击有三种
存储型
存储型攻击如下图所示:
- 黑客发现目标网站的漏洞,并提交恶意代码到目标网站,这些恶意代码存储到目标网站的数据库中。
- 用户访问目标网站,目标网站从数据库中读取恶意代码并返回给用户。
- 用户浏览器执行恶意代码,黑客获取用户的信息。
- 首先黑客必须先发现目标网站存在XSS漏洞,然后黑客提交恶意代码(通过留言,创建表单等方式-这是方式都是目标网站提供的功能,所有用户都能使用)到网站服务器,服务器把提交的内容存储到后代数据库。假设黑客提交了某个博客文章的留言,或者创建了某个音频网站的一个专辑。
- 正常用户访问目标网站,看到了黑客在博客上的留言,或者黑客创建的音频专辑,这时候浏览器会执行这些恶意代码,黑客就能获取用户的信息。
反射型
Dom型
如何防范XSS攻击
输入验证
在软件开发届有一句名言:永远不要相信前端传递过来的数据,后端一定要对前端传入的数据进行验证,即使前端已经验证了,后端也要验证。只要这样,才能保证安全。
对输出进行转义
现在流行的前端框架都会对用户的输入进行转义,比如React或者Angular框架,如果用户输入<script>alert('hello')</script>
,这个内容会被转义成<script>alert('hello')</script>
,这样就可以正常渲染,而不会被浏览器执行了。
对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攻击,还可以防范其他攻击,比如:
XSRF
XSRF = Cross Site Request Forgery, 即开展请求伪造。与XSS攻击方式不同,这种方式需要黑客自己有一个恶意站点,然后诱导用户点击恶意链接跳转到黑客的恶意站点,黑客再根据用户的cookie和其他信息伪造一个请求发送给用户访问的正常站点。
- 目标站点存在XSRF漏洞。
- 黑客自己有一个恶意站点。
- 用户登录过目标站点,并且在浏览器上保持有该站点的登录状态
- 黑客诱导用户点击恶意链接,跳转到黑客的恶意站点。