Symfony 5 处理外部工具的访问(knpsnappy)

Posted

技术标签:

【中文标题】Symfony 5 处理外部工具的访问(knpsnappy)【英文标题】:Symfony 5 hanndle access for external tools (knpsnappy) 【发布时间】:2020-08-14 21:20:26 【问题描述】:

在 Symfony 5.x 项目中,我使用 knplabs/knp-snappy-bundle。

拥有不同用户的私有数据文件夹会导致生成 PDF 文档,这些文档需要来自不可公开访问的文件夹中的图像。

当尝试在此类文件夹中生成带有图像的 PDF 文档时,knpsnappy 会出现 60 秒超时。 Symfony 日志说

Guard authenticator does not support the request.

我假设从应用程序外部但从同一服务器调用“外部”工具 knpsnappy,但不会触发我定义的任何安全定义。 我不确定如何允许 knpsnappy 访问特定路由。 也许有人可以引导我走向正确的方向......?

【问题讨论】:

这可以通过添加返回图像的公共路由来解决。您可以使用 uuids 使攻击者几乎不可能猜测图像 url。如果这还不够节省,您可以添加一个限制,让路由只有在 ip 是您的服务器时才能访问。 @Vyctorya 谢谢。听起来不错。您能否给我一个提示,说明如何定义使路由完全公开的安全规则?根本没有路由的安全规则给我的信息与定义允许访问 IS_AUTHENTICATED_ANONYMOUSLY 的规则相同的消息 -> 将是“Guard 身份验证器不支持该请求”。正如我的帖子中提到的。有什么提示吗? @Vyctorya 也许我可以澄清一下:添加 " path: ^/[my_path], ip: [my_server_ip] " 将 ip 设置为 reqzest 来自的那个没有帮助。似乎无法处理请求。我是否必须自己定义一个 GuardAuthenticator 才能捕获此请求并接受它?我不明白为什么需要这样做,因为提到的访问规则应该抓住它。不应该吗? 您不需要自定义身份验证器。路线的顺序也很重要。也许之前有更通用的路线?它也应该是 'ips' 而不是 'ip' symfony.com/doc/current/security/… 刚刚搜索了错误并发现了这个github.com/symfony/symfony/issues/24252 如果它是图像 url,你可能需要在 getCredentials 中返回 null。 【参考方案1】:

我被误导了。 问题的原因不是访问权限,而是 img-pathes 的定义方式。 knp snappy 将无法使用 URL 路由呈现图像。 我将路径切换为绝对服务器路径,现在它可以工作了。 在这里找到解决方案: KnpSnappyBundle and Symfony 3.4 : images and/or css cause timeout

【讨论】:

以上是关于Symfony 5 处理外部工具的访问(knpsnappy)的主要内容,如果未能解决你的问题,请参考以下文章

在Symfony 4中将路由重定向到语言前缀

从 Symfony2 中的控制器访问集合表单字段

如何在 Symfony 5 中测试访问控制系统?

Symfony 5 Messenger 不自动配置消息处理程序

API 平台 Symfony 5 JWT 访问控制

Symfony 5 调试工具栏未显示在错误页面上