gpt4 book ai didi

php - 防止 Amazon S3 文件的热链接?

转载 作者:行者123 更新时间:2023-12-03 00:11:21 25 4
gpt4 key购买 nike

我希望允许任何人在我的网站上播放位于我的 s3 中的视频,名称为 src<video>上标签,但不允许允许人们将其用作 src在他们的网站上通过在浏览器栏中输入网址直接播放视频。

希望人们这样做:

enter image description here

并且我不希望以下 HTML 出现在 http://your-site.com 上,而只出现在 http://my-site.com 上:

<html>
<video src="https://s3.amazonaws.com/my-bucket/my-video.mp4"></video>
</html>

我见过一些SO links对此,但我想用代码进行讨论,因为我无法使这些解决方案为我工作。

这是我的存储桶策略,目前不起作用:

{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"https://my-site.com/*"
]
}
}
}
}

两个问题:

  1. 为了测试我的存储桶策略,我将上述 HTML 放入本地主机上的测试文件中,果然我可以通过输入 http://localhost/test.html 来访问视频。 。为什么我的存储桶策略不能阻止这种情况发生? (我只希望它从 http://my-site.com/test.html 开始工作)
  2. 为了防止人们在浏览器栏中输入 s3 URL,我认为我需要一个与存储桶策略分开的解决方案,因为我从 AWS 文档中不清楚如何防止通过浏览器直接访问。我正在考虑对网址进行哈希处理以使其难以猜测。也许有办法使用 AWS 存储桶策略或其他解决方案?

更清楚地说,我的文件存储在 s3 上,但它们是由 Amazon 的 CloudFront 交付的。所以我的 CloudFront url src 目前是 media.my-site.com/my-video.mp4。 CNAME 为 media.my-site.com。

最佳答案

鉴于 CloudFront 目前不允许您直接限制访问(据我所知),我会执行以下操作:

<video src="/media.php?v=my-video.mp4"></video>

然后您的 media.php 文件如下所示:

if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != 'my-site.com')
{
header('HTTP/1.1 503 Hot Linking Not Permitted');
// display some message / image / video
exit;
}

# this base url changes from time to time
$url = 'http://cdn.my-site.com';

header("Location: $url/{$_GET['v']}");

为了使其不那么明显,您可能需要设置重写以将 /media/my-video.mp4 路由到文件中。这样,看起来就没有中间 PHP 脚本了。

具体如何进行引荐来源网址检查取决于您想要的安全级别。有些人禁用引荐来源网址,因此您可能需要允许空的引荐来源网址。或者您甚至可以检查 session 变量或 cookie 是否存在等。

当然,最终用户将能够嗅出真实的 URL。这就是您可能需要不时更改 CNAME 的原因。

此解决方案有望足以阻止人们滥用您的网站,但绝不是完美的。

关于php - 防止 Amazon S3 文件的热链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11522563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com