当前位置: 首页 > 面试题库 >

PHP:如何阻止对文件的直接URL访问,但仍允许登录用户下载文件?

和和煦
2023-03-14
问题内容

我有一个网站,用户应该可以登录并听一首歌(自己创建的mp3)。我要这样做,以便登录的用户可以侦听/下载/无论如何,并且该文件应驻留在服务器上(而不是存储在MySQL数据库中),但不能被具有该路径的非用户访问URL。

例如:说我的mp3位于mysite.com/members/song.mp3。如果您已登录,则应该能够看到mysite.com/members/index.php页面,该页面将允许访问该歌曲。
mp3文件。如果您尚未登录,则mysite.com/members/index.php页面将不会向您显示song.mp3文件,并且直接链接至该文件不应授予访问权限。

我很确定这是通过htaccess完成的,并且我已经做了很多谷歌搜索,并在这里搜索。我找到的两个最接近的答案是此htaccess指南http://perishablepress.com/press/2006/01/10/stupid-
htaccess-tricks/
和这个StackOverflow问题:阻止通过http直接访问文件,但允许php脚本访问,都不回答我所有的问题以满足我的标准。我想念什么?


问题答案:

放入文件夹 成员中, 创建新的文件夹 文件 ,将所有歌曲移到此处,创建新的 .htaccess 文件,并添加以下行:

Order Deny,Allow
Deny from all

进入文件夹 成员, 创建文件 get_song.php 并添加以下代码:

if( !empty( $_GET['name'] ) )
{
  // check if user is logged    
  if( is_logged() )
  {
    $song_name = preg_replace( '#[^-\w]#', '', $_GET['name'] );
    $song_file = "{$_SERVER['DOCUMENT_ROOT']}/members/files/{$song_name}.mp3";
    if( file_exists( $song_file ) )
    {
      header( 'Cache-Control: public' );
      header( 'Content-Description: File Transfer' );
      header( "Content-Disposition: attachment; filename={$song_file}" );
      header( 'Content-Type: application/mp3' );
      header( 'Content-Transfer-Encoding: binary' );
      readfile( $song_file );
      exit;
    }
  }
}
die( "ERROR: invalid song or you don't have permissions to download it." );

现在,您可以使用此URL来获取歌曲文件: http : _//mysite.com/members/get_song.php?name=my-
song-
_name



 类似资料:
  • 问题内容: 我正在将文件(pdf,doc,flv等)加载到缓冲区中,并通过脚本将其提供给我的用户。我需要我的脚本能够访问文件,但不允许直接访问它。什么是实现这一目标的最佳方法?我应该使用我的权限来做某事还是使用.htaccess锁定目录? 问题答案: 最安全的方法是将想要保留的文件放到Web根目录之外,就像Damien建议的那样。之所以可行,是因为Web服务器遵循本地文件系统特权,而不是其自身的特

  • 问题内容: 可以说我有一个纯文本文件,并且我的Web服务器上有一个PHP脚本。 我想做的是防止用户直接键入和查看文本文件,但我仍然希望人们能够加载从文件中读取内容并对其进行处理的文件(可能显示文件的内容) 。 此外,如果可以做到,那么最好的方法是什么? 问题答案: 是的,这很容易做到。 阻止用户访问的主要方法有两种。第一种是将其放置在Web文件夹之外的文件夹中(通常称为或),第二种是使用examp

  • 问题内容: 我使用Minify来缩小并缓存所有脚本请求。 我只希望我的用户能够访问JavaScript文件的缩小版本。 Minify位于,我的脚本位于。如何阻止直接访问未缩小的JavaScript文件所在的位置。我宁愿不要将它们从文档根目录中删除,但这是一个选择。 请注意,我使用的是Zend Framework,因此应用程序的实际根目录已移至。htaccess文件可处理重写。 问题答案: 您不能仅

  • 问题内容: 我的网站上有一个说 “ check.php” 的php文件,在提交表单时执行。 说我的网站是 “ myweb.com” ,而php文件在目录“ PHP”中 我想防止直接访问“ check.php”文件的网址,即,如果有人键入网址“ **_myweb.com/PHP/check.php_** ”,则不应执行该php文件,而应返回一条错误消息。 我试图通过在.htaccess中设置规则来阻

  • 问题内容: 我希望有一个网页使用AJAX来访问PHP文件 麻烦的是,我不希望人们能够在浏览器中键入地址来直接访问该PHP文件。 有什么办法可以使只有AJAX请求才能访问该文件? 我可以在PHP文件中检查某些内容来实现此目的吗? 问题答案: 如果您使用jQuery制作XHR,它将设置一个自定义标头。您可以检查并确定如何提供您的回复。 但是,这对于欺骗是微不足道的。过去,我曾用它来决定是渲染整个页面(

  • 问题内容: 我有一个php文件,我将专门将其用作包含文件。因此,当我直接通过输入URL而不是将其包括在内直接访问它时,我想抛出一个错误而不是执行错误。 基本上我需要在php文件中进行如下检查: 是否有捷径可寻? 问题答案: 通用的“您可能会或可能不会完全控制的在Apache服务器上运行的PHP应用程序”情况的最简单方法是将includes放在目录中,并拒绝对.htaccess文件中的该目录的访问。