XSS攻击和防御

196 阅读3分钟

XSS:Cross Site Scripting。跨站脚本攻击

XSS攻击是指黑客向HTML文件或者DOM中添加恶意脚本,从而在用户浏览页面时利用插入的恶意代码对用户实施攻击。

XSS攻击主要分为存储型XSS攻击,反射型XSS攻击和基于DOM的XSS攻击

存储型XSS攻击

黑客向存在漏洞的服务器插入一段恶意JavaScript代码,当用户向服务器请求资源的时候就会请求到该恶意JavaScript脚本。用户浏览页面的时候用户的Cookie等信息就会被上传到服务器。黑客拿到了用户的cookie等信息后,就可以在别的设备登陆进行一些恶意操作。

反射型XSS攻击

用户将一段包含有恶意代码的请求提交给web服务器,web服务器又将这段恶意代码反射给浏览器端。

常见的有QQ群和QQ邮件中一些诱导用户点击的恶意链接。

基于DOM的XSS攻击

基于DOM的XSS攻击是不涉及到web服务器的,而是黑客通过某些手段将恶意代码直接注入到用户的页面中。有可能是通过网络劫持在页面传输过程中修改了HTML页面的内容。或者通过本地的恶意软件劫持等方法。他们共同的特点是在web资源传输过程中或者用户使用页面过程中修改了web页面的数据。

如何阻止XSS攻击

存储型XSS和反射型XSS都是要经过服务器的,所以他们属于服务器的安全漏洞,而基于DOM的XSS攻击是在浏览器端注入的,是属于前端的安全漏洞。不过这三种攻击都有一个共同的特点就是最终都需要将恶意的JavaScript代码注入到浏览器然后利用这些恶意代码向黑客部署好的恶意服务器发送用户的信息。因此阻止XSS攻击可以从阻止恶意代码的注入和防止非法消息的发送

常用的阻止XSS的方法

1.服务器端对输入脚本进行过滤或者编码

过滤是将标签内的内容过滤掉,这样恶意的JavaScript代码也就无法执行了

转码可以将

2.充分利用CSP等策略

CSP:内容安全策略

CSP的核心思想在于让服务器决定浏览器能够加载哪些资源

原理:

浏览器请求资源的时候,服务器会告诉浏览器哪些文件可以执行,哪些不可以执行

CSP的功能

1.限制加载其他域下的资源文件,使得即使注入了恶意脚本也无法被执行

2.禁止向第三方提交信息,这样即使被注入了恶意代码,也无法将用户的Cookie发送给恶意服务器

3.禁止执行内联脚本和未授权脚本

4.还提供了上报机制,可以帮助我们更快地发现XSS攻击

3.设置HttpOnly

服务器可以将cookie设置为HttpOnly,HttpOnly可以保障Cookie只在http连接中被获取,这样的话恶意的JavaScript代码就无法获取到用户的cookie了。