XSS攻击

XSS攻击是通过对web网站页面上输入框注入JavaScript脚本从而窃取或破坏其他访客访问页面的一种攻击方式,也叫XSS跨站脚本攻击,通常该网站漏洞出现在填写资料的表单、用户交流的评论区等能提交文字的输入框位置,有些人会利用XSS漏洞窃取用户名密码或将原网址跳转到经过伪装的钓鱼网站上

漏洞存在的原理

网站结构分为三大部分,分别是前端展示、后端逻辑处理和数据库存储信息

XSS攻击就是利用后端逻辑处理层面未对前端输入的信息进行过滤处理,而直接保存进数据库的网站,如果将JavaScript脚本直接保存进数据库,导致其他用户访问页面时直接执行了危险的JavaScript代码,而达到破坏者想要的目的

不过这种漏洞在当前网络环境下基本很少存在了,因为大多后端框架里都包含了相应的过滤器,对输入内容进行了转义处理

案例

假如有这么一个多人发布博文的网站,并且可以通过用户注册进入后台发布自己的文章

那么,在后台我们就可以测试网站是否存在XSS漏洞,比如我们在文章标题输入框里写入 <script>alert("123")</script> ,当我们将这篇文章发布之后在任意一台电脑上访问这篇文章时页面都会弹出 123 就说明这个网站存在XSS漏洞

那么,我们知道当前网站存在XSS漏洞能做些什么事呢

1.窃取管理员或其他用户登录状态,进入其他用户的后台

网站用户状态一般都是通过Cookie保存的,当然现在也出现了新的token方式保存登录状态,这里只举例一下Cookie

当网站登录之后,只需要用JavaScript执行一下 document.cookie 就能拿到当前用户的Cookie,那么我能只需要将这个Cookie通过JavaScript发送给自己就能在远端伪造目标用户的登录信息

2.将原网址跳转到自己的钓鱼网站上

如果我们自己写一个和存在漏洞的网站一模一样的站点,这相对于非专业用户是非常难以分辨的,当用户访问原网站已经被自己注入JavaScript脚本的页面之后,重定向到假的网站,诱导用户支付,骗取钱财,这样是非常危险的

如何预防

1.网站不进行交互

当一个网站没有任何输入框的话,这种靠保存脚本的攻击方式自然就无用武之地了,但是大多网站不可能只进行展示内容

2.前端进行编码处理

有时为了防御XSS漏洞,在一个地方我们需要联合HTMLEncode、JavaScriptEncode进行编码,甚至是叠加,并不是固定一种方式编码

3.后端对所有输入内容进行转义处理

对应现在的后端应用,大多都使用了框架,而框架里就包含了专业了过滤器,可以对输入内容进行转义处理,如果需要手动实现,就是将HTML代码的尖括号装换成对应的转义字符,比如将 < 转义为 &lt;> 转义为 &gt;

总结

XSS攻击的后果是不可估量的,而往往它又是容易被人忽视的,开发人员要注意在正确的地方使用正确的编码方式,注意对危险存储信息进行转义,以防给自己或其他用户带来不必要的损失