繁体   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