禁止访问简单PHP登录系统中的文件
我编写了这个非常简单的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
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ñ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,这非常糟糕,但很好
- 为下载服务器编写一个身份验证模块,该模块可以理解来自其他站点的身份验证cookie。许多大型网站都这样做(我想到了adcdownload.apple.com),部分原因是它们可以将下载内容保留在CDN上,但仍然有某种访问控制