安全编码反模式与漏洞发现
1. 安全编码反模式
1.1 代码审查与架构审查
代码层面的安全审查与编写代码前进行的架构审查有一些相似之处,但代码审查更适合发现实际的漏洞,而架构阶段提出的漏洞往往只是假设性的。
1.2 常见反模式
在安全审查中,有几种常见的反模式需要注意,这些反模式可能会给系统带来严重的安全隐患:
- 黑名单机制
- 原理与问题 :黑名单是一种临时或不完整的安全解决方案。例如,在构建服务器端过滤机制时,使用黑名单来限制可集成的域名。以下是示例代码:
const blacklist = ['http://www.evil.com', 'http://www.badguys.net'];
/*
* Determine if the domain is allowed for integration.
*/
const isDomainAccepted = function(domain) {
return !blacklist.includes(domain);
};
这种方法看似可行,但实际上存在缺陷。因为它既不完整(很难掌握所有可能的恶意域名),也不持久(未来可能会出现新的恶意域名)。黑客只需购买一个不在黑名单上的新域名,就可能绕过这种防护。
- **解决方案**:白名单机制是更好的选择。通过只允许已知的、安全的域名进行集成,可以大大提高安全性。示例代码如下: