强制执行像Facebook的代码审计

简介:

Facebook、Google这样的巨头IT公司都具备完善的代码库管理、代码审计(Code Review)制度。代码审计能够消除一些Bug,不过事实上,这不是代码审计最主要的目的,因为Reviewer很难通过审阅代码来发现深层次的Bug。代码审计更重要的是,它有助于维护代码的质量,因为Reviewer可以发现代码编写的是否规范,可以从审计过程中互相学习,也可以指出代码存在的问题。此外,开发人员也会有更多的意识来编写更高质量的代码,被别人指出太多问题或者低级问题,显示是很没有面子的,:)。因此,我认为代码审计对于产品的维护过程是非常重要的一环。Facebook采用谨慎的审计来防止代码出现一些问题。

Facebook 有非常牢靠的安全保障,以免有人(你可以想象内部有人有这个权限的)不小心/故意做了些糟糕的的事。如果你已经"成为"了需要别人支持的人,事由将被记录,并且有谨慎的审计。这里不允许钻空子。

你也可以查看“http://www.bccn.net/Article/kfyy/rjgc/200708/5062.html”来了解更多关于代码审计的细节。下面我来介绍一下,我如何通过VisualSVN + BugTracker.NET + TotoiseSVN/AnkhSVN这些工具,在产品实现和维护过程中确保代码审计的实施。VisualSVN是产品代码的配置管理工具;BugTracker.NET是缺陷跟踪系统,也是在代码审计过程中,开发者和审计者的协作平台,它能够与VisualSVN实现无缝整合;TotoiseSVN/AnkhSVN是代码Check in/Check out等操作的辅助工具。

首先,确保代码审计严格实施基于我们产品开发过程中对Check in的两个限制,如下:

  1. 没有一个BugID,那么任何东西都不可以Check in到代码库;
  2. 如果代码对应的Bug所处的状态不是“Review Passed”,那么任何东西都不可以Check in到代码库。

这两个限制能够来避免开发人员不经过审查就将代码非法的Check in到仓库。因此,当没有指定Bug/BugId不存在/Bug不处于Review Passed状态时,将阻止开发者Check in代码,向其提示错误消息。

imageimageimage

要实现Check in之前的限制,我们需要通过向VisualSVN的代码仓库中注册一个Pre-Commit的Hook,通过这个Hook来检查要Check in的代码是否处于正确的状态。以下是执行这个操作的Hook。这个Hook会获取当前BugId,然后传递给BugTracker.NET中的svn_hook.aspx执行对Bug状态的查询,如果允许签入,则返回包含“OK:”的响应码,否则,返回“ERROR:”。

 

