Web安全开发几个注意点
Web安全开发几个注意点
平时在前端开发中会遇到一些常见的攻击,正好近期主要在处理安全方面的问题,记录一下。
主要分为以下几类:
- XSS
- CSRF
- 敏感数据泄露
- 第三方依赖缺陷
- 正则表达式漏洞
- 重定向劫持
安全问题
XSS
Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
根据攻击的来源,XSS 攻击可分为存储型、反射型和 DOM 型三种。
主要的预防方式,是通过对来自外部的数据进行转义后再放到页面渲染。
XSS攻击详细可参考美团技术团队的如何防止XSS攻击?
CSRF
CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
CSRF详细知识可参考美团技术团队的如何防止CSRF攻击?
敏感数据泄露
敏感数据通常指用户的个人信息,包括姓名、密码、身份证号、银行卡号、手机号等等。
这些数据在以下场合可能会存在泄露的风险:
- 浏览器本地存储,使用localstorage保存敏感数据在本地
- 未使用https传输敏感数据
- 将敏感数据放在cookie中传输
- 将敏感数据在日志中明文打印
- 敏感数据在代码中明文硬编码
针对以上的这些风险,尽量要做到不在本地持久化缓存敏感数据、加密传输、日志打码。
第三方依赖缺陷
当前的Web开发,依赖于nodejs的生态,通常会使用npm
或者yarn
来管理第三方依赖,而这些依赖常常会存在一些漏洞,导致我们的应用存在风险。
针对这部分的依赖,有两个工具可以进行扫描:
使用这两个工具扫描后会出来一个缺陷报告,根据报告对依赖进行升级即可。
正则表达式漏洞
由于正则表达式的强大,通常做校验的时候会派上用场。强大的同时,正则的用法同样也是比较复杂的,不经意间可能就会写出复杂的表达式,这个时候就有可能会出现REDOS
的攻击。
对于防范REDOS攻击可以参考Web安全之ReDOS攻击
重定向劫持
在Web开发中,通常会遇到重定向到一个url的操作,这个url有可能是静态的也有可能是外部获取的。这个时候就有可能会遇到被劫持的可能,如果外部传入一个危险的链接,你的站点就会重定向到风险网站。
对于访问重定向劫持的攻击,一个有效的方法是做白名单校验,针对重定向链接做检查,只有符合名单的才做跳转,否则提示用户确认。