Flask下使用wkhtmltopdf的footer-html读取文件/文本及页脚页防公开方法
首先纠正认知误区:footer-html参数完全不需要传入公网可访问的网页地址,支持以下本地输入方式:
- 支持直接传入本地文件路径:你可以直接传入页脚HTML文件的绝对或相对路径,无需额外暴露内容到公网,示例命令如下:
wkhtmltopdf --footer-html /home/your_project/footer.html source.html output.pdf - 不支持直接传入HTML字符串,但可通过临时文件实现:把你需要的页脚HTML内容写入本地临时文件,调用wkhtmltopdf完成PDF生成后立即删除临时文件即可,全程不会产生公网暴露风险。
问题2:Flask框架下避免页脚接口被公网非法访问的可行方案
如果业务场景确实需要通过URL形式传入页脚内容,可通过以下方案实现安全管控,不需要把接口暴露给公网用户:
- 本地IP访问限制:由于wkhtmltopdf是在你的服务器本地运行,请求页脚接口的IP只会是本机回环地址
127.0.0.1,直接在Flask路由中加IP校验即可,非本机请求直接拦截,示例代码如下:from flask import request, abort @app.route("/internal/pdf-footer") def pdf_footer(): # 仅允许本机IP访问 if request.remote_addr != "127.0.0.1": abort(403) # 此处返回你的页脚HTML内容 - 接口密钥校验:调用wkhtmltopdf时,给页脚URL拼接一个只有服务端知道的自定义密钥,Flask接口校验密钥不匹配直接返回403,示例URL格式为
http://127.0.0.1:5000/internal/pdf-footer?secret=你预设的随机高复杂度密钥。 - 一次性有效Token校验:生成PDF前先生成一个有效期极短(建议30秒内)、仅可使用一次的随机Token,将Token拼接到页脚URL中,Flask接口校验通过后立即销毁该Token,即使Token意外泄露也不会产生安全风险。
内容的提问来源于stack exchange,提问作者Anonymous12332313
相关产品推荐
相关产品推荐