复制代码
# !/usr/local/bin/python
import  sys 
import  subprocess 
import  re 
import  urllib 
import  os
svnlook
= ' C://Progra~1//Visual~1//bin//svnlook.exe '  
this_repository_url 
=   " https://LADANFKING:8443/svn/monoaddins "  
btnet_url 
=   " http://ladanfking/btnet/svn_hook.aspx "  
btnet_username 
=   " admin "  
btnet_password 
=   " admin "
repos
= sys.argv[ 1
txn
= sys.argv[ 2 ]
#  Pre-commit tag 
status  =   - 1
bDebug 
=  False

def  debug_out(s): 
    
if  (bDebug): 
        f 
=  open( ' d:\\btnet_svn_hook_log.txt ' ' a '
        f.write(s) 
        f.write(
' \n '
        f.close    
        
print  s
log_cmd 
=  svnlook  +   '  log -t " '   +  txn  +   ' " " '   +  repos  +   ' " '  
process 
=  subprocess.Popen(log_cmd, stdout = subprocess.PIPE, stderr = subprocess.PIPE) 
log_string 
=  process.stdout.read()
debug_out(log_string)
params 
=  urllib.urlencode({ 
    
' svn_log ' : log_string, 
    
' repo ' : this_repository_url, 
    
' username ' : btnet_username, 
    
' password ' : btnet_password, 
    
' status ' :status})
response 
=  urllib.urlopen(btnet_url, params) 
data 
=  response.read() 
debug_out(data)
nPos 
=  data.find( ' OK: '
print  data 
if  nPos  >=  0  and  nPos  ==  (len(data)  -   3 ): 
    sys.exit(0) 
else
    sys.exit(
1 )
复制代码

 

因此,开发者想要Check in之前,必须创建一个Bug,并将这个Bug赋给某个人进行Review。这个步骤如下:

1 Create Bug:这一步骤一般是由QA来完成的,开发者也可以自己来创建Bug。如下所示。

image

2 Assign Review

(1)创建一个Patch:进入到你的代码工作目录,然后右键,使用TotoiseSVN的“Create Patch”来创建一个补丁。

image

这个补丁打开后就是前后代码的变更情况。

image

(2)Assign Review:这一步就是将这个Patch文件通过BugTracker.NET作为附件上传给指定Bug,并将这个Bug赋给某个人来审计。

image

3 Review:审计人员进入BugTracker.NET,查看Patch文件,如果审计通过,则将状态改为“Review Passed”,否则更改为“Review Failed”,这样开发人员需要重新进行代码变更并申请新的审计。

当要Check in的代码对应的Bug通过了审计之后,开发者就可以Check in了。以下是代码Check in之后的情况了。

image

另外,其他人可以通过点击“svn revisions”来查看本次的更新,如下。

image

这样,引入强制的代码审计就可以约束了开发者不可以随意Check in代码,不可以Check in不符合质量要求的代码,而且,其他开发人员可以查询BugTracker.NET仓库来看看相似的Bug是如何修复的。


本文转自道法自然博客园博客,原文链接:http://www.cnblogs.com/baihmpgy/archive/2011/09/09/2172425.html,如需转载请自行联系原作者

目录
相关文章
|
8月前
|
安全 前端开发 数据安全/隐私保护
BurpSuite进阶篇--自动化挖掘越权漏洞
BurpSuite进阶篇--自动化挖掘越权漏洞
344 0
|
12月前
|
SQL 监控 安全
发卡系统代码审计
发卡系统代码审计
|
12月前
YzmCMS代码审计
YzmCMS代码审计
158 0
|
存储 安全 前端开发
代码审计系统 Swallow 开发回顾
做甲方安全建设,SDL是一个离不开的话题,其中就包含代码审计工作,我从最开始使用编辑器自带的查找,到使用fortify工具,再到后来又觉得fortify的扫描太慢影响审计效率,再后来就想着把fortify集成到自己的业务系统中去
123 0
|
数据采集 域名解析 XML
漏洞猎人赏金笔记-如何编写Bug Bounty自动化脚本
前言 本文原文作者为@pry0cc,本文主要是对原文相关内容的提炼以及笔记,出于易读性考虑,笔者对很多地方做了一定量的注释或者删改(因为原文中的脚本存在一定问题)。 本文主要讲解的是经典的自动化信息搜集以及数据处理和漏洞扫描的流程.
421 0
漏洞猎人赏金笔记-如何编写Bug Bounty自动化脚本
|
SQL 移动开发 供应链
网站代码审计漏洞查找技术是如何炼成的?
常常许多人问过那样一个难题,网络黑客是确实那么强大吗?就现阶段来讲,在黑客游戏或影视剧中,网络黑客所展现的工作能力与实际是相差无异的(黑客帝国此类种类以外)。唯一的差别是影视剧中的主人公可以瞬间控制供电系统,导致大城市电力工程偏瘫。走在路上任意监听所有人。
326 0
网站代码审计漏洞查找技术是如何炼成的?
|
安全 程序员 索引
黑客用谷歌开发人员网站发恶意软件
一位安全研究人员星期五(1月9日)称,谷歌为开发人员推出的免费的代码托管网站正在被用于发布恶意软件。 Google Code是程序员能够托管项目和代码的一个网站。McAfee Avert Labs的安全研究经理Dave Marcus说,这个网站在拥有合法的代码的同时还有一些指向虚假的视频的链接,让用户下载缺失的解码器。
821 0
|
存储 安全 数据安全/隐私保护
安全漏洞潜伏十四年,你的 Google 账号还好吗?
安全漏洞存在了十四年之久至今才被发现,这确实会让人感到不安。
1275 0
|
SQL 安全 数据库
代码审计之DocCms漏洞分析
0x01 前言 DocCms[音译:稻壳Cms] ,定位于为企业、站长、开发者、网络公司、VI策划设计公司、SEO推广营销公司、网站初学者等用户 量身打造的一款全新企业建站、内容管理系统,服务于企业品牌信息化建设,也适应用个人、门户网站建设! 0x02 环境搭建 DocCms官网:http://www.
2320 0