在用户输入上使用白名单

时间:2012-04-09 22:49:20

标签: php whitelist

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

$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 );

如果是这样,我在哪里可以将其包含在我的代码中?如果用户试图输入除白名单中的内容之外的其他内容会发生什么?

ADDED:好的,如果是在注册期间,它是使用INSERT来存储用户名和密码?

//insert data
$stmt = $conn2->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");

//bind the parameters
$stmt->bind_param('sss', $username, $email, $password);

1 个答案:

答案 0 :(得分:7)

在注册期间在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);