这是我参与「第四届青训营 」笔记创作活动的的第4天,今天的课程主要讲解的是Web开发的安全问题,作为一名前端工程师,开发的网页必须要是安全可靠的,否则对于用户而言将存在安全隐患,可能会导致信息泄露等问题。
一、攻击
正所谓知己知彼百战不殆,我们要先了解敌方的攻击方式,才能做好应对措施。
1.1 Cross-Site Scripting(XSS)
XSS是一种跨站网络攻击,攻击者通过把恶意脚本文件注入到开发代码中,导致了对网页整体页面的改变,当用户访问时执行,对用户信息造成伤害。
XSS的特点主要有:
1.通常难以从UI上感知(暗地里执行)
2. 窃取用户信息(cookie/token)
3. 绘制UI,诱骗用户点击
XSS会存储在数据库中,并对全部用户可见,危害巨大。
1.2 Cross-site request forgery(CSRF)
CSRF既跨站伪造请求, 在用户不知道的前提下利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息。
CSRF通常是通过a标签和image实现。
1.3 Denial of Service(Dos)
服务拒绝,通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求排挤,进而雪崩效应。
二、防御
2.1 XSS
永远不信任用户提交的内容,不要将用户提交内容直接转化成DOM。
前端
- 主流框架默认防御XSS
- google-closure-library
服务端(Node)
- DOMPurify
如果需求是将string直接转为DOM则需要用到 new DOMParser()
如果允许上传svg图片,需要扫描代码。
尽量不要做自定义链接,自定义样式。
2.2 Content Security Policy (CSP)
CSP可以做到
- 哪些源(域名)是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 对eval+inline script 说不
2.3 CSRF
总结
此次的课程介绍的安全防御问题是我第一次见到,之前做项目时均未考虑过这些问题,今后我应当多多注意这方面的问题。