0

我目前正在寻找的是一个简单、基本的登录凭据清理脚本。

我知道我做了一个功能来做到这一点,我有一个......但它现在所做的只是剥离标签......

我注定要使用替换吗?或者有没有办法我可以删除所有特殊字符和空格并将其限制为仅字母和数字...然后至于密码将其限制为仅字母和数字 exclimation 点、句点和其他不会影响我的特殊字符SQL 查询。

请帮忙 :/

谢谢,马特

4

3 回答 3

1

如果要使字符串对 SQL 安全,请使用mysql_real_escape_string().

如果要将字符串限制为某些字符,请使用正则表达式。

例如,如果您只需要 az、0-9 和感叹号,则可以使用。

   $string = preg_replace('^[^a-z0-9!]+$', '', $string);

这将删除与正则表达式不匹配的任何内容。

如果要检查字符串是否与该模式匹配,请使用preg_match(). 为了可读性,您可能需要取出^并使用 bang / not /!运算符继续表达式。

如果您正在谈论剥离一些内容以使echo您的页面安全,请使用htmlspecialchars(). 根据具体情况,您可能需要进一步消毒。

记住:如果您要限制密码中的字符,那么从理论上讲,最终用户更容易记住它们才有意义。限制字符使密码暴力破解更容易(检查的字符池更小),并且不应该影响它们的存储(因为它们应该被加盐和散列)。

于 2010-05-27T06:07:07.843 回答
0

听起来您想限制人们可以在其用户名和密码中使用哪些字符。有点像这样。

if (!preg_match('/^[a-zA-Z0-9_]++$/', $username)) {
  // reject username
}

if (!preg_match('/^[a-zA-Z0-9\.!@#$%^&*_-]++$/', $password)) {
  // reject password
}

默默地替换/删除某人凭据中的字符是个坏主意。您需要向他们反馈不允许使用这些字符。出于其他人已经提到的安全原因,对密码中允许使用的字符过于严格也是一个坏主意。

于 2010-05-27T06:08:34.950 回答
0

首先,永远不要清理密码。它应该在接近 SQL 查询之前很久就被散列,所以它实际上会产生相反的效果,并使您的应用程序对用户来说不太安全。


$password = "hey'; --droptable";
$hashedPass = sha1("salt" . $password);
// sha1 returns a alphanumerical hash of the password
// stick the hash in the database

如果您正在处理 MySQL 数据库,mysql_real_escape_string()那么正如亚历克斯所说的那样就足够了。使用该方法必须记住的一件事是,您需要与 MySQL 数据库建立开放连接才能使其工作。


mysql_connect();
$string = "hey'; --droptable";
$string = mysql_real_escape_string($string);
echo $string; // outputs "hey\' --droptable"

还有一些其他 DBMS API 具有转义字符串方法,这里有一些:http ://au2.php.net/manual-lookup.php?pattern=escape_string&lang=en

于 2010-05-27T06:58:17.993 回答