我有一个系统,每当用户上传图片时,它就会向注册用户的gmail发送电子邮件。但是在电子邮件中,我看到了类似的内容,无法看到缩略图。
我检查了该元素,发现链接到该URL的src
:
https://ci5.googleusercontent.com/proxy/VI2cPXWhfKZEIarh-iyKNz1j9q7Ymh8ty4Yz19lXh82RjSlACBzS0aRajfIj913uXAsX2ylcLEDs5FBsj4cR9TcU75Pw5djdHx4htxdCAQxs_ue1Q1wi5TV43uLLBpigpjH1xN747mUHSRdTBJmXQWFyykInJCRXicM1KhNk=s0-d-e1-ft#https://www.somedomain.com/files/1658/thumbnail_71JtDozxS1L._SY450_.jpg
很明显它正在被Google代理缓存
但是我可以通过访问https://www.somedomain.com/files/1658/thumbnail_71JtDozxS1L._SY450_.jpg
来查看没有Google用户内容的图像(我屏蔽了域,因此您可能无法使用该图像)。
我试图清除浏览器缓存,但问题仍然存在。我该如何绕过googleusercontent或至少使缩略图能够显示。
我在此链接Images not displayed for Gmail上结帐,但是我没有使用localhost,并且可以在本地网络之外访问映像本身。
答案 0 :(得分:5)
Google Image Proxy如何工作
Google Image Proxy是一个缓存代理服务器。每当电子邮件中包含图片链接时,请求都会先转到Google图片代理,以查看它是否已缓存,如果已缓存,则应从代理中提供该图片,否则它将获取并缓存在那里。 / p>
如果出现以下图像,Google图像代理服务器将获取您的图像:
.png
,.jpg
/ .jpeg
或.gif
之类的扩展名。也可能是.webp
。但不是.svg
。?id=123
图像服务器要求:
Content-Type: image/jpeg
。content-type
标头必须为同一类型。设置图像URL代理白名单
当您的用户打开电子邮件时,Gmail使用Google的安全代理 服务器提供可能包含在这些消息中的图像。这个 保护您的用户和域免受基于图像的安全性 漏洞。
由于图像代理,链接到依赖于 内部IP,有时会破坏cookie。图片网址代理 白名单设置可让您通过创建 并维护将绕过代理的内部URL的白名单 保护。
在配置图像URL代理白名单时,您可以指定一个 域集和可用于指定大域的路径前缀 网址组。有关示例,请参见下面的指南。
配置图像URL代理白名单设置:
- Sign in到您的Google Admin console。使用您的管理员帐户登录(不以@ gmail.com结尾)。
- 从管理控制台主页上,转到
Apps
>G Suite
>Gmail
>Advanced settings
。 提示:要查看高级设置, 滚动到Gmail页面的底部。- 在左侧,选择您的顶级组织。
- 滚动到图片URL代理白名单部分。
- 输入图像URL代理白名单模式。匹配的URL将绕过图像代理保护。有关更多详细信息,请参见下面的指南。 说明。
- 在底部,单击保存。
更改最多可能需要一个小时才能传播到用户帐户。 您可以在Admin console audit log下跟踪以前的更改。
应用图片网址代理白名单设置的指南
安全注意事项
在配置图像URL代理之前,请咨询您的安全团队。 白名单设置。绕过图像代理白名单的决定 保护不会使您的用户和域面临安全风险 小心使用。
通常,如果您的域需要通过Cookie进行身份验证, 并且该域是否由您内部的管理员控制 组织,并且受到完全信任,然后将该URL列入白名单 不应使您的域遭受基于图像的攻击。</ p>
重要:不建议禁用图像代理。此选项可为管理员提供灵活性,但是 禁用图像代理可以使您的用户容易受到恶意攻击 攻击。
输入图片网址格式
维护将绕过代理的内部URL的白名单 保护,请在图片网址代理中输入图片网址格式 白名单设置。匹配的URL将绕过图片代理。
模式可以包含方案,域和路径。模式 域和域之间必须始终存在正斜杠(
/
) 路径。如果网址格式指定了方案,则该方案和 域必须完全匹配。否则,该域可以部分匹配 URL后缀。例如,模式google.com
匹配www.google.com
,而不是gle.com
。网址格式可以指定 与路径前缀匹配的路径。重要:输入图像网址格式时,请输入您的实际域名。始终在末尾加上斜杠(
/
域名。图片网址格式示例
以下模式仅是示例。以下模式:
http://rule_fixed_scheme_domain.com/ rule_flex_scheme_domain.com/ rule_fixed_subpath.com/cgi-bin/
...将匹配以下URL:
http://rule_fixed_scheme_domain.com/ http://rule_fixed_scheme_domain.com/test.jpg?foo=bar#frag http://rule_fixed_scheme_domain.com rule_flex_scheme_domain.com/ t.rule_flex_scheme_domain.com/test.jpg http://t.rule_flex_scheme_domain.com/test.jpg https://t.rule_flex_scheme_domain.com/test.jpg http://rule_fixed_subpath.com/cgi-bin/ http://rule_fixed_subpath.com/cgi-bin/people
注意:URL方案(
http://
)是可选的。如果省略方案,则模式可以匹配任何方案,并允许部分匹配 在域后缀上。预览图像URL模式
点击预览以查看URL是否与图片URL格式匹配 您已经设定。如果图片网址与格式匹配,则会看到一个 确认消息。如果图片网址不匹配,则错误 消息出现。
答案 1 :(得分:1)
巴拉塔(Bharata)在此方面有一个很好而详尽的答案,但只想添加一个我发现有类似问题的附加内容。
我们有一个x-webkit-csp内容安全标头,原来是罪魁祸首。 删除它,一切都通过图像代理完成。
Google的回应是不建议使用x-webkit-csp,而是改用Content-Security-Policy标头。 但是,这似乎是一个错误,不支持的标头会引发致命错误,而不是简单地忽略它。
答案 2 :(得分:1)
TL;DR:确保您的服务器没有阻止外部连接(通过 AWS 或 .htaccess 或其他一些防火墙)!
我也遇到了这个问题。我浏览了我能想到的每一个解决方案以及我在网上找到的每一个解决方案。什么都没解决。
最后,我在 Gmail 中检查了图像,以便获得 Google 为其创建的完整 CDN 地址。我试图在新选项卡中打开它,但失败了。所以我意识到 Google 无法抓取图片。
最后,我忘记了我的服务器除了我自己的流量之外的所有流量都被锁定(只是一个基本的 .htaccess IP 拒绝)。这只是我在开发过程中使用的一个简单的安全层。请记住,您可能会将其锁定在 AWS 或类似的更坚固的东西中。
我打开了所有 IP 一分钟,对其进行了测试,果然它按预期工作。以前失败的旧电子邮件也有效,因此似乎 Google 会在电子邮件打开时尝试发挥其魔力,但他们没有保存图像。一旦我再次关闭 IP 地址,无论谷歌如何,图像都会继续工作。我猜他们一旦将其写入 CDN 就会无限期地保留在那里。
因此,如果您确定自己已正确完成其他所有操作,我建议您确保服务器确实对外界开放,以便 Google 可以处理图像。