• 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

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

  • 相关阅读:
    堆排序
    深入理解创建类设计模式(Creational Patterns)
    (Head First)设计模式基础
    SpringMVC中的适配器模式应用
    软工团队任务
    visio画UML用例图
    安卓架构设计
    结对项目编程之代码进展
    工大助手(爬虫——查成绩部分)
    设计模式
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4926828.html
Copyright © 2020-2023  润新知