【问题标题】:Protect a page with php sessions使用 php 会话保护页面
【发布时间】:2012-04-19 14:33:08
【问题描述】:

我在网站中有一些页面,我想用 php 会话保护,因此只有具有有效密码和登录名的管理员才能访问这些页面。 下面是 index.html 的代码(认证的形式)

<form id="form2" name="form2" method="post" action="authagent.php">
<p class="kkm">Authentification    </p>
<table align="center" width="300" border="0">
  <tr>
    <td width="146">Login</td>
    <td width="144"><label for="textfield12"></label>
    <input type="text" name="login" id="text" /></td>
  </tr>
  <tr>
    <td width="146">Mot de passe</td>
    <td><label for="textfield13"></label>
    <input type="password" name="mdp" id="mdp" /></td>
  </tr>
  <tr>
    <td>&nbsp;</td><td><input type="submit" name="button" id="button" value="Se connecter" /></td>

  </tr>

</table>
<p align="center"><a href="ajoutagent.html">Créer un nouveau compte</a></p>
<p align="center"><a href = "javascript:history.back()">

这是authagent.php的代码

       <?php
session_start() ;
$_SESSION['connect']=0;
mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("agence");
$login = $_POST['login'];
$mdp = $_POST['mdp'] ;

$query = "SELECT * FROM agent where login_agent = '$login' and mdp_agent = '$mdp'";
$result = mysql_query($query);
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {


if ($login == $line['login_agent'] && ($mdp == $line['mdp_agent'])) // Si le nom d'utilisateur et le mot de passe sont correct
{
 $_SESSION['connect']=1; 
          header('Location: agent.php');   

}
else
{
echo 'incorrect' ;// Si le nom d'utilisateur ou le mot de passe est incorrect
}
}
?>

这是安全页面agent.php的代码

 <?php
session_start();
if (isset($_SESSION['connect']))//On vérifie que le variable existe.
{
        $connect=$_SESSION['connect'];//On récupère la valeur de la variable de session.
}
else
{
        $connect=0;//Si $_SESSION['connect'] n'existe pas, on donne la valeur "0".
}

if ($connect == "1") // Si le visiteur s'est identifié.
{
              header('Location: agent.php');  

// On affiche la page cachée.
}
else
{
                  header('Location: seconnecteragent.php');  


    } ?>

【问题讨论】:

  • 当我输入有效的登录名和密码时,它可以工作,因此 mysql 部分正在工作,我的问题是 php 会话,我不希望有人通过将其直接访问安全页面网址
  • 你需要对 $_POST 输入 mysql_real_escape_string 进行转义。 SQL 注入攻击的时机已经成熟。
  • 他们想说的是你的代码很容易受到 sql 注入的攻击。此外,为了保护您网站的某个部分,您需要在所有受保护的页面上放置代码。如果他们没有登录,重定向他们。
  • 是的,我知道,但是当我输入有效的登录密码时,我的代码有问题,它直接将我引导到身份验证页面
  • 这种情况下如何防范sql注入?

标签: php html


【解决方案1】:

通常这是通过测试会话变量(如login)的存在来完成的,如果它不是=1,那么您会自动重定向到登录页面。您可以将这段简单的代码放在每个页面的顶部,如果登录变量在那里,则不会发生任何事情并且页面会正常提供。一个基本的例子:

<?php 
if(!isset($_SESSION['loggedin']) || $_SESSION['loggedin']!=1){
    header('Location: login.php');
    exit();
}
?>

【讨论】:

  • 也可以在header("Location: login.php");之后添加exit();
  • 是的,我知道,但是当我输入有效的登录密码时,我的代码有问题,它直接将我引导到身份验证页面
  • 你在问什么或者这里的问题不是很清楚。我们可以帮助您解决的具体问题是什么?
  • 如果您通过 url 直接输入安全页面,我想让浏览器重定向您。
  • 例如:如果您输入 http://.../agent.php 并且您不是管理员,浏览器会将您重定向到身份验证页面
【解决方案2】:

正如我所见,你的问题是你在那里有一个递归。在 agent.php 页面中,如果用户通过了身份验证,那么您将他发送回同一页面 agent.php。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多