zoukankan      html  css  js  c++  java
  • app后端设计(4)-- 通讯的安全性

       app的后台设计中,一个很重要的因素是考虑通讯的安全性。

     

       因此,我们需要考虑的要点有:

    1. app和后台,都不能保存任何用户密码的明文

    2. app和后台通讯的过程中,怎么保证用户信息的安全性

     

       app中,根据安全考虑,用户的操作分为两类:

    1. 用户登录注册操作

    2. 用户的其他操作

     

       在第一点,用户登录注册操作中,是会出现用户密码,所以在这个过程中,必须要使用https通讯,保证通讯的安全。

     

        在第二点,用户的其他操作,怎么保证这部分通讯的安全呢?

     

        在我的设计中,是采用了公钥加私钥保证安全。用户的id是公钥,通过一定的算法对用户的id进行加密得到一个加密字符串是私钥。当用户登录或注册后,通过https把公钥加私钥返回给app客户端。

     

    这个过程如下:

     

     

    <?php
    
    /**
     * 通过对url和参数加密生成VerfyCode,例如获取用户的feed的url是
     * http://www.test.com/api/home/feed/count/1/page/20/id/1
     * 
     *  api url为 http://www.test.com/api/home/feed/
     * 传递的参数为 param=array("id"=>1,"page"=>20,"count"=>1)
     * 
     * app在传递给服务器的参数中,加上使用generateVerfyCode生成的VerfyCode,
     * 所以发送给服务器的url应为
     * http://www.test.com/api/home/feed/count/1/page/20/id/1/verifycode/95aa9066d5801815a57bbe537280406b5516cb2a
     * 
     * 服务器根据这个url和参数用同样的算法生成VerfyCode,
     * 对比app传过来的VerfyCode和服务器生成的VerfyCode,就知道url在传输的过程中是否有被改动
     * 
     * @param $apiUrl api的url
     * @param $param url中附带的参数
     * @param $token 根据id获取的私钥
     */
    function generateVerfyCode($apiUrl,$param,$token){
    		
    		$params_data = "";
    		$params_data.=$apiUrl;
    		
    		ksort($param);
    		foreach( $param as $key=>$value ){
    			$params_data=$params_data.$key.$value;
    		}
    		$params_data = $params_data.$token;
    		return sha1($params_data);
    }
    
    echo generateVerfyCode("http://www.test.com/api/home/feed/",array("id"=>1,"page"=>20,"count"=>1),"23423242342432");
    //result 95aa9066d5801815a57bbe537280406b5516cb2a


     

          但这个方法有个缺点,当别人截获了这个url时可以重复使用,所以有个改进方法是在传递的参数中增加时间戳,当发现这个时间戳离现在的时间已经很久了,就判断这个url已经失效了。但用时间戳怎么保证app的时间和服务器的时间同步?可以在app每次启动和注册登录时和服务器同步时间,然后在app内建一个时钟,时间戳在这个app的内部时钟获取,防止用户修改了手机的时间。

     

    app后端系列文章总目录

     如果您觉得这系列的文章对你有所帮助,欢迎打赏。
    支付宝账号:190678908@qq.com 收款人:曾健生

     

    [文章作者]曾健生

    [作者邮箱]h6k65@126.com

    [作者QQ]190678908

    [新浪微博] @newjueqi

    [博客]http://blog.csdn.net/newjueqi

              http://blog.sina.com.cn/h6k65

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    'Undefined symbols for architecture i386,clang: error: linker command failed with exit code 1
    The codesign tool requires there only be one 解决办法
    XCode iOS project only shows “My Mac 64bit” but not simulator or device
    Provisioning profile XXXX can't be found 的解决办法
    UIView 中的控件事件穿透 Passthrough 的实现
    Xcode4.5出现时的OC新语法
    xcode 快捷键(持续更新)
    打越狱包
    php缓存与加速分析与汇总
    浏览器的判断
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4926828.html
Copyright © 2011-2022 走看看