[英]Prevent direct access to images/pdfs through browser but only allow access through android app
[英]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.