一般稍微大一点规模的网站上线前都要做一下安全性测试。(Penetration Test)
安全测试一般包括以下几个步骤:
1.选择一系列安全问题点,分析测试的可行性.(选择几个需要进行测试的问题,例如SQL注入)
2.定位系统缺陷,并在其中找出高风险性的部分.(一般使用自动化工具)
3.定位那些可能存在的, 难以被自动化测试工具测试出来的缺陷.
4.评估缺点对潜在业务和操作的影响.
5.测试现有系统防御能力,应对和处理攻击数据的能力.
6.提供用于改进享有系统安全性的建议
一般常见的问题如下:(包括但不仅限于)
1.SQL 注入。
2.XSS 和 CSRF。
3.Cookies,Session劫持和伪造。
4.不必要的权限和信息泄露。
5.伪造数据和授权问题
6.环境和代码安全性 (服务器配置,混淆,加壳等)
问题原因往往是:
1.架构设计的缺陷或者未充分考虑安全性
2.代码BUG
3.不完整的测试,代码覆盖率不够高(当然较高的代码测试覆盖率意味者较高的成本,一般指关于逻辑和数据的测试)
4.未及时移除测试性代码和将DEBUG的信息发布到生产环境
5.服务器设置,特别是权限
6.某些人员恶意修改
一般分为自动化和人工两个部分
自动化一般是使用自己或者第三方开发的工具:
第三方工具推荐: IBM AppScan http://www-01.ibm.com/software/awdtools/appscan/ 非常贵但是非常好用的End-to-End测试工具
还有一些免费的测试工具,例如nikto和skipfish 不过免费的...确实不是什么好货色....
这些自动化工具同时一般也包含服务器扫描,断链,拼写检查等功能
人工测试主要是以下的策略:
1. CodeReview
- CodeReview其实很大程度上是为了给developer一种压力,让developer知道有人会查看他的代码,从而促使他提供更高质量的产品.
- CodeReview还有其他很多的用途,移除程序中的缺陷是其中比较重要的一个.
2.手动测试
- 一般是选择几个关键的流程和功能进行测试
有兴趣的朋友可以看看这个文档 Technical Guide to Information Security Testing and Assessment
和这个网页 http://en.wikipedia.org/wiki/Penetration_test
另外建议项目适当的设置不同的环境 (不仅仅用于保证安全性)
1.Local
2.DEV 用于开发小组的内部测试,一般程序员只能工作于Local和DEV环境
3.QAT 只有QA有权限部署该环境,QA在这个环境工作
4.UAT 用户将在这个环境进行测试,该环境的搭建和程序集的编译往往是和开发人员无关的
5.Prod