2010-05-27 189 views
0

我目前正在寻找的是一个简单的,基本的登录凭据卫生脚本。卫生脚本在php登录凭据

我明白,我做一个函数来做到这一点,我有一个......但所有它现在所做的是带标签...

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

请帮助:/

谢谢, 马特

+0

怎么会在你的用户名或密码的某些字符影响SQL查询?也许你需要提出有关如何正确进行SQL查询而不允许SQL注入的问题。提示:您可以在数据库中存储引号和斜杠。 – thomasrutter 2010-05-27 06:11:05

+2

切勿删除或替换凭据中的任何字符。你必须只检查它。然后在用户无效的情况下通知用户。 – 2010-05-27 06:16:01

回答

0

听起来就像你想限制人们被允许在他们的用户名和密码中使用哪些字符。有点像这样。

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

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

在某人的凭证中悄悄替换/删除字符是一个坏主意。您需要向他们反馈这些字符是不允许的。由于其他人已经涉及的安全原因,限制您在密码中允许使用哪些字符也是一个坏主意。

1

如果你想串安全的SQL,用mysql_real_escape_string()

如果你想限制一个字符串到某些字符,使用正则表达式。

例如,如果您只想使用a-z,0-9和感叹号,您可以使用。

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

这会去掉任何与正则表达式不匹配的东西。

如果你想检查为字符串匹配该模式,请使用preg_match()。为了便于阅读,您可能需要取出^,然后使用bang/not/!运算符继续执行表达式。

如果您正在讨论关于将echo设为安全页面的问题,请使用htmlspecialchars()。根据具体情况,您可能需要进一步清理。

请记住:如果您限制密码中的字符,从理论的角度来看,最终用户会更容易记住它。限制字符使得密码暴力破解者更容易(更小的字符池来检查),并且不应该影响他们的存储(因为他们应该被盐渍和散列)。

+0

关于腌制和散列密码的好处。 – thomasrutter 2010-05-27 06:25:57

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()就像alex说的那样好。有一件事你必须记住的方法是,你需要一个开放的连接到你的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