Hit*_*sal 14 php amazon-s3 aws-php-sdk aws-sdk
我在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)
]
]);
Run Code Online (Sandbox Code Playgroud)
这是我的存储桶设置,当我执行wireshark时,它仍然在请求中显示AWS IP地址.
任何人都可以告诉我如何使用代理绕过S3图像.
如果我理解正确,您想为您的图像设置一个保留代理,例如您的系统下载图像发送到浏览器,以便它可以渲染它们,并且您不希望用户知道您的路径/您不希望公开对您的存储桶的读取访问权限。
如果是这种情况,您可以使用以下代码通过以下方式下载文件
$result = $client->getObject(array(
'Bucket' => $bucket,
'Key' => $keyname
));
header("Content-Type: {$result['ContentType']}");
echo $result['Body'];
Run Code Online (Sandbox Code Playgroud)
然后可以使用密钥作为参数在特定 URL 上进行设置,或者如果您的存储桶已正确保护,您可以仅通过 GET EG URL 使用密钥名称并在文件中image.php?key=some/key/on/aws.jpg使用。$keyname = $_GET['key']
如果您使用 MySQL 表来使用查找,那么将$id = $_GET['id'];创建一个函数来防止 SQL 注入并返回列,key然后将其用于您的$keyname示例表
$keyname,并且可以通过映射数据库表 EG 设置
CREATE TABLE `proxy_map`(
`id` INT(11) NOT NULL PRIMARY KEY,
`key` TEXT NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
如果您想限制它,以便只有这个特定网站可以使用它,您可以使用引荐来源检查
$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>";
}
Run Code Online (Sandbox Code Playgroud)
如果您希望允许来自一组站点 EG 的图像,您可以使用子域设置。
$url = parse_url($_SERVER['HTTP_REFERER'] , PHP_URL_HOST);
$allowedDomains = array(
$_SERVER[HTTP_HOST],
"www.example.com"
);
if(!in_array($url, $allowdDomains))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
787 次 |
| 最近记录: |