我在S3上有一个桶,我已经上传了图像。 现在我使用AWS-SDK获取图像。现在我想通过代理商绕过图像
$client = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-east-1',
'debug' => TRUE, // enable debug info
'stats' => TRUE, // enable stats
'@http' => [
'proxy' => 'http://192.168.16.1:10'
],
'credentials' => [
'key' => base64_decode(KEY),
'secret' => base64_decode(SECRET)
]
]);
这是我的存储桶设置,当我执行wireshark时,它仍然在请求中显示AWS IP地址。
有人能告诉我如何使用代理绕过S3图像。
答案 0 :(得分:3)
如果我理解正确你想要为你的图像设置一个保留代理EG你的系统会下载发送到浏览器的图像,以便它们可以呈现它们,你不希望用户知道你的路径/你不知道想要在你的桶上进行公共读取访问。
如果是这种情况,您可以使用以下代码通过
下载文件$result = $client->getObject(array(
'Bucket' => $bucket,
'Key' => $keyname
));
header("Content-Type: {$result['ContentType']}");
echo $result['Body'];
然后可以使用密钥作为参数在特定URL上进行设置,或者如果您的存储桶已正确保护,您可以通过GET EG URL image.php?key=some/key/on/aws.jpg
使用密钥名称并在内部使用$keyname = $_GET['key']
你的档案。
如果您使用MySQL表来使用查找,它将是$id = $_GET['id'];
并创建一个防止SQL注入的函数并返回key
列,然后将其用于$keyname
一个示例表就是
$keyname
,可由映射数据库表E.G
CREATE TABLE `proxy_map`(
`id` INT(11) NOT NULL PRIMARY KEY,
`key` TEXT NOT NULL
)
如果您想限制它,只有这个特定网站可以使用它,您可以使用引荐来源检查
$url = parse_url($_SERVER['HTTP_REFERER'] , PHP_URL_HOST);
if($url !== $_SERVER[HTTP_HOST]){ // assuming that the images are only loaded on the same site as this php script
http_response_code(404);
echo "<h1>File Not Found</h1><p>Sorry the file you were looking for could not be found</p>";
}
如果您希望允许来自一组网站E.G的图像,您可以使用子域设置。
$url = parse_url($_SERVER['HTTP_REFERER'] , PHP_URL_HOST);
$allowedDomains = array(
$_SERVER[HTTP_HOST],
"www.example.com"
);
if(!in_array($url, $allowdDomains))