源代码安全检测
严重安全缺陷
Command Injection(命令注入)
执行不可信赖资源中的命令,或在不可信赖的环境中执行命令,都会导致程序以攻击者的名义执行恶意命令。
Command Injection 漏洞主要表现为以下两种形式:
- 攻击者能够篡改程序执行的命令:攻击者直接控制了所执行的命令。
- 攻击者能够篡改命令的执行环境:攻击者间接地控制了所执行的命令。
修复建议
可以通过修改程序运行命令的环境来间接控制这些命令的执行。我们不应当
完全信赖环境,还需采取预防措施,防止攻击者利用某些控制环境的手段进行攻击。无
论何时,只要有可能,都应由应用程序来控制命令,并使用绝对路径执行命令。如果编
译时尚不了解路径(如在跨平台应用程序中),应该在执行过程中利用可信赖的值构建
一个绝对路径。应对照一系列定义有效值的常量,仔细地检查从配置文件或者环境中读
取的命令值和路径
Cross-Site Scripting: DOM(DOM 型跨站脚本攻击)
向一个Web浏览器发送未经验证的数据会导致该浏览器执行恶意代码。
措施
自动 URL 编码:使用 URLSearchParams 对所有参数进行编码
协议验证:只允许 http: 和 https:,阻止 javascript: 等危险协议
Hash 处理:正确处理包含 # 的 URL(如 SPA 路由)
错误处理:提供 try-catch 和用户友好的错误提示
Open Redirect(开放重定向)
通过重定向,Web 应用程序能够引导用户访问同一应用程序内的不同网页或访问外
部站点。应用程序利用重定向来帮助进行站点导航,有时还跟踪用户退出站点的方式。
当 Web 应用程序将客户端重定向到攻击者可以控制的任意 URL 时,就会发生 Open
redirect 漏洞:
攻击者可能利用 Open Redirect 漏洞诱骗用户访问某个可信赖的站点的 URL,然后将他们
重定向到恶意站点。攻击者通过对 URL 进行编码,使最终用户很难注意到重定向的恶意
目标
措施
1. 域名白名单机制
2. 域名验证函数
3. 相对路径处理
4. 开放重定向检查
高危安全缺陷
Insecure Randomness(不安全的随机数)
标准的伪随机数值生成器不能抵挡各种加密攻击
在对安全性要求较高的环境中,使用能够生成可预测值的函数作为随机数据源,会
产生 Insecure Randomness 错误
1 | 浏览器原生的加密安全随机数生成方案,基于 Web Crypto API 实现 |
Password Management: Empty Password
Emptypassword可能会危及系统安全,并且无法轻易修正出现的安全问题
密码始终不能为空。一般来说,应对密码加以模糊化,并在外部资源中进行管理。
如果将密码以明文形式存储在网站中任意位置,会造成任何有充分权限的人读取和无意
中误用密码。对于需要输入密码的 JavaScript 引用,最好在连接时就提示用户输入密码
更新验证逻辑,添加严格非空校验和密码强度校验
低风险安全缺陷
Cross-Site Request Forgery跨站点伪装请求 (CSRF)
漏洞会在以下情况下发生:
- Web 应用程序使用会话 cookie。
- 应用程序未验证请求是否经过用户同意便处理 HTTP 请求。
前端配合后端实现 CSRF 核心防护
添加 CSRF Token 获取方法,从 Cookie 中获取(支持 XSRF-TOKEN、csrf-token、_csrf),
在请求中添加 CSRF 防护,在 fetch() 方法中添加了 CSRF token 到请求头
同时添加 X-CSRF-TOKEN 和 X-XSRF-TOKEN
1 | // 从 Cookie 中获取 CSRF token(支持 XSRF-TOKEN、csrf-token、_csrf) |
Denial of Service拒绝服务攻击
攻击者可能通过对应用程序发送大量请求,而使它拒绝对合法用户的服务,但是这
种攻击形式经常会在网络层就被排除掉了。更加严重的是那些只需要使用少量请求就可
以使得攻击者让应用程序过载的 bug。这种 bug 允许攻击者去指定请求使用系统资源的数
量,或者是持续使用这些系统资源的时间
校验用户输入以确保它不会引起不适当的资源利用。
最大文件大小
接口请求限流 / 防抖 / 节流,防止单用户高频请求
优化资源加载
System Information Leak: Internal内部系统信息泄露
通过打印或日志记录功能将系统数据或调试信息发送到本地文件、控制台或屏幕时
,就会发生内部信息泄露。
自定义统一的错误页面 / 错误响应:应用报错时,返回无任何内部信息的通用错误(如 “系统繁忙,请稍后再试”),仅将详细错误信息记录到服务端日志(不对外展示);




