Web 安全之常见攻击与防御手段 | 青训营笔记

284 阅读3分钟

这是我参与「第四届青训营」笔记创作活动的的第 5 天

攻击篇

XSS

XSS 即 Cross Site Scripting。是最常见的一种攻击方式。就是攻击者将 script 脚本给注入到我们开发的页面当中,用户访问我们的页面的时候,这些恶意注入的脚本就会被执行。

主要原因是开发者盲目信任了用户提交的内容,并且将用户的字符串转换为了 DOM。

XSS 难以从 UI 上感知,可以窃取用户的信息(cookie、token 等),可以绘制 UI 来诱骗用户填写表单等。

CSRF

即跨站伪造请求,利用用户的数据伪造请求。比如用户访问恶意页面,攻击者使用用户的 cookie 发起请求,导致用户的隐私泄露或财产受损。

Injection

最常见的当属人们耳熟能详的 SQL 输入。也就是一句 SQL 语句中有参数,而服务端从请求中拿到参数构造 SQL 语句,再运行 SQL 代码,此时攻击者可以提交一些特定的参数给服务端,构造一个恶意 SQL 语句给服务端执行。

当然注入也不仅仅是 SQL 注入,还有 CLI 之类的程序也有可能被注入。

DoS

DoS(Denial of Service) 即拒绝服务攻击。通过某种方式构造特定的情况,导致服务器资源被显著消耗,来不及响应更多的请求。

DDoS

DDoS(Distributed Denial of Service)即分布式拒绝服务攻击。就是 DoS 的加强版,可以在短时间内制造大量的请求。

DDoS 的特点是直接访问 IP,会访问任意的 API,目的是耗尽服务器的带宽。

防御篇

上面介绍了一些常见的攻击方式,那么下面就来介绍一下这些攻击的防御方式。

XSS

  • 永远不信任用户提交的内容。(对用户提交的内容进行扫描,剔除危险的标签)
  • 不要将用户提交的内容直接转换成 DOM。(先对 DOM 进行转移,再转换成 DOM)

CSRF

SOP 同源策略

同源策略是指只有当同源的时候才被允许一些操作,而是否同源需要协议、域名和端口都相同才会被认为是同源。

CSP 内容安全策略

CSP 允许开发者指定哪些源被认为是安全的,只有赖在安全源的脚本可以被执行,否则直接报错。

Injection

使用 prepared statement,也就是提前编译要执行的 SQL 语句。

建立最小权限原则,不要使用 sudo 执行命令或者给予 root 权限;建立允许名单,只允许指定的命令执行;对 URL 的参数类型进行一定的限制。

DoS

  • 避免编写贪婪匹配的正则表达式
  • 使用代码扫描工具,并对正则进行性能测试
  • 拒绝使用用户提供的正则

DDoS

  • 负载均衡、API 网关。进行流量识别,如果是恶意攻击则拒绝或转移。
  • CDN
  • 快速自动扩容
  • 非核心服务降级