Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 隐藏或加密文件的URL?_Php - Fatal编程技术网

Php 隐藏或加密文件的URL?

Php 隐藏或加密文件的URL?,php,Php,大家好,谢谢你们抽出时间。我想说的是,尽管我不是php高手,但我还不知道所有的事情,我仍然缺乏一些知识来解决其中的一些问题 我目前的困境是: 我有一个数据库,里面有用户制作的歌曲,有各种信息,包括所说歌曲的位置。我让它工作的方式是我有一个php脚本,它回显xspf播放列表文档,供flash播放器为浏览歌曲的人阅读。(最好的部分是,只要它接收到正确的xml格式,播放器就不在乎它是否是php文件) 问题是任何人都可以查看源代码(例如,发现播放器使用xspf.php?=song_id=10),php文

大家好,谢谢你们抽出时间。我想说的是,尽管我不是php高手,但我还不知道所有的事情,我仍然缺乏一些知识来解决其中的一些问题

我目前的困境是:

我有一个数据库,里面有用户制作的歌曲,有各种信息,包括所说歌曲的位置。我让它工作的方式是我有一个php脚本,它回显xspf播放列表文档,供flash播放器为浏览歌曲的人阅读。(最好的部分是,只要它接收到正确的xml格式,播放器就不在乎它是否是php文件)

问题是任何人都可以查看源代码(例如,发现播放器使用xspf.php?=song_id=10),php文件将以纯文本输出所有内容。如何对用户隐藏或加密mp3的位置,但仍能使播放器正常工作

我还将在未来让用户能够下载曲目,但我想找到一种隐藏位置的方法,或者如果不太难的话,生成一个临时url?一定要分享你认为解决这个问题最好的方法


再次感谢您的回复

可能玩家也不关心文件的扩展名。您可以使用类似play.php?songid=some_encoded_值的url将mp3条目放入播放列表中

然后在play.php中,您必须验证用户是否拥有有效的会话。您还可以记录songid(如果生成)可用于访问歌曲的次数-设置为1或2?但根据玩家的行为(断开连接时的多个请求等),这可能不是最安全的想法,但通常应该是可以的

然而,请注意,想要下载歌曲的高级用户/开发者可以或多或少地进行黑客攻击。一个解决方案是将编码的歌曲流式传输到播放器中,播放器将在那里解码

但是flash播放器中的解码算法可以被破译,等等

你工作得越多,你就越安全,但绝对安全是不可能的


编辑:songid方案自然需要一些实际songid和实际mp3文件之间的映射表。映射可以在会话内存中,但最好在数据库中。php文件将使用readfile函数(或类似函数)在输出端输出歌曲。或者,mp3文件也可以以二进制blob形式存储在数据库中。

我不懂PHP,但从概念上讲,我建议如下:

  • 使用特定于当前用户会话的加密密钥,并将其传递到xspf.php文件
  • 不要将MP3文件的直接位置存储在生成的XML中,而是使用PHP文件(传入用户生成的、与会话相关的密钥,然后进行验证)将MP3文件提供给Flash插件,并将MP3文件保存在一个无法通过静态和公共URL访问的目录中(最好在web根目录之外)

  • 我通过链接到一个php脚本来限制对文件的访问,该脚本检查用户是否有权访问该文件,并使用用户是否有权访问该文件来回显该文件。然后,您可以将文件保存在一个无法通过URL直接访问的目录中。

    不用麻烦了。考虑Flash播放器在代理背后的情况。无论如何,您都会在代理中看到每个URL。要亲自查看,请使用Fiddler(免费工具,充当代理并显示HTTP流量)。

    但至少它不必是一个可以与全世界共享的直接下载链接。你是什么意思?Fiddler中显示的URL可以与世界共享。是的,但是如果URL包含与会话相关的标识符,带有用户身份验证和时间戳,并且在提供文件之前执行验证检查,那么这只适用于正确登录的用户。其他任何人都会得到一个登录屏幕或一些错误页面-这取决于PHP页面中的检查是如何实现的。我真的不在乎他们是否下载歌曲,因为他们将能够,这只是我不想暴露的文件结构。我还想感谢你的部分回答,因为它有助于了解玩家也不关心文件的扩展名。我所做的只是添加了一个额外的变量,使歌曲可以通过readfile()下载,而无需公开任何内部目录。谢谢你,罗恩!谢谢,readfile()成功了。这是与我的问题最接近的答案,尽管如果不是每个人的话,我不可能把所有的部分放在一起。谢谢你的建议,我希望我能选择多个答案!