Web开发安全 | 青训营笔记

99 阅读4分钟

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

本堂课重点内容

从攻击、防御两个视角,简要介绍前端范畴内常见的安全问题,包括 XSS、CSRF、SQL 注入、DOS 等。

详细知识点介绍

常见的几种攻击&防御策略

1. XSS(跨站攻击)

原因:盲目信任用户提交的内容,并将其直接渲染到页面。

特点:1.通常难以从UI上感知(暗地执行脚本) 2.窃取用户信息(cookie/token) 3.绘制UI(例如弹窗),诱骗用户点击/填写表单

分类

  • Stored XSS
    恶意脚本被存在数据库中,访问页面→读数据被攻击危害最大,对全部用户可见
  • Reflected XSS
    不涉及数据库从URL上攻击。与DOM-based XSS的区别在于脚本注入在服务器/浏览器
  • DOM-based XSS
    不需要服务器的参与,恶意攻击的发起+执行,全在浏览器完成
  • Mutation-based XSS
    利用了浏览器渲染DOM的特性(独特优化),不同浏览器,会有区别(按浏览器进行攻击)

防御

image.png

前端和服务器开发框架中默认防御XSS,但对于必须动态生成DOM的情况,警惕以下5种情况。

  • string->DOM
  • 上传svg
  • Blob 动态生成script
  • 自定义跳转链接
  • 自定义样式
2. CSRF(跨站伪造请求攻击)

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

image.png 访问银行平台例子,盗用用户有Cookie的请求

防御

2种策略:同源策略、CSP

避免用户信息被携带: SameSite Cookie

image.png

3. SQL Injection(SQL注入攻击)

image.png

相似原理的SSRF(服务端伪造请求),可以操作系统文件,或转发流量至第三方网站致其挂掉,或获取内网信息

防御

image.png

image.png

4. DoS(拒绝服务攻击)

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

  1. ReDos:基于正则表达式的Dos。利用回溯增加响应时间、接口吞吐量
  2. Logical DoS:耗时的同步操作、数据库写入、sQL join、文件备份、循环执行逻辑
  3. DDoS:直接访问IP,任意API,消耗大量带宽(耗尽)。例如SYN Flood,不执行第三次握手,connection不能被释放,新请求不能完成。

防御

1.ReDoS

  • code Review (×/(ab*)+/)
  • 代码扫描+正则性能测试
  • ×用户提供的使用正则

2.Logical DoS

  • 不是非黑即白
    • 有些case,只有在请求量大到一定之后,才会体现
  • 分析代码中的性能瓶颈
    • 同步调用
    • 串行逻辑
    • CPU密集型操作
  • 限流

3.DDoS

image.png

5. MITM(中间人攻击)

①明文传输②信息篡改不可知③对方身份未验证

image.png

防御

HTTP3(QUIC)内置了TLS 1.3

image.png

课后个人总结

  • 安全攻击

    1、SQL、HTML、JS、OS命令注入

    2、XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码

    3、CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信任的网站。

    4、目录遍历漏洞

    5、参数篡改

    6、会话劫持

  • 防止攻击的措施总结

1)对用户输入的数据进行全面安全检查或过滤,尤其注意检查是否包含SQL 或XSS特殊字符。验证用户输入的数据,包括值、类型、范围等等,用验证控件进行验证 RequiredFieldValidator RangeValidator RegularExpressionValidator

   这些检查或过滤必须在服务器端客户端都进行。客户端服务端都要进行验证,客户端为了提高用户体验,服务端才可以有效防止威胁

2)不要使用管理员权限的数据库连接,不要使用动态拼接sql

3)机密信息加密,不能使用明文

4)每个页面加载时,对用户合法性进行判断。

5)登录后session中的敏感信息需要加密,避免在永久cookies中存储敏感信息,重要的cookie标记为http only

6)发送敏感信息时使用SSL、POST方式,尽量使用新型web HSTS安全协议

7)不要直接抛出异常的详细信息给用户,异常返回友好的页面,防止用户看到敏感信息

8)在服务器与网络的接口处配置防火墙,用于阻断外界用户对服务器的扫描和探测。

9)限制网站后台访问权限,如:禁止公网IP访问后台;禁止服务员使用弱口令。

10)关闭windows的8.3格式功能。DOS系统下的命令方式为8.3格式,即文件名不超过8个字符,扩展名不超过3个字符。形如:???.exe 。

       现在Windows系统文件名长度最长可达255个字符了。

11)限制敏感页面或目录的访问权限。

12)项目发布前使用使用漏洞扫描软件,如IBM appScan,UnisWebScanner,对安全性进行评估。

参考资料

Docs (feishu.cn)

web开发中常见的安全漏洞及避免方法 - AmyAlisa - 博客园 (cnblogs.com)