Web开发中的安全问题 | 青训营笔记

81 阅读3分钟

Web开发的安全问题

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

1.重点内容

在网络安全逐渐被人们重视的现在,网络安全始终是开发者需要解决的事情。今天从攻击和防御两个方面来详细了解一下Web开发中会出现的安全问题。

2.重要的知识点

  • 常见攻击手段
  • 常见防御手段

3.详尽的知识点

常见的攻击手段

XSS攻击

  • 难以从UI上感知
  • 窃取用户信息
  • 绘制UI,诱骗用户点击

XSS攻击的分类

  • Stored XSS

    • 恶意脚本存在数据库中
    • 访问页面的所有用户都会被攻击
    • 危害极大
  • Reflected XSS

    • 不涉及数据库
    • 从URL上攻击
  • DOM-based XSS

    • 不需要服务器参与
    • 恶意攻击的发起和执行全都在浏览器完成
  • Mutation-based XSS

    • 利用浏览器渲染DOM的特性
    • 按浏览器区别攻击

CSRF(Cross-site request forgery)攻击

  • 攻击时用户不知情
  • 利用用户权限,如cookies
  • 构造指定的HTTP请求,窃取或修改用户的敏感信息

Injection

  • SQL Injection
  • CLI
  • OS command
  • Server-Side Request Forgery

DoS(Denial of Service)

  • ReDoS

    • 基于正则表达式的贪婪匹配
  • DDoS

    • 短时间来自大量僵尸设备的流量请求

中间人攻击

  • 明文传输
  • 无法知道信息是否被篡改
  • 对方的身份无法被验证

常见防御手段

XSS

  • 永远不信任用户的提交内容

  • 需要对用户提交的内容进行检查

    • 注意转义成DOM时
    • 注意上传svg时
    • 注意自定义跳转
    • 注意自定义样式

CSP(Content Security Policy)

  • 声明哪些域名时安全的
  • 对安全源脚本直接执行,否则直接抛错
  • 禁止使用eval+inline script

CSRF的防御

对请求执行判断,判断是否为异常来源

  • 对于一般的CSRF攻击,可以使用定期更改的token来确认是否为伪造请求
  • 对于iframe攻击,设置X-Frame-OptionsDENY/SAMEORIGIN可以有效防止
  • 将不同的请求方法分开写,防止所有功能杂糅

Injection

  • 在项目中找到使用查询SQL的方法
  • 使用prepared statement处理

ReDoS

  • 减少贪婪匹配的使用
  • 进行代码扫描
  • 对正则功能进行性能测试
  • 不要使用用户提供的正则

DDoS

  • 流量治理

    • 负载均衡
    • API网关
    • CDN
  • 快速自动扩容

  • 非核心服务降级

中间人攻击防御

使用HTTPS协议

  • 可靠性加密
  • 完整性MAC验证
  • 不可抵赖的数字签名

CDN被篡改

通过SRI的对比,防止CDN的内容被篡改

4.课后总结

我们作为开发者,必须重视安全问题,安全问题从来都不是小问题。注意使用的依赖,这些依赖不像开发者自己写的代码那样不容易被篡改,因此对依赖的检查也是重中之重。最重要的一点就时要保持学习的心态,现代前端技术发展的速度非常快,我们也需要时刻保持谦虚,求知的心态去学习。