我有一个运行apache的Raspberry Pi设备。我已经尝试为一个小型登录页面实现代码,该页面有MySQL数据库支持的内部会话管理。
这是index.php
<?php
include_once 'include/dbmember.php';
include_once 'include/dblogin_attempts.php';
include_once 'include/session.class.php';
include_once 'include/functions.php';
$session=new session();
$session->start_session("SMARTHOMESESSION",false); // TODO CHANGE WHEN SSL HITS
// No need to check login here
?>
<!DOCTYPE html>
<html>
<head>
<title>Smart Home Login: Credentials first please</title>
<!-- Need to import styles/main.css and find some css -->
<!-- http://designscrazed.org/css-html-login-form-templates/ -->
<link rel="stylesheet" href="styles/loginform.css" type="text/css" />
<script type="text/javascript" src="js/sha512.js"></script>
<script type="text/javascript" src="js/forms.js"></script>
</head>
<body>
<?php
if (isset($_GET['error']))
{
echo '<p class="error">Error Logging In!</p>';
}
?>
<div class="login-block">
<form action="include/process_login.php" method="post" name="login_form">
Email: <input type="text" name="email" placeholder="Email" />
Password: <input type="password" name="password" id="password" placeholder="Password" />
<input type="button" value="Login" onclick="formhash(this.form,this.form.password);" />
</form>
</div>
<?php
if (check_login_status($mysql_member))
{
$user=preg_replace("/[^0-9a-zA-Z_'-]+/", '', $_SESSION['username']);
echo '<p>Currently logged in as '. htmlentities($user) . '</p>';
echo '<p>Do you want to change user? <a href="include/logout.php">Log out</a>.</p>';
}
else
{
echo "<p>Currently logged out.</br>Please login to Continue</p>";
}
?>
</body>
</html>
这里的一个大问题是,当我尝试提供凭据时,我会得到
您没有在此服务器上访问/include/process_login.php的权限。
我的include目录有.htaccess文件,其中有
Order Deny,Allow
Deny from All
我无法访问process_login.php(它没有HTML内容,它的工作只是检查登录信息,如果提供了良好的凭据,则重定向)
在这个链接上(这是我能找到的最接近类似问题的链接)保护php包含(使用htaccess?)上面写着:
因此,简而言之:您可以在PHP包含目录中放入一个带有Deny的.htaccess。PHP的include指令不通过Apache,所以它不会在意。理想情况下,您甚至根本不将PHP包含目录放在文档根目录下。对于JavaScript,您不能这样做,因为JavaScript访问是通过Apache进行的(就像访问.html、.png等)。
我正在这样做(将操作设置为包含目录,但失败了!)我该如何解决?
我的apache包含目录的配置文件
<Directory /var/www.website.com/include>
AllowOverride All
</Directory>
我还有一个protected_page.php,嵌入HTML。
还有,为什么我可以使用它,因为我在某个地方读到apache上的php被直接传递到php引擎,而我们只得到echo输出但是人们似乎在php中使用HTML?(这是真的吗?在这种情况下,AddHandler指令如何计算出需要显示的内容)
有人能向我解释一下,在Apache上的php文件保护和引擎问题上,我的逻辑在哪里失败了,以及为什么我会在不期望的地方生成一个被禁止的页面
如果您使用的是apachev2.4,请尝试在apache:的所有*.conf文件中更改它
代替
Order deny,allow
Deny from all
(从V2.4开始,订单允许、拒绝和允许已弃用)
看跌:
Require all denied
如果您没有使用Apache的V2.4或更高版本,那么您的文件/文件夹权限有问题。打开一个终端,导航到/include/process_login.php之前的文件夹。(CD/yourwebPath/)。
然后,进行
sudo chmod 775 include -R
sudo chown -R root:root include