Web Security
跨站脚本攻击(XSS)
XSS (Cross-Site Scripting) 是一种安全漏洞,攻击者通过在网页中注入恶意脚本,窃取用户信息或执行其他恶意操作。
存储型 XSS
攻击者通过在网页中注入恶意脚本,窃取用户信息或执行其他恶意操作。
实际例子:
攻击者通过在评论区注入恶意脚本,攻击脚本会存储在服务器上,当其他用户访问该页面时,攻击脚本会被执行,窃取用户信息或执行其他恶意操作。
反射型 XSS
反射型 XSS 是指攻击者通过在 URL 中注入恶意脚本,当其他用户访问该 URL 时,恶意脚本会被执行,窃取用户信息或执行其他恶意操作。
实际例子:
网站搜索功能,搜索参数会显示在页面DOM中,那么攻击者就可以在搜索参数中注入恶意脚本,当其他用户访问该 URL 时,恶意脚本会被执行,窃取用户信息或执行其他恶意操作。
例如:https://example.com/?search=open+<script>alert('XSS')</script>
基于 DOM 的 XSS
常常出现于location.href
、document.write
等操作中。
实际例子:
通过location.href
获取hash值,然后通过document.write
将hash值写入页面DOM中,当遇上http://example.com/#<script>alert('XSS')</script>
时,恶意脚本会被执行。
mXSS (mutation-based XSS) 突变型 XSS
突变型 XSS 利用浏览器渲染机制,绕过安全检测和过滤,实现XSS攻击。
跨站请求伪造(CSRF)
查询参数篡改
主要出现在GET请求中,攻击者通过篡改查询参数,以链接形式诱导用户点击,实现CSRF攻击。
https://xxx.bank.com/transfer?toBankId=<hacked-bank-id>&amount=1000
替换GET的有效载荷
利用img标签的src属性,图像在加载时,会自动发起GET请求。
大多数允许url的标签,都可以利用src属性,实现CSRF攻击。
利用video标签的src属性,实现CSRF攻击。
攻击具体步骤:
- 攻击者提交了一个链接至一个HTTP GET的img标签中。
- 用户访问了包含该img标签的页面。
- 用户以自己认证的身份发起了一次GET请求,请求参数中包含
toBankId=<hacked-bank-id>&amount=1000
。 - 服务器以用户认证的身份cookie执行了向黑客转账操作,而用户对此毫不知情。
针对POST端点的CSRF攻击
常见于表单提交中,攻击者通过篡改表单参数,以链接形式诱导用户点击,实现CSRF攻击。
攻击具体步骤:
- 攻击者在自己的站点上放置了一个包含该form标签的页面。
- 攻击者用邮件传播该Web页面。
- 用户访问了攻击者的Web页面,并填写了表单内容、提交。
- 发起的POST请求中,包含
toBankId=<hacked-bank-id>&amount=1000
,username=username
,password=password
。 - 服务器以用户认证的身份cookie执行了向黑客转账操作,而用户对此毫不知情。
如何防御
使用Token验证、同源策略、CORS(跨域资源共享 Cross-Origin Resource Sharing)、Referer、SameSite属性等。
Referer是指请求头中的Referer
字段,表示请求的来源URL,服务器可以通过Referer字段来判断请求是否来自合法的来源。
SameSite属性是指响应头中的Set-Cookie
字段中的SameSite
属性,用于限制Cookie的跨站请求策略。通常有三个值:Strict
、Lax
、None
。
Strict
:这意味着浏览器只在同站请求时发送cookie,即只有源自设置cookie的同一站点的请求才会发送cookie。如果请求来自不同的域名或协议(即使是相同的域名),具有SameSite=Strict属性的cookie都不会被发送。Lax
:这意味着在跨站请求中不会发送cookie,例如在加载图片或框架的请求中。但是,当用户从外部站点导航到源站点时(例如,当点击链接时),cookie会被发送。如果未指定SameSite属性,这是默认行为。None
:这意味着浏览器会在跨站请求和同站请求中都发送cookie。在设置这个值时,必须同时设置Secure属性,如下所示:SameSite=None; Secure
。如果缺少Secure属性,将会记录一个错误
关于cookie设置
XML外部实体(XXE)
攻击者通过在XML文档中注入恶意实体,实现XXE攻击。
攻击具体步骤:
- 攻击者构造了一个包含恶意实体的XML文档。
- 攻击者将XML文档发送给服务器。
- 服务器解析XML文档,执行恶意实体中的代码,实现XXE攻击。
注入攻击
SQL注入
命令注入
攻击者通过在命令中注入恶意命令,实现命令注入攻击。
拒绝服务攻击(DoS)
ReDoS (Regular Expression Denial of Service)
/^((ab)*)+$/
“ababababababababababababababa” 会造成表达式引擎执行耗时增加,每增加一个ba字符串,执行时间增加一倍。
逻辑Dos
任何对服务器的逻辑操作,都可能导致DoS攻击。
- 数据库写入
- 文件系统操作,上传文件
- 特定服务逻辑
DDos
通过大量请求,耗尽服务器资源,导致服务器无法正常工作。
第三方依赖漏洞攻击
CSP 防御
CSP (Content Security Policy) 是一种安全策略机制,通过设置 HTTP Header 来限制网页能够加载和执行的资源,用于防御XSS、点击劫持等攻击。
MDN 文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP