网站开发中的安全检查(Penetration Test)

一般稍微大一点规模的网站上线前都要做一下安全性测试。(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

 

 

  

posted on 2011-12-05 15:49  听说读写  阅读(1655)  评论(0编辑  收藏  举报

导航