XSS和CSRF攻击原理和预防
XSS(跨站脚本攻击)
分类:
-
反射型:浏览器将恶意代码提交到服务器,服务器将恶意代码传回到客户端 -
储存型:浏览器提交恶意代码到服务端,服务器将恶意代码储存到数据库 -
DOM型:恶意代码仅在客户端运行
主要有两种方式注入恶意代码:
1.在URL中的query参数中注入script脚本
http://xxxxx?kid="<script>恶意代码</script>"
为了隐藏脚本,攻击者还可以将url转为为短链接的形式。
https://t.cn/A6xyzQ
短链接的原理主要是:短链接服务器维护一张映射表,将短链接与原始URL建立映射关系,在用户访问短链接时,服务器返回一个301的重定向响应。游览器接收到后自动跳转到真实地址。
当浏览器访问 https://t.cn/A6xyzQ 时:
1️⃣ 服务器从 URL 中取出短码 A6xyzQ
2️⃣ 在数据库里查找对应的长链接
3️⃣ 返回一个 HTTP 301 或 302 重定向响应
4️⃣ 浏览器接收后自动跳转到真实地址
2.在页面可以输入的地方注入恶意逻辑
当这些输入的内容被服务器保存后,如果是公开内容,当其它用户下次访问改网站就会执行内容中的恶意脚本。
预防措施:将用户输入的<>标签符号用<、>替代,转换为纯文本。设置httponly让客户端无法通过JS访问到。
CSRF(跨站请求伪造)
CSRF 攻击是劫持用户的会话,并冒充用户身份发送恶意请求。它利用了Web浏览器在发送请求时,会自动携带目标站点 Cookie 的机制。
预防措施:
使用token来作身份校验,客户端在每次请求时将token携带在请求头里面。
服务端将 Cookie 设置为 SameSite=Strict 或 SameSite=Lax。这样浏览器就不会在跨站请求中携带该 Cookie。
通过检查 HTTP 请求头中的 Referer (来源) 或 Origin (原始域) 字段,判断请求是否来自于本站域名。