Web开发安全 | 青训营笔记

61 阅读3分钟

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

一、本堂课重点内容:

  • 了解常见的攻击方式
  • 相对应的防御手段

二、详细知识点介绍

1. Cross Site Scripting (XSS)

XSS攻击,能将恶意的代码注入到网站中

image.png

常见的类型

  • Stored XSS --- 危害最大
    • 恶意的脚本被注入到数据库中
    • 访问页面 -> 读取数据 === 被攻击
  • Reflected XSS
    • 恶意脚本在服务端进行注入
    • 从URL进行攻击
    • 引诱用户点击一个链接到目标网站的恶意链接来实施攻击
  • DOM XSS
    • 不需要服务器的参与
    • 攻击和执行,全在浏览器完成

防御方式

需要遵循的原则:

  • 永远不信任用户的提交内容
  • 不要将用户提交内容直接转成DOM

现成的工具

  • 前端

    • 主流框架默认防御XSS
    • google-closure-library
  • 服务端 Node

    • DOMPurify

Content Security Policy(CSP)

  • 设置哪些源是安全的
  • 只执行安全源的脚本
设置方法
  • 服务端
Content-Sercurity-Policy: script-src 'self' 同源
Content-Sercurity-Policy: script-src 'self' ...(其他源)
  • 浏览器
<meta http-equiv="Content-Sercurity-Policy" content="script-src self">

2. Cross-site request forgery(CSRF)

在用户不知情的前提下,利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息

屏幕截图 2023-02-06 161434 (小).png

防御方式

Origin + Referrer

image.png

token

image.png

SameSite Cookie

image.png

3. Injection

这种类型的攻击允许攻击者将代码注入程序,以执行可以读取或修改数据库或更改网站上数据的远程命令

类型

  • SQL Injection

    利用SQL语句注入可以读取或修改数据库的命令

  • OS command

    通过HTTP请求向Web应用程序注入操作系统命令,攻击者可能会上传恶意程序或获取密码

  • ...

防御方法

prepared statement

在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数执行,因此就算参数中含有具破坏性的指令,也不会被数据库所执行。

其他

  • 最小权限原则
    • 执行的命令不要使用root权限
  • 建立允许名单 + 过滤
    • 对于一些命令只允许一部分人执行
  • 对URL 类型参数进行协议、域名、ip 等限制
    • 避免攻击者访问内网

4. Denial of Service(Dos)

通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应

类型

ReDos: 基于正则表达式的Dos

image.png

防御方法

针对ReDos

image.png

5. Distributed Dos(DDos)

短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新的请求

image.png

防御方法

image.png

三、HTTPS

特性

  • 可靠性: 加密

image.png

  • 完整性:MAC 验证

image.png

  • 不可抵赖性:数字签名

image.png

HTTP Strict-Transport-Security(HSTS)

image.png

四、总结

  • 安全无小事,要了解常见的安全问题和解决方法,安全永远第一位
  • 了解最新的Web安全相关的知识,终身学习