Web 开发安全防御篇

80 阅读2分钟

上回说完了攻击篇,接下来就是防御篇。你永远不知道你的Web被以什么样的形式攻击。只能防范于未然。

首先永远不要相信用户的提交内容。不用将用户提交内容直接转成DOM。不要没事找事,能避免的尽可能避免。如果因为某些不可抗拒的因素,必须要生成动态DOM的话。

要分情况。第一种是把string 转成DOM 的话,需要对string进行转义。第二种如果是上传svg的话,需要对svg去进行扫描,在svg中可能会插入script标签。第三种如果让用户自定义跳转链接,最好去进行过滤等等

Content Security Policy(CSP) 它可以去确认哪些源(域名)是安全的。来自安全源的脚本可以执行,否则直接抛出。

在服务器的响应头部进行设置

Content-Security-Policy: script-src 'self' 
Content-Security-Policy: script-src 'self' https://domain.com 

浏览器 meta

<meta http-equiv="Content-Security-Policy" content="script-src self">

CSRF 的防御

第一种 token 验证。它是用户会显示页面,但之后请求时会有一个token去进行验证。 第二种 去防御iframe攻击。它主要是可以通过iframe进行同源请求。CSRF有一个HTTP头部响应使用X-Frame-Options: DENY/SAMEORIGIN

Injection 的防御

第一种,在项目中查询SQL的地方使用prepared statement(它是将 SQL语句提前进行编译)。

第二种,最小权限原则,所有的命令都不要通过输入进行完成,不要给他用户权限。

第三种,建立白名单的机制,只允许指定命令执行。

第四种,对应使用SSR对URL类型的参数进行协议,域名,ip等限制。 等等

防御 Dos

Regex Dos 第一种,避免使用贪婪匹配的方式。

第二种,使用代码扫描工具,去进行正则性能测试。

第三种,拒绝用户提供的使用正则。

DDos 流量治理: 负载均衡, API网关进行流量的识别,去进行过滤。 抗量:前置CDN ,快速自动扩容,非核心服务降级

在传输层进行防御

HTTPS的特性:

可靠性:加密。去避免明文传输。它会在传输内容中加入加密信息_hash ,在接收方去判断hash的加密信息与加密信息_hash是否相等

完整性:MAC验证。确保信息没有被篡改。

不可抵赖性:数字签名。确保双方身份是可被信任的。

总结

安全无小事,一旦发生那天塌了。对于Web开发安全,我们要保持学习心态。并且要注意不要太信赖你的依赖,依赖也有可能会出错。