这是我参与「第四届青训营 」笔记创作活动的第四天
现在互联网发展的越来越迅速,WEB技术也发展的越来越广泛现在很多应用大都是在WEB的基础上发展的,随之,很多黑客就抓住系统的bug攻击,web安全也成为了我们程序员应该注重的问题。安全问题处理不好,会危害用户,公司,程序员
本次课程就讲了关于WEB的安全问题,从攻击者和防御者两个角度讲解WEB的攻击技术和对应的防御技术
XSS
什么是XSS?
XSS(跨站脚本攻击):在我们的开发维护页面中攻击者通过一种方式把他的恶意脚本注入进来,造成用户信息泄露。
XSS主要利用了开发者盲目信任用户的提交内容,作为前端工程师我们把字符串直接转化为DOM
XSS特点:通常难以从UI上感知(暗地执行脚本)
XSS的危害:窃取用户信息(cookie/token) 绘制UI(例如弹窗),诱骗用户点击/填写表单
其他XSS攻击
Reflected XSS(反射性XSS攻击):不涉及数据库,从URL上攻击
DOM-based XSS(基于DOM的XSS攻击):不需要服务器的参与,恶意攻击的发起+执行,全在浏览器完成
Mutation-based XSS(基于Mutation的XSS攻击):利用了浏览器渲染DOM的特性(独特优化),不同浏览器,会有区别(按浏览器进行攻击)
Cross-site request forgery(CSRF)(跨站伪造请求):在用户不知情的前提下,利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息
对XSS进行防御
对于XSS的攻击我们做到永远不信任用户的提交内容,不要将用户提交内容直接转换成DOM,就大幅度的避免XSS的攻击
防御XSS的现成工具:
| 前端 | 服务端(Node) |
|---|---|
| 主流框架默认防御xSS | DOMPurify |
| google-closure-library |
注意的点:
① String直接生成DOM:需要对string进行转义
② 如果允许上传SVG:对SVG文件进行扫描
③ 尽量不做让用户自定义跳转链接,如果要做都要进行过滤
Injection
Injection(注入攻击)
常见:SQL Injection
lnjection的防御
找到项目中查询SQL的地方
使用prepared statement
基于传输层的攻击
最常见的中间人攻击, 利用了明文传输,信息篡改不可知,对方身份未验证
传输层防御
防御中间人
HTTPS的一些特性
- 可靠性:加密
- 完整性:MAC验证
- 不可抵赖性:数字签名
对于WEB安全这节课,让我了解了有哪些攻击,有哪些防御,我们该如何预防,这也是我们前端很重要的一部分。