PHP:使用隐藏的GET变量作为登录名


PHP: Using hidden GET variable as login?

我正在考虑做一个非常基本的身份验证脚本,如下所示:

<?php
   // admin.php
   session_start();
   if($_GET['login'] == 'adminLoginWord')
   {
       $_SESSION['auth'] = true;
   }
   if($_SESSION['auth'])
   {
       // code to show Admin control panel
   }
   else
   {
       echo 'Please login.';
   }

因此,要登录,需要有人知道如何导航到URL

admin.php?login=adminLoginWord

这是一种安全的身份验证方式吗?

它根本不安全,你会把"密码"留在计算机的历史记录中,它很容易被任何人嗅探。。。etc

也就是说,安全总是取决于应用程序,但如果您想要更安全的方法,请使用POST变量并进行比较,如下所示:

if($_POST['pass'] == 'password123'){
    echo 'Login OK';
}

(这仍然不是最好的方法,但它比GET变量更好)

在这种情况下,我只是太胖了,使它比需要的更复杂。

.htaccess文件已经足够了。。。呜呜!

不,它不安全。您可以使用sha1散列您的特殊登录,并测试该sha1是否等于"adminLoginWord"的sha1。

此外,在您的情况下,您应该使用POST。

您必须注意,如果使用此系统,您的密码将存储在任何浏览器保存历史记录中。甚至可以将其添加为书签。。。

不,它不安全。

您应该使用POST并同时使用HTTPS

我理解你想要做简单的基本身份验证,这里的每个人都有有效的安全建议。如果你真的不介意安全性,但希望它比在URL中传递凭据更安全,你可以尝试这样的方法(当然,你可以在表单/页面区域添加更多的HTML):

/* admin.php */
<?php
$username = "adminLoginWord";
$password = "adminLoginWordPassword";
$msg = "";
if ($_POST['mySiteUsername'] == $username && $_POST['mySitePassword'] == $password){
  $_SESSION['auth'] = true;
} else {
  $msg = "Invalid Username/Password Combination";
}
if(!$_SESSION['auto']){
  $html = "<html>
  <body>
    <div class='error'>$msg</div>
    <form action='admin.php' method='POST'>
       <label for='mySiteUsername'>Username:</label>
       <input type='text' name='mySiteUsername' />
       <label for='mySitePassword'>Password:</label>
       <input type='password' name='mySitePassword' />
    </form>
  </body>
  </html>";
} else {
  // Authorized
}
?>

加密您的密码,然后通过GET或使用POST 发送