书格前端

Web安全开发几个注意点


Web安全开发几个注意点

平时在前端开发中会遇到一些常见的攻击,正好近期主要在处理安全方面的问题,记录一下。

主要分为以下几类:

  1. XSS
  2. CSRF
  3. 敏感数据泄露
  4. 第三方依赖缺陷
  5. 正则表达式漏洞
  6. 重定向劫持

安全问题

XSS

Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。

根据攻击的来源,XSS 攻击可分为存储型、反射型和 DOM 型三种。

主要的预防方式,是通过对来自外部的数据进行转义后再放到页面渲染。

XSS攻击详细可参考美团技术团队的如何防止XSS攻击?

CSRF

CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

CSRF详细知识可参考美团技术团队的如何防止CSRF攻击?

敏感数据泄露

敏感数据通常指用户的个人信息,包括姓名、密码、身份证号、银行卡号、手机号等等。

这些数据在以下场合可能会存在泄露的风险:

  1. 浏览器本地存储,使用localstorage保存敏感数据在本地
  2. 未使用https传输敏感数据
  3. 将敏感数据放在cookie中传输
  4. 将敏感数据在日志中明文打印
  5. 敏感数据在代码中明文硬编码

针对以上的这些风险,尽量要做到不在本地持久化缓存敏感数据、加密传输、日志打码。

第三方依赖缺陷

当前的Web开发,依赖于nodejs的生态,通常会使用npm或者yarn来管理第三方依赖,而这些依赖常常会存在一些漏洞,导致我们的应用存在风险。

针对这部分的依赖,有两个工具可以进行扫描:

  1. npm audit
  2. snyk

使用这两个工具扫描后会出来一个缺陷报告,根据报告对依赖进行升级即可。

正则表达式漏洞

由于正则表达式的强大,通常做校验的时候会派上用场。强大的同时,正则的用法同样也是比较复杂的,不经意间可能就会写出复杂的表达式,这个时候就有可能会出现REDOS的攻击。

对于防范REDOS攻击可以参考Web安全之ReDOS攻击

重定向劫持

在Web开发中,通常会遇到重定向到一个url的操作,这个url有可能是静态的也有可能是外部获取的。这个时候就有可能会遇到被劫持的可能,如果外部传入一个危险的链接,你的站点就会重定向到风险网站。

对于访问重定向劫持的攻击,一个有效的方法是做白名单校验,针对重定向链接做检查,只有符合名单的才做跳转,否则提示用户确认。

参考材料