Mr.Blog


  • 首页

  • 归档

  • 标签

  • 分类

  • 搜索

APP 接口设计(加密/签名/TOKEN认证/接口版本)

发表于 2018-08-02 | 分类于 PHP

接口安全问题:

  1. 请求来源是否合法
  2. 请求参数是否被篡改
  3. 请求是唯一的(即同样的请求, 只有一次会生效)
  4. 数据传输的安全性
客户端请求流程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1. 请求服务端,获取 RSA公钥(rsaPublicKey) 以及 接口密钥(key)
2. 生成 AES密钥(aesKey)
3. 定义 Params参数[TOKEN, PLATFORM, VERSION, NONCESTR, TIMESTAMP], 使用 AES密钥(aesKey) 加密, 得到加密后的数据(encryptParams)
4. 使用 RSA公钥(rsaPublicKey) 对 AES密钥(aesKey) 加密, 得到加密后的AES密钥(encryptAesKey)
5. 将 加密后的AES密钥(encryptAesKey) 作为HEADER参数之一, 完整的HEADER参数:[KEY => encryptAesKey, VALUE => encryptParams]
6. 提取请求数据相关参数, 拼接 接口密钥(key) 生成签名, 然后发送请求给服务端, 等待响应
7. 收到服务端的响应后, 使用请求时发送的 AES密钥(aesKey) 进行解密

Params参数说明:
TOKEN 用户登录凭证
PLATFORM 请求来源所属平台
VERSION 平台版本
NONCESTR 随机字符串,用于验证请求是否重复
TIMESTAMP 请求时间,用于验证请求是否超时
阅读全文 »

API 版本控制

发表于 2018-06-03 | 更新于: 2018-07-30 | 分类于 PHP

开发APP时,随着业务需求的不断变化,服务端接口返回的数据也就会有各种变动,但由于APP无法动态更新请求接口,那么服务端接口变动时就需要兼容旧版本,所以服务端这边就需要对接口做版本控制

版本控制方式(这里使用 Symfony 框架实现了第一种和第四种):

  1. 使用一个 URI 参数:https://example.com/api/v1/login
  2. 使用查询参数:https://example.com/api/login?version=v1
  3. 自定义 Accept mime-type: Accept: application/json; version=1
  4. 自定义 Header:VERSION: 1

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Bundles/
ApiBundle/
Controller
V1/
User/
Traits/
LoginTrait.php
CenterController.php
V2/
User/
Traits/
LoginTrait.php
CenterController.php
BaseController.php
Traits/
User/
LoginAbstractTrait.php User模块通用方法
ApiTrait.php
阅读全文 »

Symfony3 Doctrine2 CURD

发表于 2018-04-23 | 更新于: 2018-06-07 | 分类于 Symfony

在Symfony中调用EntityManger->flush()时,默认会开启一个事务,如果不想要开启事务,可以参考以下的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 取得用户持久类
$userRepository = $this->getEntityManager()->getRepository('CommonBundle:User');
// 获取用户
$user = $userRepository->find(1);
// 更新数据
$updateData = ['nickname' => 'test'];
// 插入数据
$insertData = ['nickname' => 'xxxx'];

// 第一种方式:saveUser1 方法, 使用 EntityManager [flush] 来更新或插入(persist), 每次更新或插入会开启事务
// 更新
$updateUser = $userRepository->saveUser1($user, $updateData);
// 插入
$insertUser = $userRepository->saveUser1('User', $insertData);

// 第二种方式:saveUser2 方法, 使用 EntityManager [update,insert] 来更新或插入, 每次更新或插入不会开启事务
// 更新
$updateUser = $userRepository->saveUser2($user, $updateData);
// 插入
$insertUser = $userRepository->saveUser2('User', $insertData);
阅读全文 »

Linux 使用 LVM 的方式进行分区/挂载/硬盘扩容

发表于 2018-04-28 | 分类于 Linux
LVM 分区
  1. fdisk -l 查看本地硬盘使用情况
  2. 查看内核 uname -a

    ps:lvm的安装, 首先加载 device-mapper 模块, 从linux内核2.6.9开始, device-mapper 模块就已经包含在内, 所以只需加载, 不需要安装
  3. 安装 device-mapper 模块 yum install lvm2 device-mapper (2.6.9以后版本不需要安装)
  4. 加载 mapper 模块, 先查看模块是否已经加载

    若未加载, 运行命令 modprobe dm_mod
    阅读全文 »

Linux 相关问题

发表于 2018-04-24 | 更新于: 2018-04-27 | 分类于 Linux

xshell 连接虚拟机安装的 Linux 慢

1
2
3
4
5
6
#ssh的服务端在连接时会自动检测dns环境是否一致导致响应慢
vi /etc/ssh/sshd_config
UseDNS yes #默认为注释行
UseDNS no #把注释打开,然后重启ssh服务即可

/bin/systemctl restart sshd.service

Centos Yum install 提示 Could not resolve host: mirrors.shuosc.org; Unknown error

http://mirrors.shuosc.org/centos/7.4.1708/os/x86_64/repodata/repomd.xml: [Errno 14] curl#6 - "Could not resolve host: mirrors.shuosc.org; Unknown error"
原因:DNS服务器错误

1
2
3
vi /etc/resolv.conf
#新增一个DNS
nameserver 218.85.157.99
阅读全文 »

PHP openssl 签名/验签,非对称加解密

发表于 2018-04-26 | 分类于 PHP

一、公钥加密
假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥.
我有一个文件,不能让别人看,我就用1加密了.别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用
数字2,就是我的私钥,来解密.这样我就可以保护数据了.
我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上.别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,
只有我才能解密,解密后就得到a.这样,我们就可以传送加密的数据了.

二、私钥签名
如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知
道我的公钥是1,那么这种加密有什么用处呢?
但是我的好朋友x说有人冒充我给他发信.怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他
解密看是不是c.他用我的公钥1解密,发现果然是c.
这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密.只有我知道我得私钥,因此他就可以确认确实是我发的东西.
这样我们就能确认发送方身份了.这个过程叫做数字签名.当然具体的过程要稍微复杂一些.用私钥来加密数据,用途就是数字签名.

总结:公钥和私钥是成对的,它们互相解密.
公钥加密,私钥解密.
私钥数字签名,公钥验证.

阅读全文 »

RabbitMQ 安装

发表于 2018-04-24 | 分类于 RabbitMQ

环境:Linux Centos7

安装 RabbitMQ 前, 需先安装 Erlang
1
2
3
4
#若无法使用 yum 安装 erlang, 去  下载对应的 rpm 
yum install erlang
#若无法使用 yum 安装 rabbitmq-server, 去 下载对应的 rpm[
yum install rabbitmq-server-3.7.2-1.el7.noarch.rpm
测试 erlang 是否安装成功
1
2
3
4
5
6
7
8
[root@localhost rabbitmq]# erl
Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V9.2 (abort with ^G)
1> 9+3.
12
2> halt().
[root@localhost rabbitmq]#
阅读全文 »
1…101112…15
Mr

Mr

懒........

102 日志
21 分类
56 标签
RSS
Links
  • Novnan
  • 挨踢Blog
  • Eagle
  • Timber
  • 谢炳南
© 2020 — 2021 Mr
0%