Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.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登录系统中的文件_Php_Session_Passwords_Protection_Password Protection - Fatal编程技术网

禁止访问简单PHP登录系统中的文件

禁止访问简单PHP登录系统中的文件,php,session,passwords,protection,password-protection,Php,Session,Passwords,Protection,Password Protection,我编写了这个非常简单的PHP登录系统: <?php session_start(); $error = ''; if (isset($_POST['username']) && isset($_POST['password'])) { if ($_POST['username'] == 'user' && $_POST['password'] == 'pass') {

我编写了这个非常简单的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.';
        }
    }

?>

不要担心漏洞问题,它不会保护任何有价值的东西

在我添加的每个.php页面中:

<?php
    session_start();

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

?>

这可以很好地保护.php会话

问题是,这不能保护文件

我的意思是如果直接去:

something/other/file.zip

无论你是否登录,它都会下载


我希望问题足够清楚,如果不清楚,请提问

您需要.htaccess来拒绝对文件夹的访问。

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

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

要阻止用户进入文件夹(例如阻止任何人查看),您可能需要访问web主机的某些功能。某些主机允许您对文件或文件夹进行密码保护。您还可以创建.htaccess文件/文件夹

htaccess文件是一个简单的ASCII文件,您可以通过NotePad或SimpleText等文本编辑器创建它。许多人似乎对文件的命名约定有一些困惑,所以让我来解释一下

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

创建文件

要创建文件,请打开文本编辑器并将空白页另存为.htaccess(或键入一个字符,因为某些编辑器不允许保存空白页)。编辑器很可能会将其默认文件扩展名附加到名称中(例如:对于记事本,它将调用文件.htaccess.txt)。您需要删除.txt(或其他)文件扩展名才能访问HTC——是的,我知道这不是一个词,但听起来很有趣,不是吗?您可以通过右键单击该文件并通过删除任何未显示.htaccess的内容来重命名该文件。您还可以通过telnet或ftp程序对其进行重命名,并且您应该对其中一个程序足够熟悉,以便不需要解释

htaccess文件必须以ASCII模式上传,而不是二进制。这使得服务器可以使用该文件,但会阻止浏览器读取该文件,这会严重危害您的安全性。(例如,如果您有受密码保护的目录,如果浏览器可以读取htaccess文件,则他们可以获取身份验证文件的位置,然后对列表进行反向工程,以获得对您以前受保护的任何部分的完全访问权。有不同的方法可以防止这种情况发生,其中一种方法是将所有身份验证文件放置在另一个是通过htaccess系列命令,防止浏览器访问其自身,稍后将详细介绍)

以防阻止用户下载您的文件

将所有可下载的内容存储在文档根目录下。这意味着在公共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
现在,世界上任何公共html文件夹中的内容都可以通过您的网站看到

通过在浏览器的地址栏中键入文件名,您的公共html文件夹之外的任何内容都将无法通过您的网站直接向世界显示。因此,这是一件好事,因为我们将保存所有我们不想在公共html文件夹之外访问的文件

现在,假设您希望某个用户能够下载某个文件,例如某个登录用户,您仍然可以通过该文件的链接使该文件可下载

如果我们在登录页面,要访问loginScreen网页,只需写下超链接,如下所示:

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

因为该页位于同一文件夹中。现在,如果您想允许用户能够从public_html文件夹之外的downloadable files文件夹下载文件,因为它不在该文件夹中,您只需这样引用它:

如果我们在登录文件夹中,当我们查看loginScreen.htm页面时,您返回一个文件夹,那么我们最终将进入public_html文件夹,我们将如何进入该文件夹。然后我们返回另一个文件夹,这样我们就在工作文件夹中了

到目前为止看起来是这样的

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

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

因此,完整链接现在变为

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

通过这种方式,用户无法通过在地址栏上键入文件来访问该文件,但如果您像上面那样引用它,则可以下载该文件

希望这有帮助


PK

只要有一个php下载脚本就可以了,比如:它将获得公共html文件夹下的文件。

“静态”文件由Web服务器提供,而不是php,因此身份验证的处理方式不同。有两种简单的解决方法:

  • 处理Web服务器中的所有身份验证,例如使用HTTP基本/摘要身份验证。Apache2.2有一个
  • 使用PHP提供文件,例如,如果启用了“pathinfo”(根据您在服务器配置的某处设置的AcceptPathInfo=ON)或foo.PHP?path=path/to/file,则使用foo.PHP/path/to/file,这非常糟糕,但很好
有一个更具企业精神的解决方案: