# XSS、CSRF、SQL注入

针对Web服务器的攻击,常见的有:XSS(跨站脚本攻击)CSRF(跨站请求伪造)SQL注入

# XSS(跨站脚本攻击)

攻击者 将恶意代码注入到网页 上,使得用户不经意地加载并执行。

# XSS类别

常见的有:反射性攻击、存储型攻击。

# 反射型攻击

恶意代码被嵌到 url参数。

1、 攻击者B 向 用户C 发送一个“改装过的url”

例如:http://www.some.site/page.html?default=<script>alert(document.cookie)</script>

2、 网站A 从URL的参数中取出恶意代码,并显示在屏幕上。

如:需要将一些错误信息、搜索结果直接显示在页面上时

# 存储型攻击

恶意代码被保存到 服务器。

1、 攻击者B 在 网站A 留下恶意评论;

2、 用户C 访问 网站A时,加载了 攻击者B 的评论

如:评论、博客、私信

# 防御手段

分别从 3 个方面:用户输入、Cookie凭证、资源加载。

# 用户输入

  • 过滤。对敏感参数直接进行过滤。(在提交表单、传递url参数之前)
  • 转义。对用户输入的数据进行转义。

    1、在React中使用JSX。因为React DOM会使得所有内容在渲染前,都会被转换成字符串

    2、常用转义规则

# Cookie凭证

httpOnly:防止浏览器通过 document.cookie 读取 cookie。

# 资源加载

  • Content-Security-Policy

    让网站管理者去声明:在指定页面中,浏览器能够加载哪些资源

  • Content-Type: application/json; charset=utf-8

    1、避免输出内容被HTML解析

    2、不使用:Content-Type: text/html; charset=utf-8

# 常用转义规则

以 “&” 开头,以 “;” 结尾

转义前 转义后
& &amp;
< &lt;
> &gt;
" &quot;
' &#x27;
/ &#x2F;

# 恶意代码示例

<!-- 反射型:提前结束尾标签,拼接新标签 -->
><script>alert(document.cookie)</script>

<!-- 存储型:在 <img> 的 src 内置代码 -->
<img src="javascript:alert('XSS')" />

<!-- 存储型:在 <img> 的 onerror处 内置代码 -->
<img src="http://888.888.com/999.png" onerror="alert('XSS')" />
1
2
3
4
5
6
7
8

# CSRF(跨站请求伪造,Cross-Site Request Forgery)

攻击者通过欺骗用户的浏览器以用户的名义去执行恶意操作。

由于浏览器的机制,当请求某个域名的接口时,会把关联的cookie(存在本地磁盘、且未过期)一起带过去。

# 攻击方式:

  • 1、在用户成功登录网站A的情况下,攻击者诱导用户进入网站B
  • 2、在网站B中,攻击者的脚本“偷偷”向网站A发请求;

结果:网站A认为是用户本人发出,接受请求。

# 防御手段:

分别从 跨站csrfToken 进行防御。

# 跨站

# 检查请求的Referer字段

Referer可以表示请求来源于哪个地址,所以可以用来判断请求是否从本站发出

缺点:要正确判断是否为合法请求源不容易

# 检查Cookie的SameSite属性

使用Cookie的SameSite属性(表明跨站点时能否访问该cookie)

2019年,Google提出的新cookie标准,为防止CSRF提供了第一道防线

# Token

# 设置Token并验证

Token + cookie + 校验“请求体“与“请求头cookie”

原因:攻击者只能利用,但并不能获取用户的cookie

  1. 用户请求登录接口
  2. 服务端收到请求,生成随机的Token,并通过响应头Set-Cookie下发
  3. 网站A 解析cookie,把Token放到请求体(或请求头的自定义属性),和其它参数一起提交请求
  4. 服务端检查 cookie里的Token请求体(或请求头的自定义属性)中的Token是否一致
# 使用图片验证码

# SQL注入

攻击者 把SQL命令 通过表单输入框提交,以 欺骗 服务器执行恶意的SQL命令。

# 防止手段

对用户的输入进行检查、过滤

更新时间: 11/21/2021, 2:45:24 AM