开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情
什么是浏览器XSS攻击?
XSS(Cross Site Scripting),翻译过来是‘跨站脚本’。XSS攻击是指黑客向浏览器的网页中注入恶意的脚本。在以前注入恶意脚本使用跨域的发方式实现的‘跨域脚本’,而现在注入的方式越来越多。所以XSS这个名字一直保留至今,形容脚本注入的攻击形式。 所以恶意的脚本被注入后会有什么后果呢?
1.窃取浏览器缓存的登录信息。
我们在浏览或者使用私密性比较强的网页时,例如个人邮箱,网上银行等。恶意脚本可以通过document.cookie获取到登录信息,然后后台发送窃取的信息至第三方服务器,拿到你的登录信息后就可以在其他电脑上模拟真实的登录环境,就可以用你的邮箱进行垃圾广告群发或者利用你的账户进行转账。
2. 监听页面事件。
在特殊的情况下我们常常需要在页面中填写表单信息等,比如转账时银行卡号的输入,或者详细的家庭住址,通过网页发送的短信息等。通过监听键盘的输入事件,还有鼠标的单击事件都可以窃取你的私人信息。
3. 修改你所看见的页面内容。
目前脚本注入是非常普遍的,目前许多的浏览器插件。都有脚本注入的功能,比如刷网课,网页游戏的作弊程序,很多都是通过脚本注入完成的。所以在使用中,去伪造一个页面的生成是非常之容易的。不法分子为了达到经济效益,欺骗你输入银行验证码或者人脸识别的技术是防不胜防。
以上三条只是举的几个小例子,就不再一一介绍了。 如果页面被恶意脚本入侵了,就相当于你在黑客面前连一条底裤都没有。
XSS脚本注入的方式
1. 存储型XSS攻击
· 黑客在某论坛博客上发布了文章,在文章数据中包含了Js的脚本代码
(通过上传脚本至目标数据库)
· 然后小孙浏览了我发布的文章,文章中包含的脚本代码在小孙的浏览器中悄咪咪的运行
(通过诱导点击进入包含了恶意脚本的页面)
· 脚本读取了保存在浏览器缓存中的数据并发送给黑客的第三方服务器
(脚本运行)
· 小孙的论坛账号被模拟登录,清空了所有消息记录与文章博客。
2. 反射型XSS攻击
- 用户在请求中包含一段恶意脚本,随后网站又把包含恶意脚本的页面返回给了用户。 场景适用在点击陌生链接的时候。点击恶意的链接,url中拼接了恶意脚本,返回页面数据时,恶意的脚本文件藏在页面的代码中。 浏览器是是分辨不了什么是恶意脚本的。
3. 基于DOM的XSS攻击
- 客户端代码有用到面向DOM的API方法例如,document.location、document.URL等可以修改的浏览器对象。如果没有验证从DOM方法中获取的数据是否存在恶意代码的情况下,将动态的更新DOM节点,这个网页将容易受到DOM的XSS攻击。
如何阻止XSS的攻击?
1. 转码过滤。
恶意的脚本被注入进页面都是因为代码本身的漏洞。在使用外部数据时,可以进行转码型的过滤,或者严格要求数据类型、格式等。把包含‘script’标签的数据进行转码。
2. 利用CSP(内容安全策略)。
CSP策略可以指定脚本的来源,有效的减少或者消除XSS所依赖的载体。一个CSP兼容的浏览器,会从白名单域中获取脚本文件,忽略其他脚本文件,包括HTML中的内联脚本。
3. cookie 的HttpOnly属性设置。
HttpOnly属性是服务器通过响应头来设置的,在cookie值后添加HttpOnly关键字,就可以把这个cookie设置为HttpOnly状态,只能使用在请求过程中。无法用脚本代码的方式获取cookie值,这就不会让不法分子有可乘之机。
set-cookie: ...cookie值;HttpOnly