1

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

<?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

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

4

7 回答 7

3

根本不安全,您会将“密码”留在计算机的历史记录中,它很容易被任何人嗅探......等等

这就是说,安全始终取决于应用程序,但如果您想要更安全的方法,请使用 POST 变量并像这样进行比较:

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

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

于 2012-03-24T19:06:53.730 回答
1

特别是在这种情况下,我只是太厚了,让它变得比需要的更复杂。

一个 .htaccess 文件对于这个来说已经绰绰有余了……哎呀!

于 2012-04-13T13:16:22.673 回答
0

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

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

于 2012-03-24T19:07:20.473 回答
0

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

于 2012-03-24T19:08:40.393 回答
0

不,这不安全。

您应该改用 POST 并使用 HTTPS

于 2012-03-24T19:12:19.333 回答
0

我了解您希望进行简单的基本身份验证,并且这里的每个人都有有效的安全建议。如果你真的不介意安全,但希望它比在 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
}
?>
于 2012-03-24T19:31:37.037 回答
-1

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

于 2012-03-24T19:08:02.000 回答