2010-10-02 113 views
4

访问的文件我写了这个非常简单的PHP登录系统:禁止在一个简单的PHP登录系统

<?php 
    session_start(); 
    $error = ''; 

    if (isset($_POST['username']) && isset($_POST['password'])) 
    { 
     if ($_POST['username'] == 'user' && $_POST['password'] == 'pass') 
     { 
      $_SESSION['client'] = 'ok'; 
      Header ("location: /kit/kit/index.php"); 
     } 
     else 
     { 
      $error = 'Usuario o contrase&ntilde;a incorrectos.'; 
     } 
    } 

?> 

不要担心有关漏洞的问题,it's不保护任何有价值的东西。

在每一个PHP页面我补充一下:

<?php 
    session_start(); 

    if (!isset($_SESSION['client']) || $_SESSION['client'] != 'ok') 
    { 
     Header ("location: /kit/index.php"); 
     die(); 
    } 

?> 

这保护.php为会话就好了。

问题是,这不会保护文件。

我的意思是,如果直接去:

什么/其它/ file.zip

它会下载它无论您已经loged或没有。

我希望问题很清楚,如果不是,请问!

回答

2

要停止用户查看目录,只需在该文件夹中创建一个索引页。例如:index.htm,index.html,default.htm,default.html。

要停止用户进入文件夹(例如阻止任何人查看http://www.yoursite.com/myFolder/),您可能需要访问您的虚拟主机的某些功能。有些主机允许您使用密码保护文件或文件夹。您也可以创建.htaccess文件/文件夹

htaccess文件是一个简单的ASCII文件,例如您可以通过文本编辑器(如NotePad或SimpleText)创建。很多人似乎对文件的命名约定有些困惑,所以让我把它解释清楚。

.htaccess是文件扩展名。它不是file.htaccess或somepage.htaccess,它被简单地命名的.htaccess

创建文件

为了创建该文件,打开一个文本编辑器并保存的空白页面的.htaccess (或键入一个字符,因为有些编辑不会让你保存一个空白页面)。很有可能你的编辑器会把它的默认文件扩展名附加到名称上(例如:对于记事本,它会调用文件.htaccess.txt)。你需要删除.txt(或其他)文件扩展名以获得自己的喜欢 - 是的,我知道这不是一个词,但它听起来很敏感,不是吗?您可以通过右键单击文件并通过删除任何不说.htaccess的文件来重命名它。您也可以通过telnet或ftp程序对其进行重命名,并且您应该熟悉其中的一种,以免需要解释。

htaccess文件必须以ASCII模式上传,而不是BINARY。这使服务器可以使用该文件,但阻止浏览器读取该文件,这会严重危及您的安全。 (例如,如果您有受密码保护的目录,如果浏览器可以读取htaccess文件,则他们可以获取身份验证文件的位置,然后对该列表进行逆向工程,以便完全访问您之前受保护的任何部分。有不同的方法可以防止这种情况发生,一种方法是将所有身份验证文件放在根目录之上,以便它们不可以通过www访问,另一种方式是通过htaccess系列命令阻止浏览器访问自身,更多后来)

只是柜面从网上下载文件

商店可下载ourside您的文档根目录的所有东西阻止用户。这意味着在public_html文件之前。

编辑:更新以下部分显示文件夹结构

你如何访问它们那么图形表示?

work 
    downloadableFiles 
     downloadables 
     - memberOnlyFile.zip 
     - welcomePackage.zip 
     - memberhshipVideoVideo.mov  
     photos 
     - photo1.jpeg 
     - photo2.jpeg 
    publi c_html 
    - index.htm 
     About 
     - about.html    
     - about.gif 
     LogIn 
     - login.htm 
     - loginScreen.htm 
     - loginFancyButton.gif 

现在任何东西在的public_html文件夹中的世界可以通过你的网站上看到。

您的public_html文件夹外的任何内容都不会通过您的网站直接通过在浏览器中的地址栏中输入文件名来显示。所以这是一件好事,因为我们将保存所有我们不想访问public_html文件夹外的文件。

现在说如果你想要某个用户能够下载一个文件,也就是说一个登录用户,你仍然可以通过链接到该文件来下载该文件。因为该网页是在同一个文件夹

<a href="loginScreen.htm">login screen</a> 

如果我们在登录页面,访问网页loginScreen你刚才记下的超级链接像这样。现在如果你想允许用户能够从public_html文件夹外的可下载文件夹下载文件,因为它不在该文件夹中,所以你自己可以这样引用它:

我们将如何获得到那个文件夹,如果我们在登录文件夹,因为我们正在查看loginScreen.htm页面,你去一个文件夹,所以我们最终在public_html文件夹。然后我们又回到另一个文件夹,所以我们在工作文件夹中。

所以它看起来像这样到目前为止。

../../这意味着两个文件夹回来。

然后要访问memberonlypath.zip,我们需要进入downloadableFiles文件夹,然后我们需要进入可下载文件,然后我们可以将它链接到文件membersOnlyFile.zip,这是我们之前查找的文件。

等完整的链接现在变成

<a href="../../downloadableFiles/downloadable/membersOnlyFile.zip">download file</a> 

这样,用户就不能简单地将地址栏上键入它访问该文件,但如果你自己参考像上面可以下载它。

希望这有助于

PK

+0

是的,index.php我说得对了......事情是,每个人都在谈论.htaccess,我知道它存在,我知道它在哪里,但我不知道该怎么办!谢谢!! – Trufa 2010-10-02 01:36:32

+0

你只是把它留在文件夹中。 – Pavan 2010-10-02 01:41:20

+0

我也改变了我的文章,所以你确切地知道如何链接可下载的文件。这是一个很好的方法来做到这一点。这种方式没有人可以在你身边,并开始在www.yoursite.com/downloadeMemebershipFile.zip – Pavan 2010-10-02 01:42:43

0

您需要.htaccess才能拒绝对该文件夹的访问。

+0

好的,但我应该写什么呢?我在哪里可以阅读关于这个话题的特别。谢谢!! – Trufa 2010-10-02 01:31:18

+0

好的检查我的帖子,我在那里写了如何创建它。 – Pavan 2010-10-02 01:36:33

0

将您不想下载的所有文件存储在DocumentRoot之外。

+0

你的意思是在public_html文件夹之前?我如何链接到那么?谢谢! – Trufa 2010-10-02 01:33:26

+0

ive在我的文章中解释了这一点以及如果你想知道如何链接它们 – Pavan 2010-10-02 01:36:48

+0

你需要一个类似于这里描述的下载脚本:http://www.finalwebsites.com/forums/topic/php-file-download – stillstanding 2010-10-02 01:43:36

0

只要有像PHP下载脚本:this one,将得到下面的public_html文件夹中的文件。

+0

谢谢,即时通讯Pavan与此! – Trufa 2010-10-02 02:12:42

+0

这似乎很有趣,我试了一下! – Trufa 2010-10-02 02:25:00

0

“静态”文件由网络服务器提供,而不是PHP,因此身份验证处理方式不同。有两种简单的方法可以解决这个问题:

  • 处理web服务器中的所有认证,例如,与HTTP基本/摘要认证。 Apache 2.2有一个helpful introduction
  • 用PHP提供文件,例如如果启用了“pathinfo”(根据PHP docs,您在服务器配置中某处设置了AcceptPathInfo = ON)或foo.php?path = path/to/file,这与foo.php/path/to/file很相似,但是哦。

还有一个更enterprisey解决方案:

  • 写上从其他网站了解验证Cookie您的下载服务器的认证模块。许多大型网站都这样做(adcdownload.apple.com出现),部分原因是它们可以将下载放在CDN上,但仍然具有某种访问控制。

有一个懒惰的解决方法:

  • 坚持一切以 “难以猜测的” 目录名(例如,一些随机的base64字符)。确保你不能列出父目录(最简单的方法是创建一个空的“index.html”文件)。
+0

我会尽快解决Pavan试图向我解释的一些问题。谢谢!! – Trufa 2010-10-02 02:15:01