如何传入带有感叹号的变量? PHP

时间:2016-02-27 19:09:49

标签: php string variables

我正在使用PHP的数据库登录系统,但是我的一个用户的密码中有一个感叹号打破了它,它所说的行($ password = $ _GET [' p&# 39;];)是密码传递的地方

$username = $_GET['u'];
$password = $_GET["p"];
function userLoginIpb($username, $password) { //select the password information froms elected user
          $query = mysqli_query($GLOBALS["___mysqli_ston"], "SELECT `members_pass_salt`, `members_pass_hash` FROM `members` WHERE `name` = '$username'");
          $results = mysqli_fetch_assoc($query);
          $password = md5(md5($results['members_pass_salt']).md5($password));
          if ($password == $results['members_pass_hash']) {
              return true;
          } else {
              return false;
          }

2 个答案:

答案 0 :(得分:0)

问题在于您的$_GET[]请求,因为!字符将被编码为%21。 由于您正在使用该系统,请以正确的方式进行操作。

  1. 使用POST请求,因为您不希望用户复制粘贴带有密码的链接。
  2. 使用PHP中的新功能,password_hash()password_verify(),因为它们有一个盐构建,使其非常安全且易于使用。
  3. 将值绑定到SQL字符串时不要盲目地将它们放在那里,因为您当前打开了一个简单的SQL注入。添加pass; DROP TABLE members;之类的密码会破坏它。

答案 1 :(得分:0)

您需要使用mysqli_real_escape_string

<?php

$username = $_GET['u'];
$password = $_GET["p"];

// select the password information froms elected user
function userLoginIpb($username, $password)
{
    global $___mysqli_ston;

    $s = mysqli_real_escape_string($___mysqli_ston, $username);
    $query = mysqli_query($___mysqli_ston, "SELECT `members_pass_salt`, `members_pass_hash` FROM `members` WHERE `name` = '$s'");
    $results = mysqli_fetch_assoc($query);
    $password = md5(md5($results['members_pass_salt']).md5($password));

    return $password == $results['members_pass_hash'];
}

另请查看PDO