簡體   English   中英

如何防止Android應用程序中使用的文件的直接URL訪問?

[英]How to prevent direct URL access of a file which is used in an Android app?

我在服務器中有一個mp3文件,例如:www.example.com/Album/Songs/abc.mp3。

我正在構建一個Android應用,以列出“歌曲”文件夾下的所有文件,然后播放選定的文件。

現在,有沒有一種方法可以防止在有人掌握URL的情況下直接訪問mp3文件?

我嘗試了重寫引擎之類的常用方法。 它阻止了直接URL訪問,但也阻止了我的應用使用這些文件。

這是我用來播放文件的android代碼:

            MediaPlayer player = new MediaPlayer();
            player.setAudioStreamType(AudioManager.STREAM_MUSIC);
            player.setDataSource(song_path);
            player.prepare();
            player.start();

song_path只是http://www.example.com/Album/Songs/abc.mp3

PS:我知道通過ProGuard進行加密將幾乎不可能通過逆向工程獲得直接URL。 我仍然想檢查是否還有其他方法可以使它工作。

在您的android應用中,您無能為力。 服務器端應采取的策略來防止這種情況。 即使您保護您的APK,也可以使用wireShark之​​類的應用程序來嗅探您的應用程序並找到您正在調用的API。

有一些方法可以做到這一點。 每當應用程序(具有登錄用戶的應用程序)調用一個說說播放API時,他們都會嘗試生成臨時鏈接,他們會使用臨時鏈接為應用程序提供該應用程序,這些臨時鏈接將使某些小塊(或一小時)無效。 然后應用程序使用該鏈接播放音樂或其他內容。

另一種情況是對音樂字節進行加密並在應用程序端進行解密,這需要考慮更復雜的因素。

您可以使用player.setDataSource(Context context, Uri uri, Map<String, String> headers)發送自定義header 然后,您可以在返回mp3之前,在PHP或Apache中檢查該自定義標頭。

要檢入Apache,可以使用rewrite rule來檢查並僅允許使用正確的header

在PHP中,可以使用$_SERVER['HTTP_*YOUR_HEADER_HERE*'] ,然后echo顯MP3文件以及正確的標題。 如果允許搜索,可能會有些棘手。

Apache rewrite rule可能是最容易實現的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM