2013-04-05 60 views
0

我有一個存儲視頻的網絡應用程序。我正在使用驗證用戶名和密碼的Java servlet(通過https)。一旦細節得到驗證,我將用戶重定向到存儲在AWS S3中的視頻。對於那些不知道S3是如何工作的人來說,它只是一個存儲對象的Web服務(基本上認爲它是存儲文件)。它也使用https。現在顯然要做這個工作,s3對象(文件)是公開的。我給了它一個隨機的名字,裏面全是數字和字母。重定向中的安全漏洞明顯?

所以該servlet基本上是這樣的:

void doGet(request, response){ 
    if (authenticateUser(request.getParameter("Username"), request.getParameter("Password")){ 
     response.sendRedirect("https://s3.amazonaws.com/myBucket/xyz1234567.mp4"); 
    } 
} 

這顯然簡化了,但它得到跨點。這裏有沒有非常明顯的安全漏洞?視頻標籤顯然會有類似https://www.mysite.com/getVideo?Username=「我」的來源& Password =「randomletters」。乍一看,它應該像其他任何東西一樣安全,假設我給出了坐在AWS s3上足夠隨機名稱的文件名?

回答

3

明顯的安全漏洞是任何人都可以檢測到認證servlet重定向到哪個URL,並與他的所有朋友共享此URL,從而允許任何人直接訪問資源,而無需通過認證servlet。

不幸的是,我根本不知道S3,所以我不能推薦任何修復安全問題。

+0

當你說「任何人」時,你的意思是什麼?我讓用戶使用用戶名和密碼登錄我的網站。視頻標籤由javascript生成,並將用戶名和密碼添加爲參數(我應該在原始帖子中添加該標籤)。因此,用戶可以在技術上做你正在說的內容,但他們也可以將密碼分發給所有的朋友。從實際角度來看,安全缺陷會是什麼? – user1276273 2013-04-05 17:58:26

+1

如果用戶將密碼提供給每個人,您可以在服務器端注意到同一個帳戶從許多不同的IP加載大量視頻並阻止此帳戶。如果有人能夠在未登錄的情況下訪問視頻,則無法阻止任何人,並且登錄無效。瞭解視頻的實際URL只是在瀏覽器中打開F12的一個元素,轉到網絡選項卡,並查看執行了哪些HTTP請求。 – 2013-04-05 21:41:54

+0

我不認爲動態加載的

0

所有這些機制都提供了非常有限的混淆 - 在大多數現代瀏覽器(或Fiddler等代理)中使用開發人員工具,用戶將能夠觀看正在加載的視頻的URL,並且如果它在一個公共的S3存儲桶,然後只需分享鏈接。

使用S3,您唯一真正的解決方案將是保護存儲桶,然後要麼需要用戶登錄或使用臨時令牌進行訪問[http://docs.aws.amazon.com/AmazonS3/latest/開發/ RESTAuthentication.html] ...雖然這並不複雜的解決方案

我也提到,包括視頻鏈接的資產(從上面的問題)上以明文的用戶名和密碼是非常不安全的