php - 我的 php 登录表单有什么问题?

标签 php mysql forms authentication

    <?php 


    $connector = @mysql_connect("localhost","root","usbw"); // open sql connection
mysql_select_db("dnhsdb",$connector);

    $i = @$_POST['uId']; 
    $d = @$_POST['pass']; 

        if (isset($_POST["btnLog"]))
    {
     $resultID = mysql_query("SELECT * FROM ACCOUNT", $connector);
    $row = mysql_fetch_row($resultID);
    if($i == $row['username'] && $d == $row['pass'])
{
echo "Welcome Userid " . $row['username'] . "!";
 header('Location: form18dnhs.php');
}
else
echo "Wrong Id/Password";

    }

错误信息说:

Undefined index: username in C:\Users\Chad\Desktop\MAIN_php_project\USBWebserver v8_en\root\DNHS\login.php on line 21
Wrong Id/Password

最佳答案

你的代码有很多问题:

  1. 您不应使用 @ 运算符。它用于抑制错误、警告、通知等。当您收到错误、警告或通知时,您永远不应该忽略它们;相反,您应该弄清楚为什么会收到它们,然后进行修复。打压他们就像造飞机一样无视每一个安全检查员。这可不是什么好事。

  2. mysql 扩展已被弃用,不应再使用。请参阅 documentation 中的警告.您应该改用 MySQLi 之一或 PDO扩展。

  3. 无论何时访问数组,都必须确保索引/键存在。这是使用 isset() 完成的功能。这适用于普通数组和 $_POST$_GET 等数组。如果您不检查索引是否已设置,则会出现错误。

  4. 你不应该假设一个 $_POST$_GET 索引只是因为设置了另一个索引。也就是说,仅仅因为设置了$_POST["btnLog"],并不意味着$_POST['uId']$_POST[' pass'] 也已设置。这是一个很常见的错误,即使对于经验丰富的开发人员也是如此(很容易被忽视),但这不是借口。

  5. 在 SQL 数据库中,您很少选择表中的所有内容。您应该使用 WHERE 子句来缩小搜索范围,例如 SELECT * FROM account WHERE id = $i AND pass = '$d'。你应该读一些SQL tutorials了解 SQL 的工作原理。

  6. 当您对 SQL 进行排序时,您可能还应该了解一些安全知识(即关于 sanitizing and validating 输入和使用 prepared statements )。搜索“SQL 安全性”或类似的内容,您应该会找到很多阅读 Material 。

  7. header('Location: ...') 重定向之前回显某些内容没有意义。重定向响应可能包含正文,但它会被忽略;浏览器只是将浏览器重定向到另一个页面而不显示正文。

  8. 最后,您比较密码的方式表明您以明文(明文)形式存储密码。如果有人获得了对您数据库的访问权限,他们将可以访问您所有用户的凭据。有些人倾向于对许多不同的网站使用相同的密码,这意味着也会泄露这些帐户。这是相当严重的。您需要阅读 securing passwords .

祝你好运。

关于php - 我的 php 登录表单有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18246175/

相关文章:

php - Laravel Voyager软件包安装错误

javascript - 用于表单的 Adob​​e PDF JavaScript : showing & hiding labels depending on the conditions

angularjs - Angular 在表单内提交表单?

php - 使用 Web 服务访问 Dynamics CRM 2011

php - 如何存储设置

php - 加入查询仅从一个表 cakephp 3 检索数据

php/mysql 替代 openinviter cloudsponge

php - 从自定义页面插入数据库

php - 在表单中选择类别后,从数据库中选择子类别

php - 使用 CI 更新两个表中的内容