软件产品安全技术介绍
第一章 软件系统代码安全
1.1安全措施提要
1、代码、程序分离机制(三层架构)
2、预防SQL注入
3、MD5加密
4、Cookie存储与Session控制
5、特殊字符过滤
6、文件上传漏洞防御(防挂马)
7、建立网站(软件)系统文件对照表
1.2代码、程序分离机制
1、系统安全运行机制是采用用户界面表示层(USL)+业务逻辑层(BLL)+数据访问层(DAL)三层分离的结构原理。
2、代码、程序分离机制的意义在于,用户表示层全部存储于数据库表文件,隔断前台用户访问读写时对界面层的攻击破坏。
例:
用户界面表示层(USL)
<div class=indexCase>
<UL>
【ArticleList(1001,11|34,true,0,8,false,true,,0,3,True,30,0)】
<LI><a class="" href="{$ArticleUrl}" title="{$Title}" target="_blank">{$ArticlePic(200,290)}
<div><SPAN>{$Title}</SPAN><I>{$UpdateDate}</I><EM>{$Hits} 次</EM></div></A></LI>
【/ArticleList】
</UL>
</div></div>
其中:{$ArticleUrl}、{$ArticlePic(200,290)}为执行特定功能的参数标签,并以数据形式,存储于数据表中。
业务逻辑层(BLL)
Asp代码片段:
InfoUrl = GetArticleUrl(rsPic("ParentDir"), rsPic("ClassDir"), rsPic("UpdateTime"), rsPic("ArticleID"),
rsPic("ClassPurview"), rsPic("InfoPurview"), rsPic("InfoPoint"))
Private Function GetCurArticleUrl()
Dim strCur
strCur = GetArticleUrl(ParentDir, ClassDir, rsArticle("UpdateTime"), rsArticle("ArticleID"), ClassPurview, rsArticle("InfoPurview"), rsArticle("InfoPoint"))
GetCurArticleUrl = strCur
End Function
1.3预防SQL注入
系统中所有的SQL查询语句的开发规范都以(传参)参数传递的方式,入侵者无法通过构建特殊的输入作为参数传入Web应用程序,通过执行SQL语句进而执行攻击者所要的操作非法数据侵入系统。
例:以我公司所开发的系统中某段更新程序代码片段举例
C#代码片段:
public int UpdateUser(Account acc) {
Int Result=Convert.ToInt32(SqlHelper.ExecuteNonQuery(@"update SJ_User set LoginName=@LoginName,
TrueName=@TrueName,PassWord=@PassWord, eceivePassWord=@ReceivePassWord, IsLocked=@IsLocked where UserID=@UserID",
new SqlParameter("@TrueName", acc.TrueName),
new SqlParameter("@LoginName", acc.LoginName),
new SqlParameter("@UserID", acc.UserID),
new SqlParameter("@PassWord", acc.PassWord),
new SqlParameter("@ReceivePassWord", acc.ReceivePassWord),
new SqlParameter("@IsLocked", acc.IsLocked)));
return Result;
}
1.4 MD5加密
MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),系统中对用户的密码、加密文件通过MD5的加密形成密文保存于数据库表,当用户登录系统是利用数据表中加密后的字符串与用户登录是输入的密码,用MD5加密形成的字符串比对,以确定用户输入的密码是否正确。
例:
普通字符串加密前123456,MD5加密后字符串:
16位:49ba59abbe56e057
32位:e10adc3949ba59abbe56e057f20f883e
1.5 Cookie存储与Session状态保存
在开发B/S架构的项目系统中,存在客户端信息保存的安全问题。为了加快B/S架构项目系统的用户访问速度,一般情况我们会将一些用户信息保存在客户端或者服务器内存中以减少服务器响应的频次与存储负荷。对于客户端的数据存储存在信息安全和客户端Cookie设置的不确定性。我们系统一般的处理方式为将标记客户索引的数据(如UserID,此信息不会产生数据泄密的情况)存储于客户端,其它信息存储于Session中,在客户端离开访问时由服务器回收。而用户索引由客户端保存。此数据管理机制的意义在于系统即提高的数据响应速度又做到了信息安全。
1.6特殊字符过滤
输入框是黑客利用的一个目标,他们可以通过输入脚本语言等对用户客户端造成损坏;如果该输入框涉及数据查询,他们会利用特殊查询语句,得到更多的数据库数据,甚至表的全部。因此必须对输入框进行过滤。但如果为了提高效率仅在客户端进行输入合法性检查,仍有可能被绕过。
防范技巧:在处理类似留言板、BBS等输入框的ASP程序中,最好屏蔽掉HTML、JavaScript、VBScript语句,如无特殊要求,可以限定只允许输入字母与数字,屏蔽掉特殊字符。同时对输入字符的长度进行限制。而且不但要在客户端进行输入合法性检查,同时要在服务器端程序中进行类似检查。
1.7文件上传漏洞防御(防挂马)
挂马指网站被黑客通过入侵手段拿到修改页面的权限,在网页的源代码中插入网页木马(恶意代码),用户在访问网页时就会运行网页木马受到漏洞攻击,从而自动下载并执行病毒木马程序。
预防文件上传漏洞的方式有:
1、网站前台不设置有上传文件功能的程序文件,并且文件上传须设置用户身份认证机制,只有通过系统身份认证的用户才能上传文件。
2、将FileSystemObject组件、WScript.Shell组件、Shell.Application组件改名,然后禁用Cmd.exe。即使黑客将木马成功上传到服务器中,但是由于组件已经被改名,木马程序也是无法正常运行的!
3、过滤上传文件的文件类型,约束文件的扩展名。禁止诸如asp\asa\js\exe\com等文件类型的文件上传。
4、系统数据库文件人工备份,不采用后台管理的恢复/备份数据库功能,防止.gif图片类型文件欺骗木马上传。
5、隐蔽有上传功能的文件,通过服务器权限的安全设置,防止黑客看到系统文件目录和名称,并给为有上传功能的程序文件起没有任何含义的文件名称,让入侵者无法猜出上传文件的名称和后台管理路径。
1.8建立网站(软件)系统文件对照表
一个成熟稳定的网站系统,所有核心系统文件的数量和文件大小应该固定不变的。通过建立系统后台文件对照表的方式,可以很容易的发现网站系统文件中是否出现被攻击的问题。