Apache上的PHP代码保护导致禁止权限

时间:2015-12-03 16:18:52

标签: php apache .htaccess security

我有一个运行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内容 - 它的工作只是检查登录并重定向,如果提供了良好的凭据)

在此链接上(尽可能接近类似的问题) protect php includes (with htaccess?) 它说:

  

简而言之:       你可以在你的PHP包含目录中放入一个带有Deny的.htaccess。   PHP的include指令不通过Apache,所以它不会关心。   理想情况下,您根本不会将PHP包含目录放在文档根目录下。       你不能为JavaScript做这件事,因为JavaScript访问通过Apache(就像.html,.png等访问)。

我正在这样做(将操作设置为包含目录但是失败!) 我该如何解决?

包含目录的apache的配置文件

<Directory /var/www.website.com/include>
AllowOverride All
</Directory>

我也有 protected_pa​​ge.php,内嵌HTML。

另外,为什么我可以使用它,因为我在某处读取apache上的php直接传递给PHP引擎,我们只得到echo输出 但是人们似乎在php中使用HTML? (这是真的吗?在这种情况下,AddHandler指令如何确定需要显示的内容)

有人可以向我解释一下我的逻辑是什么让我失去了关于php文件保护和Apache上的引擎的问题,我怎么会生成一个禁止的页面,而不是预期的。

1 个答案:

答案 0 :(得分:0)

如果您使用的是apache v2.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