什么是xss攻击?如何防御xss攻击?

151 阅读3分钟

xss是跨站脚本攻击核心就是让浏览器执行攻击者注入的恶意脚本。

举个简单的例子,假如有一个论坛,允许用户进行评论。攻击者在评论里面插入一个恶意脚本比如说script窃取用户的cookie并发送到攻击者的服务器。此时别的用户浏览到此条评论的时候就会执行这个脚本,窃取他们登录的cookie,攻击者就可以用这些cookie冒充用户进行账户登录。

这个例子就是典型的攻击者将恶意脚本注入到网页中,别的用户浏览时,代码被执行。

有几种?

存储型xss刚才举的例子就是存储型跨站脚本攻击,恶意的脚本通过发送评论的方式被存储到服务器数据库中,当其他用户打开这个网站看到这个评论的,就是网站服务端将恶意脚本从数据库中去除,拼接在html中返回给浏览器,然后恶意脚本被执行,窃取用户的cookie发送到攻击者的网站。

反射型xss攻击者构造出特殊的url,比如在传参的时候传的是一个恶意脚本。用户在打开有恶意脚本的url时,服务器将恶意脚本从url中取出,拼接在html中返回给浏览器。此时浏览器就会执行这个恶意脚本窃取用户的数据并发送到攻击者的网站。

反射型xss和存储型xss的区别在于,存储型xss的恶意脚本在数据库里面,反射型xss的恶意脚本在url里面。

dom型xss这个跟反射型xss很像恶意脚本也是写在url中,不一样的是反射型xss攻击会将恶意代码传到服务端然后返回,属于是服务端的安全漏洞,而dom型xss攻击的取出和执行都是发生在浏览器端完成。最典型的例子就是前端在渲染内容时,使用了url里面的恶意脚本,比如通过location.hash获取url中#后面的恶意脚本,被解析执行后。就会被攻击者获取用户的数据冒充用户行为。

如何防范xss攻击

使用csp内容安全策略,本质上是建立一个白名单。告诉浏览器哪些外部资源可以加载和执行,比如说在http头部的cotent-security-policy字段设置可以加载的资源。

还可以使用转义字符,首先进行输入过滤,对用户提交的内容检查,移除或转移危险字符比如<>&",还可以进行输出转义,将内容输出到页面的时候同样转义字符对插入html中的危险代码进行转义。

另外也可以给cookie设置httponly,使得脚本无法获取cookie。