Web开发的安全之旅|青训营笔记

94 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第4天,今天的课程主要讲解的是Web开发的安全问题,作为一名前端工程师,开发的网页必须要是安全可靠的,否则对于用户而言将存在安全隐患,可能会导致信息泄露等问题。

一、攻击

正所谓知己知彼百战不殆,我们要先了解敌方的攻击方式,才能做好应对措施。

1.1 Cross-Site Scripting(XSS)

XSS是一种跨站网络攻击,攻击者通过把恶意脚本文件注入到开发代码中,导致了对网页整体页面的改变,当用户访问时执行,对用户信息造成伤害。

image.png

XSS利用了前端工程师可能出现的盲目信任用户的提交内容的特点,再加上直接将用户提交的String转化成了DOM,例如:document.write,element.innerHTML = anyString ,SSR(user_data)。

XSS的特点主要有:

1.通常难以从UI上感知(暗地里执行)
2. 窃取用户信息(cookie/token)
3. 绘制UI,诱骗用户点击

XSS会存储在数据库中,并对全部用户可见,危害巨大。

1.2 Cross-site request forgery(CSRF)

CSRF既跨站伪造请求, 在用户不知道的前提下利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息。

image.png

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

image.png

总结

此次的课程介绍的安全防御问题是我第一次见到,之前做项目时均未考虑过这些问题,今后我应当多多注意这方面的问题。