Basic Security issues which programmers need to know
- 不要信任用户的输入信息!
- 验证所有来自非信任源的输入信息,是使用白名单,不是黑名单。
- 从一开始就要策划安全。安全并不是可以在最后来做的。
- 保持简单。复杂性会增加安全漏洞的可能性。
- 最低限度保持你程序的攻击面(attack surface)[http://en.wikipedia.org/wiki/Attack_surface]。
- 确保程序有“自动防故障装置”(Fail-safe)[http://en.wikipedia.org/wiki/Fail-safe]
- 采用深度防御(defence in depth)[https://buildsecurityin.us-cert.gov/bsi/articles/knowledge/principles/347-BSI.html]
- 坚持最小特权原则(least privilege)[https://buildsecurityin.us-cert.gov/bsi/articles/knowledge/principles/351-BSI.html]
- 采用威胁建模(threat modelling)[http://www.owasp.org/index.php/Threat_Risk_Modeling](Web程序更应如此)
- 权限分离(Compartmentalize)[http://www.cgisecurity.com/owasp/html/ch04s09.html]
- 没有不透风的墙,在代码中隐藏秘密都无法长久。
- Don’t write your own crypto / 不要自己编写一种加密方法
- 采用加密(crypto),并不意味着你就安全了(攻击者会寻找弱点)
- 注意缓冲区溢出,并了解如何防范