目录
目录X

动易SiteFactory新特性体验之旅——全面提高的安全性

  对于CMS系统来说,安全性的重要可想而知!如果一个系统的功能再强大、再易用,如果安全性不好,那就是失败的产品。所以,动易开发团队在安全方面做了最大努力的工作。我们看动易CMS2007的新特性中有这么一项:

以下是引用片段:
全面提高的安全性
动易CMS 2007保留了动易CMS 2006成熟的安全防范措施,并且借助Asp.Net的特性和功能对各种攻击方式进行全方位的防范。
根据OWASP组织发布的2007年Web应用程序脆弱性10大排名统计,跨站脚本、注入漏洞、跨站请求伪造、信息泄露等几方面仍然是目前流行的攻击方式。动易CMS 2007针对每种攻击方式都制定了一套完整的防御方案,可以有效的抵制恶意用户对网站进行的攻击,提高网站的安全性

  关于动易CMS2007的安全性,我们已经在/Blog/kuaibao/3050.html这篇文章中概述性讲过了。

  写这篇文章的时候,开发团队将动易CMS 2007中用到的安全技术和手段做了一下小结。下面就是他们列出来的一份防范措施清单:

以下是引用片段:
1、密码保护:
●用户密码的MD5加密
●利用密码强度限制,排除存在弱密码的可能性
●后台登录启用验证码防止利用工具穷举破解密码
●后台登录启用管理认证码(保存在.config文件中)加强密码保护的强度

2、输入验证:
●利用验证控件,对用户输入的数据进行类型、大小、范围的验证

3、访问限制:
●后台管理目录可以通过网站信息配置进行修改来防止攻击
●全站和管理后台的IP访问限定功能可以实现访问范围的最小化
●后台管理文件对访问用户身份的统一验证
●从整体上限制直接输入地址或通过外部链接访问后台文件

4、注入漏洞攻击防范:
●使用类型安全的SQL参数化查询方式,从根本上解决SQL注入的问题
●对于不能使用参数化查询的部分(比如in、like语句),使用严格的过滤函数进行过滤
●限定URL的传递参数类型、数量、范围等来防止通过构造URL进行恶意攻击

5、跨站脚本攻击防范:
●对于不支持HTML标记的内容使用HTMLEncode进行编码
●对于支持HTML标记的内容使用脚本过滤函数来过滤绝大部分可运行的脚本代码,作为防范的辅助措施
●通过frame的安全属性security="restricted"来阻止脚本的运行(IE有效)
●使用Cookie的HttpOnly属性来防止Cookie通过脚本泄密(IE6 SP1以上、Firefox 3)

6、跨站请求伪造防范:
●禁止通过地址栏直接访问或者通过外部链接访问后台管理页面
●通过设置ViewStateUserKey属性防止受到恶意用户的点击式攻击(对应Post方式)
●通过对链接追加安全验证码(HMACSHA1)防止跨站请求伪造(对应Get方式)

7、信息泄露防范:
●网站的配置信息保存在Site.config文件中,.config文件是默认拒绝访问的文件类型,以避免配置信息泄密;
●利用web.config中配置的自定义错误页和全局的异常处理,屏蔽异常出现时暴露的敏感信息;
●对数据库连接字符串进行加密,在配置信息泄密后保护数据库连接的敏感信息;

8、上传下载防范:
●Access数据库防下载功能
●对上传文件类型进行检查,并删除黑名单中列出类型的文件
●对上传文件的实际类型进行检查

9、其他措施:
●跟踪用户操作异常和系统异常,并详细记录到日志中,以便于分析
●对程序集进行强命名,以防止非法篡改程序集
●对程序集进行加密和混淆,避免恶意用户通过反射程序集利用代码漏洞进行攻击
●在线文件比较功能检查网站中可能存在的木马程序
●管理员最后修改密码日期
●…………

  从这份长长的清单中,大家可以看到动易开发团队在动易CMS2007的安全问题上所做的努力吧。可以毫不夸张的说:动易CMS2007将是动易史上最安全的产品。“前无古人”,动易CMS2007做到了。而后面的版本则将在此基础更安全。动易每一个版本肯定会比以前的版本更安全,因为我们自始至终都将产品的安全性放在最重要的位置。

  下面我来一一为大家介绍一下这些防范措施:

以下是引用片段:
1、密码保护:
●用户密码的MD5加密
●利用密码强度限制,排除存在弱密码的可能性
●后台登录启用验证码防止利用工具穷举破解密码
●后台登录启用管理认证码(保存在.config文件中)加强密码保护的强度

  这个不用我多做说明,大家应该都知道。基本上这是现在的软件产品在安全方面的标准配置了。如果某个软件连这些都没有,其安全性可想而知。

以下是引用片段:
2、输入验证:
●利用验证控件,对用户输入的数据进行类型、大小、范围的验证

  这个也不需多说。这是ASP.NET的特性之一。动易CMS2007全面使用了ASP.NET这些特性来加强产品的安全性。

 

