0

パスワードで保護された Web サイトを作成しようとしています。パスワードは現在、テストしやすいようにハードコードされています。

私が直面している問題は、実際のパスワードを入力しても Cookie が設定されていないように見えることです。もう一度パスワードを再入力すると、Cookie が設定されます。

問題はコードを呼び出す順序であることはわかっていますが、最初の正しいパスワード入力で正しく機能させるために何を変更する必要があるかを実際に特定するのに苦労しています。どんな助けでも大歓迎です。

     case 'Maintenance':

$salt = "test";
$adminpass = "adminpass";
$RealPassword = crypt($adminpass, $salt);

function LoginScreen($SaltCode){
?>

    <html>
<head>
  <title>Please enter password to access this page</title>
  <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
  <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</head>
<body>
  <style>
    input { border: 1px solid black; }
  </style>
  <div style="width:500px; margin-left:auto; margin-right:auto; text-align:center">
  <form method="post">
    <h3>Please enter password to access this page</h3>
    <font color="red"><?php echo $error_msg; ?></font><br />
    <input type="password" name="access_password" /><p></p><input type="submit" name="Submit" value="Submit" />
  </form>
  <br />
  </div>
</body>
</html> 






<?php
global $PasswordEntered;
$PasswordEntered = crypt($_POST['access_password'],$SaltCode);

}









if (!isset($_COOKIE["Cookie"]))
{ 

LoginScreen($salt);

if ($PasswordEntered == $RealPassword)
    {
        setcookie("Cookie", $PasswordEntered, time()+600);
    } 

}



if (isset($_COOKIE["Cookie"]))
{

?>  

<B><fontsize=16>Are you sure you want to Format the data disk?</b></font><br><br>


<form method = "post">

<INPUT TYPE = 'Submit' name = 'FormatSubmit' value = 'Submit'>


<br><br><br>
Please check the box to verify you want to Format the data disk.

<Input type = "Checkbox" Name ="FormatCheck" value ="checked">


</form>

<?php
if (($_POST['FormatSubmit'] == "Submit") & ($_POST['FormatCheck'] == "checked"))
    {
    html_exec_cmd('echo -e "o\nn\np\n1\n\n\nw\n" | fdisk /dev/sda;sleep 1;mkfs.ext3 /dev/sda1;mount /dev/sda1 /data/');
     }

}

     break;
4

3 に答える 3

0

たぶん、次のような別の変数を使用します。

<?php

global $PasswordEntered;
if (isset($_POST['access_password'])){
    $PasswordEntered = crypt($_POST['access_password'],$SaltCode);
} else {
    $PasswordEntered='';
}
}
$pass=false;
if (!isset($_COOKIE["Cookie"]))
{ 
    LoginScreen($salt);

if ($PasswordEntered == $RealPassword)
{
    setcookie("Cookie", $PasswordEntered, time()+600);
    $pass=true;
} 
}

if (isset($_COOKIE["Cookie"]) || $pass)
{
   .
   .
   .
于 2012-08-06T21:28:24.073 に答える
0

解決方法がわからなかったため、 setcookie パラメータを完全に削除してしまいました。$_SESSION パラメータを使用して機能させることにしました。追加のボーナスは、セッションがサーバー側で制御されるため、セキュリティが高くなることです.

case 'Login':

      $salt = "test";
      $adminpass = "adminpass";
      $RealPassword = crypt($adminpass, $salt);

      if (isset($_SESSION['loggedin'])){
        echo "You are already logged in.";
      }
      else if ($_POST['access_password']){
        $PasswordEntered = crypt($_POST['access_password'],$salt);
        if ($PasswordEntered == $RealPassword){
            $_SESSION['loggedin']=1;
            LogData('Logged in',$logdir);
            echo "You are now logged in!";
        }
        else{
            echo LoginScreen();
            LogData('Failed login attempt',$logdir);
        }
      }
      else{ 
        echo LoginScreen();
      }
    break;
于 2012-08-13T14:22:59.407 に答える
0

Cookie はリクエストの一部としてのみ送信されます。

setcookie("Cookie", $PasswordEntered, time()+600);

if (isset($_COOKIE["Cookie"])) {
}

同じリクエスト内にある場合、これは失敗します。

ただし、次のことができます。

setcookie("Cookie", $PasswordEntered, time()+600);
// might be consudered bad practice though to directly edit the superglobal, so be wary of WTF's
$_COOKIE["Cookie"] = $PasswordEntered;

if (isset($_COOKIE["Cookie"])) {
}

ところで、これは何ですか: global $PasswordEntered;??

于 2012-08-06T21:14:44.907 に答える