使用Chrome的数据保护程序访问Symfony应用程序会导致BadRequestHttpException

时间:2017-04-09 14:44:21

标签: android symfony reverse-proxy chrome-datasaver

使用Chrome’s Data Saver on Android访问我的Symfony网站会产生错误500。

这是日志

[2017-04-06 18:56:23] request.ERROR: Uncaught PHP Exception
Symfony\Component\HttpKernel\Exception\BadRequestHttpException:
"The request headers contain conflicting information regarding the origin of this request." at /home/myapp/app/bootstrap.php.cache line 3184
{"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\BadRequestHttpException(code: 0): The request headers contain conflicting information regarding the origin of this request. at /home/myapp/app/bootstrap.php.cache:3184, Symfony\\Component\\HttpFoundation\\Exception\\ConflictingHeadersException(code: 0): The request has both a trusted Forwarded header and a trusted Client IP header, conflicting with each other with regards to the originating IP addresses of the request. This is the result of a misconfiguration. You should either configure your proxy only to send one of these headers, or configure Symfony to distrust one of them. at /home/myapp/app/bootstrap.php.cache:788)"} []

根据我的理解,Chrome的数据保护程序在我的应用程序压缩代码和图像前充当反向代理。

我阅读了关于how to use a reverse proxy in front of a Symfony app的文档。

问题是我找不到任何有关IP Chrome的数据保护代理正在使用的文档。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

关键信息在于:

  

请求具有受信任的转发标头和受信任的客户端IP标头

我建议修复此问题,或者 - 如果您没有权限 - 请按照文档中的说明禁用冲突标头:

您可能希望在您的网站/目录中的app.php或app_dev.php中执行此操作。创建$ request后立即。

答案 1 :(得分:0)

这个错误也会影响Drupal 8.3(也可能是8.0 / 1/2)。并且您不能真正信任FORWARDED标头,因为它可以像其他任何一样伪造,并且您不能(AFAIK)列出接受它的代理地址。因此,每当用户启用Chrome数据保护程序时,您基本上都无法获取其IP,因为您无法依赖FORWARDED标头。

信任X_FORWARDED_FOR的默认行为如果伴随可信反向代理列表(即您可以控制的代码),则可以使用。

法律强制您跟踪任何用户生成内容的用户IP(如法国),这可能是一个问题。