以下是引用片段:
3、访问限制:
●后台管理目录可以通过网站信息配置进行修改来防止攻击
●全站和管理后台的IP访问限定功能可以实现访问范围的最小化
●后台管理文件对访问用户身份的统一验证
●从整体上限制直接输入地址或通过外部链接访问后台文件

  通过将后台管理目录名改成只有站长才知道的目录名,可以有效防止黑客对后台的猜测和攻击。这里利用了ASP.NET的URL映射功能。实际目录名并没有改变。

  通过IP来访限定功能,黑客即使知道后台目录,也无法访问后台,可以将攻击最小化。

  利用了ASP.NET的身份验证功能,对后台管理文件的访问权限进行了统一验证。普通用户无法访问后台文件。

  利用ASP.NET的HttpModule,从整体上限制直接输入地址或通过外部链接访问后台文件

  关于HttpModule的相关知识和概念,大家可以在网上搜索一下。我这里稍微解释一下。当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,HttpModule是一个HTTP请求的“必经之路”,所以可以在这个HTTP请求传递到真正的请求处理中心(HttpHandler)之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获的这个HTTP请求信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的HTTP请求,从而可以起到一个Filter过滤器的作用。动易CMS2007利用ASP.NET的这一特性,在HttpModule里对提交给服务器的数据进行了严格过滤,从整体上限制直接输入地址或通过外部链接访问后台文件,从而在很大程度上增强了系统的安全性。

 

以下是引用片段:
4、注入漏洞攻击防范:
●使用类型安全的SQL参数化查询方式,从根本上解决SQL注入的问题
●对于不能使用参数化查询的部分(比如in、like语句),使用严格的过滤函数进行过滤
●限定URL的传递参数类型、数量、范围等来防止通过构造URL进行恶意攻击

  在ASP/PHP程序中,查询语句的生成一般是这样的代码方式:

Conn.Execute("SELECT Province FROM PE_Province WHERE Country='" & Country & "' ORDER BY ProvinceID")

  这样的方式,如果一不小心没有对要放入SQL查询语句中的Country变量进行防SQL注入过滤,就有可能产生注入问题。这方面的教程实在太多,大家有兴趣可以到网上搜索一下。而由此带来的教训则是非常深刻。动易之前发现的一些注入漏洞问题,都是因为程序员不小心没有过滤有关变量造成的。而纵观网上许多程序,还有许多地方是根本就没有将提交过来的值进行过滤就放入查询语句中。如:
Sql = "SELECT Boardid, Boardtype, Boarduser FROM Board WHERE Boardid = " & Request("boardid")
Set Rs = Execute(Sql)
这样的程序的安全性可想而知。

  动易CMS2007中,所有的查询语句都是类似如下代码:

以下是代码片段:

///


/// 更新作者
///
/// 作者实体
/// 更新成功返回true,否则返回false
public bool Update(AuthorInfo authorInfo)
{
Parameters parms = new Parameters();
parms.AddInParameter("@ID", DbType.Int32, authorInfo.Id);
parms.AddInParameter("@UserId", DbType.Int32, authorInfo.UserId);
parms.AddInParameter("@Name", DbType.String, authorInfo.Name);
parms.AddInParameter("@Type", DbType.String, authorInfo.Type);
………………
return DBHelper.ExecuteProc("PE_Accessories_Author_Update", parms);
}

注:这里的代码与实际程序有所区别。

  在这段程序中,我们至少使用了两种安全方式。一是用了存储过程,通过将参数传递给存储过程,杜绝了注入的可能。二是参数类型安全化,使用的参数都是强类型的。如这一行代码:parms.AddInParameter("@ID", DbType.Int32, authorInfo.Id);。限制了传过来的参数必须是整型的,如果从页面中传过来的参数不是整型(注入攻击时),就会直接抛出异常,中断执行。动易CMS2007的所有查询语句,都是采用这种方式。这样基本上就杜绝了SQL注入问题。

  而对于不能使用参数化查询的部分(比如in、like语句),使用严格的过滤函数进行过滤。如各模块的搜索功能的模糊查询语句:"select * from aaa where Title like '%" & Keyword & "%'",在这里会对提交过来的关键字做严格的过滤。

  另外,动易CMS2007还通过限定URL的传递参数类型、数量、范围等来防止通过构造URL进行恶意攻击。

以下是引用片段:
5、跨站脚本攻击(XSS)防范:
●对于不支持HTML标记的内容使用HTMLEncode进行编码
●对于支持HTML标记的内容使用脚本过滤函数来过滤绝大部分可运行的脚本代码,作为防范的辅助措施
●通过frame的安全属性security="restricted"来阻止脚本的运行(IE有效)
●使用Cookie的HttpOnly属性来防止Cookie通过脚本泄密(IE6 SP1以上、Firefox 3)

  根据OWASP组织发布的2007年Web应用程序脆弱性10大排名统计,跨站脚本、注入漏洞、跨站请求伪造、信息泄露等几方面仍然是目前流行的攻击方式。其中,跨站脚本攻击已经超过了SQL注入漏洞攻击,位列首位。因为XSS最难处理,限制得过死,正常功能也将无法使用,稍微一松,就有可能因为过滤不严而产生漏洞。而XSS的攻击方式之多,可能会超乎大家的想像。我发个网址给大家,有兴趣的人可以上去看看:

  动易的脚本过滤函数针对上述网址中的攻击方式制定了一套完整的防范方案,可以有效的防范XSS攻击。再综合运用上述列举的各种防范措施,可以最大限度的防范跨站脚本攻击。

以下是引用片段:
6、跨站请求伪造(CSRF)防范:
●禁止通过地址栏直接访问或者通过外部链接访问后台管理页面
●通过设置ViewStateUserKey属性防止受到恶意用户的点击式攻击(对应Post方式)
●通过对链接追加安全验证码(HMACSHA1)防止跨站请求伪造(对应Get方式)

  什么是跨站请求伪造?大家可以看看这篇文章:

  动易通过上述防范措施,可以最大限度的对这种攻击方式进行防范。

【打印正文】 发布时间:2007-08-20 13:53:33 浏览次数: 作者:webboy 来源:本站原创
×

用户登录