Skip to main content

存在的恶意攻击

XSS

XSS 代表跨站点脚本,它是注入类型的攻击。

跨站点脚本是攻击者将恶意脚本注入受信任网站的方法。

存储型XSS

存储型XSS

如图,攻击者访问网站并找到未受保护的输入字段,并输入恶意脚本而不是预期值。之后,每当该值显示给其他用户时,它都会执行恶意代码。

反射型XSS

预期 URL:https://example.com/search?q=javascript

恶意 URL:https://example.com/search?q=<script>alert(1)</script>

攻击者诱使用户点击此类恶意 URL,用户点击后会执行恶意代码。

DOM型XSS

预期 URL:https://example.com/search?q=javascript

恶意 URL:https://example.com/search#q=<script>alert(1)</script>

DOM 型 XSS 与反射型 XSS 相同,区别在于使用了 # 字符。

浏览器不会向服务器发送 # 后面的 URL 部分,它会直接将其传递给客户端代码。

处理方法

  • 字符串验证:定义一组规则,并要求不受信任的数据满足这些规则后方可继续的方法

  • 字符串转义:浏览字符串并查找特殊字符,如 < >,然后用适当的 HTML 字符名称替换它们

function escapeText(text) {
return text.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
}

  • 字符串清理:当允许用户在评论中输入一些 HTML 标签时,遍历文本查找指定的 HTML 标记并将其删除。但此方法资源昂贵,因此要慎重使用

CSP

内容安全策略 CSP 是一种 Web 安全策略,通过定义哪些资源可以加载到网页中以及如何执行内联脚本来实现,可以有效减少 XSS 的攻击面。

严格的 CSP 具有以下结构,并通过设置 HTTP 响应标头来启用。

  • 基于随机数的严格 CSP

CSP

Content-Security-Policy:
script-src 'nonce-{RANDOM}' 'strict-dynamic';
object-src 'none';
base-uri 'none';
  • 基于 Hash 的严格 CSP
Content-Security-Policy:
script-src 'sha256-{HASHED_INLINE_SCRIPT}' 'strict-dynamic';
object-src 'none';
base-uri 'none';

CSRF

跨站请求伪造 CSRF 是一种攻击类型,在用户已通过身份验证的其它可信网站上执行不必要的操作时,就会发生这种攻击。

CSRF

target-site.com 网站允许用户通过访问特定的 URL 来转账资金。

https://target-site.com/transfer?to=attacker&amount=1000

攻击者创建一个精心构造的网页

<!DOCTYPE html>
<html>
<head>
<title>恶意网页</title>
</head>
<body>
<h1>点击以下链接获取免费礼品卡:</h1>
<img src="https://target-site.com/transfer?to=attacker&amount=1000" alt="礼品卡链接">
</body>
</html>

如图,攻击者将这个恶意网页伪装成诱人的内容,然后诱使用户点击该链接 malicious-site.com。受害者在已经登陆 target-site.com 网站的情况下点击了这个链接。浏览器发送这个请求,由于用户已经通过网站的会话认证,这将导致1000单位的资金被转移到攻击者的账户中。

处理方法

  • CSRF token:为每个用户生成唯一的 CSRF token,并将其与用户的会话相关联。在执行敏感操作之前,服务器会验证请求中的 token,以确保请求是合法的。
  • 同源策略:使用同源策略限制外部网站对受保护网站的访问
  • HTTP Referer:检查 HTTP Referer,以确保请求来自合法的来源

参考文章

https://dev.to/maleta/cors-xss-and-csrf-with-examples-in-10-minutes-35k3