函数爆炸不使用"+"字符

Pav*_*era 2 php

我在PHP中创建表单以重置用户密码.当用户发送重置请求时,它会发送链接到Mail以重置密码.在链接是domain.com/index.php?link=reset-password&code=1_Xzpq+/F64xwZ/oQ/U4TkTQ==

1 = User_id
Xzpq .. =用户密码哈希(盐渍)

我需要将变量上的UserID和PasswordHash爆炸

我的代码:

function isValidPasswordResetToken($string) {
    global $sqlConnect;
    //$string_exp = explode('_', $string);
    list($user_id, $password) = explode('_', $string);
    //$user_id    = $string_exp[0];
    //$password   = $string_exp[1];
    if (empty($user_id) or !is_numeric($user_id) or $user_id < 1) {
        return false;
    }
    if (empty($password)) {
        return false;
    }
    $query = mysqli_query($sqlConnect, " SELECT COUNT(`user_id`) FROM " . USERS . " WHERE `user_id` = {$user_id} AND `password` = '{$password}' AND `active` = '1' ");
    return (Sql_Result($query, 0) == 1) ? true : false;
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是......当PasswordHash就像Xzpq+/F64xwZ/oQ/U4TkTQ==(在Hash中是'+'字符)它不起作用..当PasswordHash m7c7Tn67QpI2eI1jLdqOEg==工作没有问题..

这是一个以其他方式做到这一点的机会,它会支持所有角色吗?或者我做错了什么?

谢谢你的每一个答案.

del*_*8uk 5

+浏览器使用A 来替换URL中的空格.

您只需要先对其进行编码,然后在需要处理时进行解码.

<?php

$x = urlencode('Xzpq+/F64xwZ/oQ/U4TkTQ==');
echo $x . "\n";
echo urldecode($x);
Run Code Online (Sandbox Code Playgroud)

输出:

Xzpq%2B%2FF64xwZ%2FoQ%2FU4TkTQ%3D%3D 
Xzpq+/F64xwZ/oQ/U4TkTQ==
Run Code Online (Sandbox Code Playgroud)

请在此处查看https://3v4l.org/QUeXT