django项目之api验证部分
2021-05-07 18:29
标签:md5 保险 strong 一段 问题 结果 动态 服务 存在 目的: 为了客户端与服务器端之间的访问安全,不被第三者拦截,所以需要api验证。 客户端部分: 首先需要写一段复杂的key,用key来作为安全秘钥,同样在服务器端也会有一个相同的key。 然后我们还需要一个时间戳。#时间戳可以相当于动态加密 之后将key和时间戳拼接,再用Md5方法加密。 #更加安全 之后将加密后结果再与时间戳拼接写到请求头中发给服务端。 #为了让服务端解密所以需要将时间戳直接发送给服务端 以上就是我们在客户端要做的内容。 代码如下: 服务端 首先我们需要写一个和客户端相同的Key 然后写一个视图函数, 首先我们需要将request中的请求头取出来,通过split取出秘钥(加密的Key和时间戳),以及时间戳; 然后我们将取出的时间戳转为Float格式,并且服务端自己在取一个float格式的时间戳; 首先,第一关验证判断,如果客户端时间戳+(规定时间秒数) 然后,如果加上规定描述符合要求,大于当前时间,那么继续下一条验证 我们将服务端的key与刚才的时间戳拼接,放到与客户端相同的md5方法中验证匹配,查看结果是否相同, 如果不相同,这说明该客户端的md5被更改过。 如果上一条匹配成功了,没有问题,那么我们进行最后一条验证,判断该请求是否为二次请求 如果这条请求,之前已经访问过服务器,即便是在规定时间内我们也判断为不合法,因为有可能有人会利用这段时间通过相同的md5来做非法请求。 所以我们建立一个空字典,如果为第一次请求,字典里没有该条秘钥md5,我们认为是第一次请求,允许访问,并将该md5存入字典当中,当规定秒数之内再来访问, 判断字典中已经存在该md5,我们判断为非法请求,拒绝访问。 具体代码如下图: 最后为了使用方便,我们将该段代码写成装饰器,灵活使用。 如下图: django项目之api验证部分 标签:md5 保险 strong 一段 问题 结果 动态 服务 存在 原文地址:http://www.cnblogs.com/ArmoredTitan/p/7639387.html