web开发安全 - 防御篇|青训营

71 阅读2分钟

防御篇

要保护 Web 应用不受攻击,我们需要采取一些措施来防御攻击。以下是一些常见的 Web 开发安全防御技巧。

1. XSS 的防御

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

image.png

  • 现成工具

    1. 前端:

      • 主流框架(React、Vue等)默认防御XSS
      • google-closure-library
    2. 服务端(Node)

      • DOMPurify

2. 防御 CSRF 的正确姿势

  • 验证 HTTP Referer 字段
    Referer 字段中记录了该HTTP请求的来源地址,如果不正确,则有可能是CSRF攻击,拒绝该请求。

  • 在请求地址中添加 token 并验证
    在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

  • 在 HTTP 头中自定义属性并验证
    这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。

image.png

3. 防御 DoS

Dos攻击

  1. 定期扫描
  2. 在骨干节点配置防火墙
  3. 用足够的机器承受黑客攻击
  4. 充分利用网络设备保护网络资源
  5. 过滤不必要的服务和端口
  6. 检查访问者的来源
  7. 过滤所有 RFC1918 IP地址
  8. 限制SYN/ICMP流量

DDos攻击

使用高防服务器、高防CDN、高防IP
注意:DDos攻击只能被减弱,无法被彻底消除。

4. 防御 Injection

  • 使用 prepared statement

  • 严格检查输入变量的类型和格式对于整数参数,加判断条件:不能为空、参数类型必须为数字对于字符串参数,可以使用正则表达式进行过滤:如:必须为[0-9][a-z][A-Z]范围内的字符串

  • 过滤和转义特殊字符在 username 这个变量前进行转义,对'、"、等特殊字符进行转义

  • 利用 mysql 的预编译机制,找到项目中查询 SQL 的地方

5. 防御中间人

image.png

6. SSRF攻击

1、过滤返回的信息,如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

2、统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。

3、限制请求的端口,比如80,443,8080,8090。

4、禁止不常用的协议,仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://等引起的问题。 5、使用DNS缓存或者Host白名单的方式。