AWS S3 通过代理获取图像 - PHP

AWS S3 get images via Proxy - PHP

我在 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 图像。

如果我对你的理解是正确的,你想为你的图像设置一个保留代理,例如你的系统下载图像发送到浏览器以便它可以呈现它们,你不希望用户知道你的路径/你不希望 public 对您的存储桶具有读取权限。

如果是这种情况,您可以使用以下代码通过

下载文件
$result = $client->getObject(array(
    'Bucket' => $bucket,
    'Key'    => $keyname
));

header("Content-Type: {$result['ContentType']}");
echo $result['Body'];

然后可以在特定的 URL 上使用密钥作为参数进行设置,或者如果您的存储桶已正确保护,您可以通过 GET E.G URL [=14 使用密钥名称=] 并在文件中使用 $keyname = $_GET['key']

如果您使用 MySQL table 来使用查找,它将是 $id = $_GET['id']; 并创建一个函数来防止 SQL 注入和 returns key 列然后将其用于您的 $keyname 例如 table $keyname 并且可以通过映射数据库设置 table 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>";
}

如果您希望允许来自一组站点的图像,例如您有一个可以使用的子域设置。

$url = parse_url($_SERVER['HTTP_REFERER'] , PHP_URL_HOST);
$allowedDomains = array(
    $_SERVER[HTTP_HOST],
    "www.example.com"
);
if(!in_array($url, $allowdDomains))