我很好奇这是否是我设置的一个问题,或者如果不小心使用,auto_prepend_file是否会自然地导致无限循环。
下面是我的php.ini文件
auto_prepend_file = "/etc/prepend.php"然后,我尝试访问一个简单的php文件。
index.php:
<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML>
<HEAD>
<TITLE>
A Small Hello From The Tester
</TITLE>
</HEAD>
<BODY>
<H1>TESTER</H1>
<P>This is very minimal "hello world" HTML document.</P>
</BODY>
</HTML>会话文件或多或少是从本站拉出的。我意识到这并不是最先进的无法穿透的安全性,但对于测试目的来说,它已经足够了。
passwords.php:
<?php
$USERS['username1'] = 'password1';
$USERS['username2'] = 'password2';
$USERS['username3'] = 'password3';
/**
** Query function to see if we are logged in. If the user is logged in,
* the flow continues. If not, the user is redirected to a login screen.
* @method check_logged
**/
function check_logged(){
global $_SESSION, $USERS;
if (!array_key_exists($_SESSION['logged'],$USERS)) {
header('Location: /etc/login.php');
};
};
?>login.php:
<?php
/**
* Initialize session
*/
session_start();
/**
* Include passwords.php which will check to see if we are logged in
*/
include("/etc/passwords.php");
/**
* I think this checks to see if the form has been submitted
*/
if ($_POST["ac"]=="log") {
if ($USERS[$_POST["username"]] == $_POST["password"]) {
//username and password exist in $USERS array
$_SESSION["logged"]=$_POST["username"];
} else {
echo 'Incorrect username/password. Please, try again.';
};
};
if (array_key_exists($_SESSION["logged"],$USERS)) { //// check if user is logged or not
echo "You are logged in."; //// if user is logged show a message
} else { //// if not logged show login form
echo '<form action="login.php" method="post"><input type="hidden" name="ac" value="log"> ';
echo 'Username: <input type="text" name="username" /><br />';
echo 'Password: <input type="password" name="password" /><br />';
echo '<input type="submit" value="Login" />';
echo '</form>';
};
?>prepend.php:
<?php
/**
* Initialize session
*/
session_start();
/**
* Include passwords.php which will check to see if we are logged in
*/
include('/etc/passwords.php');
/**
* Check to see if we are logged in or not. If not, the
* user is redirected to login.php page
*/
check_logged();
?>现在,如果我在网页浏览器上输入www.example.com/index.php,Chrome就会抱怨
这个网页有一个重定向循环,http://www.example.com/etc/login.php的网页导致了太多的重定向。清除此站点的cookie或允许第三方cookie可能解决此问题。如果不是,则可能是服务器配置问题,而不是计算机的问题。以下是一些建议:稍后重新加载此网页。了解更多关于这个问题的信息。错误310 (net::ERR_TOO_MANY_REDIRECTS):重定向太多了。
如果您想知道,清除缓存并不能解决问题。看看代码,有人能告诉我重定向循环是否会自然产生吗?如果是的话,我该如何补救。如果没有,对于为什么会发生这种情况,有什么想法吗?如果有必要,我也可以发布我的虚拟主机配置文件。
发布于 2012-03-10 17:56:33
Puk,您不能在自动修复脚本中执行登录/注销代码。为什么?因为如果我是您的用户之一,这些脚本--特别是passwords.php (如果要将其存储在数据库中,则是访问凭据)--必须由我的UID读取--您正在使用suPHP。这意味着我可以访问其他用户的凭据。然后,我可以使用它来模拟UserB的登录,从而访问他的网页。
我在我们的谈话上解释了如何做到这一点。
顺便说一句,为了回答你提出的问题:“我很好奇这是否是我设置的问题,或者如果不小心使用,auto_prepend_file是否自然会导致无限循环。”
A:代码中有一个逻辑缺陷。登录表单有一个动作"logon.php“,然后在处理登录脚本之前执行前面的命令。这个prepend.php检测到用户没有登录,因此重定向到logon.php。因此,chrome检测到对logon.php的请求重定向到logon.php,并引发您列出的错误。
https://stackoverflow.com/questions/9635237
复制相似问题