tim*_*son 13 php amazon-s3 referrer amazon-web-services hotlinking
我想允许任何人玩位于我S3的视频在我的网站作为src一个<video>标签,但不会让人们使用它作为一个src在他们的网站或直接键入网址到浏览器栏播放视频.
我不希望别人这样做:

我不希望以下HTML出现在http:// your -site.com上,但仅限于http:// my -site.com:
<html>
<video src="https://s3.amazonaws.com/my-bucket/my-video.mp4"></video>
</html>
Run Code Online (Sandbox Code Playgroud)
我已经看到了一些SO链接,但我想用代码说话,因为我无法使这些解决方案适合我.
这是我目前无法正常工作的存储桶策略:
{
"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/*"
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
两个问题:
http://localhost/test.html.为什么我的桶政策不能阻止这种情况?(我只想让它起作用http://my-site.com/test.html)为了更清楚,我的文件存储在s3上,但它们由亚马逊的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>
Run Code Online (Sandbox Code Playgroud)
然后你的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']}");
Run Code Online (Sandbox Code Playgroud)
为了使它不那么明显,您可能需要设置重写以路由/media/my-video.mp4到文件中.这样,它看起来不像是一个中间PHP脚本.
究竟如何进行引荐来源检查取决于您想要的安全级别.有些人禁用推荐人,所以你可能想要允许空推荐人.或者您甚至可以检查是否存在会话变量或cookie等.
当然,最终用户将能够嗅出真实的URL.这就是您可能希望不时更改CNAME的原因.
希望这个解决方案足以阻止人们滥用您的网站,但绝不是完美的.
| 归档时间: |
|
| 查看次数: |
3775 次 |
| 最近记录: |