• 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)
  • 相关阅读:
    ccc pool
    ccc 模拟重力 正太分布
    ccc 正态分布
    ccc this 指针
    基本语法HelloWorld
    css选择器
    css基本语法
    表单
    表格
    超链接
  • 原文地址:https://www.cnblogs.com/Erick-L/p/7237459.html
Copyright © 2020-2023  润新知