对用户输入使用白名单


Using a whitelist on user input

我有一个简单的表格,可以使用用户名和密码登录。我想应用白名单以仅允许某些字符。我不知道是否有人需要这个,但这是检索用户名和密码的代码:

$stmt = $conn2->prepare("SELECT username FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);      
$stmt->execute();
$stmt->store_result();

我是否合并了这样的东西:

preg_replace( "/[^a-zA-Z0-9_]/", "", $stringToFilter );

如果是这样,我应该在代码中的什么位置包含它?如果用户尝试输入白名单中的内容以外的内容,会发生什么情况?

补充:好的,如果是在注册期间并且它使用插入来存储用户名和密码怎么办?

//insert data
$stmt = $conn2->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
//bind the parameters
$stmt->bind_param('sss', $username, $email, $password);

在注册期间INSERT之前添加过滤代码。筛选后检查字符串是否不为空,以便 "!!*&%$#()*&#$" 用户名不会作为空字符串插入。

$username_clean = preg_replace( "/[^a-zA-Z0-9_]/", "", $_POST['username'] );
if (!strlen($username_clean)){
    die("username is blank!");
}
$stmt = $conn2->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
$stmt->bind_param('sss', $username_clean, $email_clean, $password_clean);