django中的api安全验证解析

文章转自--铠甲巨人:https://www.cnblogs.com/ArmoredTitan/p/7639387.html

目的:

为了客户端与服务器端之间的访问安全,不被第三者拦截,所以需要api验证。

客户端部分:

首先需要写一段复杂的key,用key来作为安全秘钥,同样在服务器端也会有一个相同的key。

然后我们还需要一个时间戳。#时间戳可以相当于动态加密

之后将key和时间戳拼接,再用Md5方法加密。 #更加安全

之后将加密后结果再与时间戳拼接写到请求头中发给服务端。 #为了让服务端解密所以需要将时间戳直接发送给服务端

以上就是我们在客户端要做的内容。

代码如下:

服务端

首先我们需要写一个和客户端相同的Key

然后写一个视图函数,

首先我们需要将request中的请求头取出来,通过split取出秘钥(加密的Key和时间戳),以及时间戳;

然后我们将取出的时间戳转为Float格式,并且服务端自己在取一个float格式的时间戳;

首先,第一关验证判断,如果客户端时间戳+(规定时间秒数) < 服务器当前时间戳,那么则认为该客户端内容过时了,失去了时效性。

然后,如果加上规定描述符合要求,大于当前时间,那么继续下一条验证

我们将服务端的key与刚才的时间戳拼接,放到与客户端相同的md5方法中验证匹配,查看结果是否相同,

如果不相同,这说明该客户端的md5被更改过。

如果上一条匹配成功了,没有问题,那么我们进行最后一条验证,判断该请求是否为二次请求

如果这条请求,之前已经访问过服务器,即便是在规定时间内我们也判断为不合法,因为有可能有人会利用这段时间通过相同的md5来做非法请求。

所以我们建立一个空字典,如果为第一次请求,字典里没有该条秘钥md5,我们认为是第一次请求,允许访问,并将该md5存入字典当中,当规定秒数之内再来访问,

判断字典中已经存在该md5,我们判断为非法请求,拒绝访问。

具体代码如下图:

最后为了使用方便,我们将该段代码写成装饰器,灵活使用。

如下图:



将这个api验证装饰器写到服务器管理系统的server函数上面即可。
api这三关验证还是有缺点就是,如果黑客比你网速快,从半路拦截了,客户端就是第二次访问了。
所以,为了保险起见,需要客户端在发送之前将数据加密,即便黑客拦截,也无法使用数据。

猜你喜欢

转载自blog.csdn.net/qq_34493908/article/details/80748159