【问题标题】:My code keeps putting out http500 error. Cannot find any problems我的代码不断发出 http500 错误。找不到任何问题
【发布时间】:2019-07-12 17:39:18
【问题描述】:

我正在构建此代码来更改简单登录系统的密码(我知道它不是很安全)现在我正在编写以下代码,但是当我执行它时会出现 HTTP 500 错误,所以我检查了它是否有错误,但找不到任何错误。我在 PHP 验证器中输入了它。 Allso 没有任何结果。你们有谁知道我现在没有看到什么吗?

<?php

session_start();
if (isset($_POST['updatepassword'])) {
    $user = $_POST['username'];
    $mysqli = new mysqli('localhost', 'creatalo_mika', 'Temppass100_', 'creatalo_lscdb') or die("verbinding error");
    $sql = $mysqli->query("SELECT * FROM users_table WHERE username='$user'") or die("selection error");
    $row = mysqli_fetch_assoc($sql);
    $dbpass = $row['password'];
    $newpass = $_POST['password'];
    $pass = $_POST['passwordold'];
    $passen = md5(md5('dsgf'.$pass.'sadf'));
    if ($passen == $dbpass) {
        $newpass = md5(md5('dsgf'.$newpass.'sadf'));

        $sql->query("UPDATE users_table SET password='$newpass' WHERE username='$user'") or die($mysqli->error);
        header("location: ../index.php ") or die($mysqli->error);
    } else {
        header("location: ../index.php#notgood ") or die($mysqli->error);
    }
}

【问题讨论】:

  • 我知道它不安全。但我仍在尝试使用 php 登录系统,在我可以制作基本的东西后,我将制作一个更高级的系统。
  • 你只是在给自己制造更多麻烦。准备好的语句并不难,password_hash 比 MD5 容易。

标签: php authentication mysqli


【解决方案1】:

你对SQL injectionpassword hashing 有问题,你完全是confused about die($mysqli-&gt;error),我不怪你。我解决了您的问题,以向您展示代码的外观或多或少,但如果您正在创建身份验证系统,您确实应该首先阅读更多关于安全性的信息。

session_start();
if (isset($_POST['updatepassword'])) {
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysqli = new mysqli('localhost', 'creatalo_mika', 'Temppass100_', 'creatalo_lscdb');

    $user = $_POST['username'];

    $stmt = $mysqli->prepare("SELECT * FROM users_table WHERE username=?");
    $stmt->bind_param('s', $user);
    $stmt->execute();
    $row = $stmt->get_result()->fetch_assoc();

    if (password_verify($_POST['passwordold'], $row['password'])) {
        $newpass = password_hash($_POST['password'], PASSWORD_DEFAULT);

        $stmt = $mysqli->prepare("UPDATE users_table SET password=? WHERE username=?");
        $stmt->bind_param('ss', $newpass, $user);
        $stmt->execute();
        exit(header("location: ../index.php "));
    } else {
        exit(header("location: ../index.php#notgood "));
    }
}

最重要的是启用错误报告: How to get the error message in MySQLi?

【讨论】:

  • 谢谢,我认为学习正确创建登录系统比安全性差的登录系统更好。我会尝试制作一个新的!
猜你喜欢
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 2014-06-28
  • 2022-01-25
  • 1970-01-01
相关资源
最近更新 更多