wkhtmltopdf允许使用 webkit 浏览器制作浏览器视图的屏幕截图。
我有一个需要登录的 Symfony 1.4 应用程序,我想使用 wkhtmltopdf 创建“打印此页面”功能。
我怎样才能安全地促进这一点。我正在考虑在每个屏幕上为打印按钮创建一个一次性令牌,允许 wkhtmltopdf 在不使用用户密码的情况下登录。
关于如何构建它的任何建议?
wkhtmltopdf允许使用 webkit 浏览器制作浏览器视图的屏幕截图。
我有一个需要登录的 Symfony 1.4 应用程序,我想使用 wkhtmltopdf 创建“打印此页面”功能。
我怎样才能安全地促进这一点。我正在考虑在每个屏幕上为打印按钮创建一个一次性令牌,允许 wkhtmltopdf 在不使用用户密码的情况下登录。
关于如何构建它的任何建议?
我们已经得出结论,使用内置的“让我登录”功能来解决这个问题。
您会考虑使用不同的打印框架吗?jquery 插件(例如https://github.com/ianoxley/jqueryprintpage#readme)呢?这样您就不必允许从会话外部访问受限区域。
如果您仍想使用wkhtmltopdf,您可以轻松创建一个接收 url 和 user_id 并创建唯一令牌的操作,我可能会将此令牌保存在您的数据库或键值缓存中(取决于您的系统架构) . 我不会提前创建唯一令牌,我认为最好按需创建它(当您的用户要求打印时)。
您有几个选项可以在安全操作中启用打印,
1) 创建自定义安全过滤器。在过滤器中,除了经过身份验证的请求外,您还必须允许包含“token”参数的请求,并正确组合 url 和用户
2) 将操作更改为不安全。如果您不想更改安全过滤器,则必须将每个操作更改为“不安全”并创建一个函数来验证请求是否经过身份验证或是否具有正确的令牌参数。
使用一次后删除每个令牌会很聪明,这会使猜测令牌变得更加困难。
此外,您可能希望创建一个定期工作程序来清除从未使用过的旧令牌。
即使您已经决定了一种方法,我仍然想再添加一个替代选项,以帮助其他人查看此问题。
另一种替代方法可能是获取正在查看的页面的当前源并使用类似的东西将其发布到您的打印机后端
$.post("/printer", document.documentElement.outerHTML);
通过这种方式,您还可以轻松地预处理 HTML。您的支持者可以首先存储 HTML,然后对其进行解析,例如转换图像或删除页面中不会在打印时使用的某些部分。