这是我参与「第四届青训营 」笔记创作活动的第3天
针对XSS攻击
两个原则
-
永远不信任用户提交的内容
-
不要将用户提交内容直接转换成DOM
现成工具:
前端
-
主流框架默认防御(Vue、React)
-
google-closure-library
服务端
- DOMPurify
服务要求需要动态生成DOM时的注意事项
String->DOM
对String进行转义
上传svg图片文件
对文件进行扫描
自定义跳转链接
尽量不做自定义跳转链接,如果确实需求需要,则做好过滤
CSP(内容安全策略)
同源是值协议、域名、端口都要相同
CSP允许开发者自行定义哪些源被认为是安全的,来自安全源的脚本可以执行,否则直接报错。对eval和inline script直接拒绝。
针对CSRF的防御
Origin + Referrer
token
使用时需要注意
-
token需要和具体用户绑定
-
token需要设置过期时间
iframe攻击(同源请求)
设置X-Frame_Options响应头部
X-Frame_Options:DENY/SAMEORIGIN
DENY:当前页面不能作为iframe加载
SAMEORIGIN:必须是同源页面才是iframe加载
避免用户信息被携带:SameSite Cookie
从根源上解决CSRF的攻击,限制的是Cookie的domain属性以及页面域名
这种方式对于依赖第三方资源的情况也是适用的
防御CSRF的正确方法
建立中间件,在其中生成防御CSRF的策略
针对Injection的防御
将SQL语句提前编译
-
找到项目中查询SQL的地方
-
使用prepared statement,
针对DoS的防御
Regex DoS
-
完善Review的的工作,避免写出贪婪正则表达式匹配
-
用代码扫描工具对代码进行测试
-
拒绝使用用户提供的正则
DDoS
传输层的防御--防御中间人
HTTPS : HTTP + TLS
HTTPS的一些特性
-
可靠性:加密
-
完整性:MAC验证
-
不可抵赖性:数字签名
HSTS
将HTTP主动升级到HTTPS
总结与感悟
本节课针对Web安全相关进行了讲解,从主流攻击方式介绍再到防御手段介绍,我了解了很多以前不知道也没去在意的东西。随着网络的发展和时代的进步,网络安全一直以来都是大家关心的热点问题,作为未来的前端工程师,未来一定会面对这个问题,再者我们自然也有责任有义务维护好安全的环境。之前我一直处于前端学习阶段,并没有接触和关注安全相关问题,上完这节课之后我有了大概的了解,但也仅仅是了解的程度而已,目前我还缺乏计算机网络方面及浏览器响应机制的知识,因此听起来还是比较费劲。希望以后有了相关知识储备以及项目经验之后,对这方面有更多的认识。