Skip to content

来源验证, Web服务

HouJie edited this page May 30, 2019 · 1 revision

Watch_Dogs-Client 请求来源验证, 异步Web构建

这里主要讲述Watch_Dogs-Client系统中有关请求来源验证, 异步Web构建实现代码, 这一部分的代码主要在 Watch_Dogs-Client.py

请求来源验证

为了提高 Watch_Dogs-Client 的安全性, 系统所提供的API并不允许所有的请求均被处理.
系统只会响应那些认证过来源(IP地址)的请求.

原理

为了实现这个功能, 主要利用了python的装饰器和functools模块中的 @functools.wraps(func)

实现代码

def request_source_check(func):
    """装饰器 - 请求地址识别"""
    global ALLOWED_REQUEST_ADDR

    @functools.wraps(func)
    def wrapper(*args, **kw):
        # 验证请求地址
        if request.remote_addr not in ALLOWED_REQUEST_ADDR and "0.0.0.0" not in ALLOWED_REQUEST_ADDR:
            logger.error("Unknown request addr - " + str(request.remote_addr))
            return jsonify({"Error": "Unknown request addr - " + str(request.remote_addr)}), 403
        try:
            res = func(*args, **kw)
        except Exception as e:
            logger.error("Error " + str(e.__class__) + " | " + e.message)
            logger.error("Error details : " + traceback.format_exc())
            return jsonify(
                {"Error": e.message, "Error type": str(e.__class__), "Error detail": traceback.format_exc()}), 501
        return res
    return wrapper

如何添加认证的IP地址

向系统的配置文件 setting.json

{
  "comment": "Watch_Dogs-Client 配置文件",
  "author": "h-j-13",
  "last-update time": "2019-02-22",
  "allowed_request_addr": [
    "0.0.0.0"
  ],
  "port": 8000,
  "net_monitor": false
}

allowed_request_addr 这一列表中添加运行请求的IP地址即可

当allowed_request_addr这一列表中含有"0.0.0.0"的时候, 代表所有来源的请求均可以被响应

异步Web框架

为了提高系统的性能, 这里是用了异步的方式构建Web
有关异步服务的请求方式, 有很多种不同的方式, 如有兴趣可以自行了解, 这里暂时略过

Tornado作为容器的Flask Web应用

为了长期运行, 这里是用了Tornado作为Flask的容器, 示例代码如下

app = 你的flask应用
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(setting.PORT, )
IOLoop.instance().start()