Web安全-防御篇 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第6天
防御XSS攻击
- 对输入内容的特定字符进行编码,例如表示 html标记的 < > 等符号。
- 对重要的 cookie设置 httpOnly, 防止客户端通过document.cookie读取 cookie,此 HTTP头由服务端设置。
- 将不可信的值输出 URL参数之前,进行 URLEncode操作,而对于从 URL参数中获取值一定要进行格式检测(比如你需要的是URL,就判读是否满足URL格式)。
- 不要使用 Eval来解析并运行不确定的数据或代码,对于 JSON解析请使用 JSON.parse() 方法。
- 后端接口也应该要做到关键字符过滤的问题。
防御CSRF攻击
- 验证 HTTP Referer 字段
Referer 字段中记录了该HTTP请求的来源地址,如果不正确,则有可能是CSRF攻击,拒绝该请求。 - 在请求地址中添加 token 并验证
在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。 - 在 HTTP 头中自定义属性并验证
这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。
防御SQL Injection攻击
- 严格检查输入变量的类型和格式对于整数参数,加判断条件:不能为空、参数类型必须为数字对于字符串参数,可以使用正则表达式进行过滤:如:必须为[0-9][a-z][A-Z]范围内的字符串
- 过滤和转义特殊字符在 username 这个变量前进行转义,对'、"、等特殊字符进行转义
- 利用 mysql 的预编译机制
SSRF攻击
1、过滤返回的信息,如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2、统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
3、限制请求的端口,比如80,443,8080,8090。
4、禁止不常用的协议,仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://等引起的问题。
5、使用DNS缓存或者Host白名单的方式
Dos攻击
- 定期扫描
- 在骨干节点配置防火墙
- 用足够的机器承受黑客攻击
- 充分利用网络设备保护网络资源
- 过滤不必要的服务和端口
- 检查访问者的来源
- 过滤所有 RFC1918 IP地址
- 限制SYN/ICMP流量
DDos攻击
使用高防服务器、高防CDN、高防IP
注意:DDos攻击只能被减弱,无法被彻底消除。