• python API的安全认证


    我们根据pid加客户端的时间戳进行加密md5(pid|时间戳)得到的单向加密串,与时间戳,或者其它字段的串的url给服务端。

    服务端接收到请求的url进行分析

    • 客户端时间与服务端的时间戳之差如果大于规定的时间比如我们规定10s,这样就是属于过期时间。防止有人黑了url,再次请求  可以用redis
    •  如果上面的时间符合,再判断列表内是否存在url,如果存在则return,这样防止有人短时间获取url再次请求,我们拒绝我们只接受第一次的
    •  这样前面的两个都通过 就可以了。

    app.py 服务端的api验证

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import tornado.ioloop
    import tornado.web
    import hashlib
    access_record = [
    
    ]
    
    PID_LIST = [
        'qwe',
        'ioui',
        '234s',
    ]
    class MainHandler(tornado.web.RequestHandler):
        def get(self):
            import time
            # 获取url中全部数据
            pid = self.get_argument('pid', None)
            # 获取变量
            m5, client_time, i = pid.split('|')
    
            server_time = time.time()
            # 时间超过10s禁止
            if server_time > float(client_time) + 10:
                self.write('')
                return
            # 处理10s内容重复的请求
            if pid in access_record:
                self.write('')
                return
            access_record.append(pid)
    
            pid = PID_LIST[int(i)]
            ramdom_str = "%s|%s" %(pid, client_time)
            h = hashlib.md5()
            h.update(bytes(ramdom_str, encoding='utf-8'))
            server_m5 = h.hexdigest()
            # print(m5,server_m5)
            if m5 == server_m5:
                self.write("Hello, world")
            else:
                self.write('')
    
    application = tornado.web.Application([
        (r"/index", MainHandler),
    ])
    
    if __name__ == "__main__":
        application.listen(8888)
        tornado.ioloop.IOLoop.instance().start()

    客户端拼接url

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import time
    import requests
    import hashlib
    
    PID = 'qwe'
    
    current_time = time.time()
    ramdom_str = "%s|%s" %(PID, current_time)
    h = hashlib.md5()
    h.update(bytes(ramdom_str, encoding='utf-8'))
    UID = h.hexdigest()
    
    q = "%s|%s|0" %(UID, current_time)
    url = 'http://127.0.0.1:8888/index?pid=%s' % q
    print(url)
    ret = requests.get(url)
    
    
    print(ret.text)

    黑客

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import requests
    
    ret = requests.get('http://127.0.0.1:8888/index?pid=c2539948caa7b7fe0d00fcd9d75b7574|1474341577.4938722|0')
    print(ret.text)
  • 相关阅读:
    通过Internet使用VSS2005
    基于角色的权限设计(一)
    WFF架构及技术
    WFF概述
    企业库:Cache
    权限设计(二)
    应用系统中的编码和编码规则
    希望更多的人也可以来应用wordpress程序
    说说我的一点小感受了
    思维决定命运
  • 原文地址:https://www.cnblogs.com/Erick-L/p/7237459.html
Copyright © 2020-2023  润新知