php - laravel 登录在 url 中显示密码和 id

标签 php html sql laravel

我在 laravel 中创建了一个登录名,实际上是 laravel 的新手,该网站已经在 laravel 中制作,我尝试添加登录名并在其中注册,welcome.blade.php 中的登录名如下所示:

<?php
$username = "";
$errors = array();
$db = mysqli_connect('localhost', 'root', 'root', 'test');

$user_check_query = "SELECT * FROM registers WHERE username='$username' LIMIT 1";
  $result = mysqli_query($db, $user_check_query);
  $user = mysqli_fetch_assoc($result);

  if ($user) { // if user exists
    if ($user['username'] === $username) {
      array_push($errors, "Username already exists");
    }}

?>

<form method="get" action="">
    
    
    <div style="width: 300px;">    
        <input type="text" name="username" class="form-control" placeholder="Username"  >
    </div>
    
        <br>
        <div style="width: 300px;"> 
        <input type="password" name="password" class="form-control" placeholder="Password" >
        </div>
    <br>
    
        <button type="submit" class="btn" name="login_user">Login</button>
   
    
  </form>
<?php if (isset($_GET['login_user'])) {
  $username = mysqli_real_escape_string($db, $_GET['username']);
  $password = mysqli_real_escape_string($db, $_GET['password']);

  if (empty($username)) {
    array_push($errors, "Username is required");
  }
  if (empty($password)) {
    array_push($errors, "Password is required");
  }

  if (count($errors) == 0) {
    
    $query = "SELECT * FROM registers WHERE username='$username' AND password='$password'";
    $results = mysqli_query($db, $query);
    if (mysqli_num_rows($results) == 1) {
      $_SESSION['username'] = $username;
      $_SESSION['success'] = "You are now logged in";
      header('location: index.php');
    }else {
        array_push($errors, "Wrong username/password combination");
    }
  }
}?>

每当我尝试登录时,它都不会登录,而是重新加载同一页面并在 url 中显示输入的密码和用户名,如下所示

http://demo.website/teia/members/?username=test&password=testing&login_user=

谁能告诉我我的代码有什么问题

最佳答案

您在表单中使用了错误的方法。 GET 方法总是生成带有输入数据的 URI,这在处理数据(例如用户个人信息)时确实是一个巨大的漏洞。 GET用于向指定资源请求数据,查询字符串在GET请求的URL中发送。

关于 GET 请求的一些其他注意事项:

  • 可以缓存 GET 请求
  • GET 请求保留在浏览器历史记录中
  • 可以为 GET 请求添加书签
  • 在处理敏感数据时切勿使用 GET 请求
  • GET 请求有长度限制

要防止这种情况发生,请使用 POST 方法。 POST 用于向服务器发送数据。用POST发送给服务器的数据是保存在HTTP请求的请求体中,而不是保存在URI中,这样就安全多了。

关于 POST 请求的一些其他注意事项:

  • POST 请求从不缓存
  • POST 请求不会保留在浏览器历史记录中
  • 不能为 POST 请求添加书签
  • POST请求对数据长度没有限制

将您的表单更改为:

<form method="POST" action="">

引用:w3schools .

编辑:不要忘记也将您的路由更改为 POST。

关于php - laravel 登录在 url 中显示密码和 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57654325/

相关文章:

sql - 如何在 HSQLDB 中生成一个范围内的数字行列表?

php - 第一次加载时出现数据库错误,但刷新时没有

php - 如何在 PHP 中限制文件上传类型的文件大小?

php - 生成输入的所有组合/排列的高效 PHP 算法

android - HTML5 - Android 平板电脑 - 输入类型编号

javascript - EasySlider1.7 - 如何让第二个 slider 上的箭头起作用?

sql - 如何从单行创建多行-标准化表

php - Laravel 中的多对多关系需要表的特定名称吗?

javascript - 仅刷新/重新加载网页一次

php - 如何从 MySQL 表中获取当前年份之前的年份