Register.php
if (isset($_POST['submit'])) {
$username = mysql_real_escape_string(trim($_POST['username']));
$email = mysql_real_escape_string(trim($_POST['email']));
$passwd = mysql_real_escape_string(trim($_POST['passwd']));
if (empty($username)) {
die ('You need to enter a username.');
}...... else insert
}
?>
使用mysql_real_escape_string并修剪这样好吗?或者是一种确保没有人可以注册空白用户名等的方法
由于
答案 0 :(得分:2)
我发现该代码没有问题。通常我会首先修剪(),然后执行所需的任何验证,然后执行mysql_escape()(保存mysql_escape直到最后一刻。如果你要做的唯一验证是检查空字符串,那么我认为没有问题。
答案 1 :(得分:1)
是和否。
“是”部分
清理SQL注入的用户输入是很好的。由于它不会影响空字符串,因此使用此方法不会产生任何误报或其他副作用。
“不”部分
从技术上讲,您不希望过早过滤数据。我会先修剪,检查值,然后在知道数据有效时将其转义为查询。
if ( isset( $_POST['submit'] ) )
{
$username = trim( $_POST['username'] );
if ( '' == $username )
{
die ( 'You need to enter a username.' );
} else {
mysql_query( sprintf(
"INSERT INTO table (username) VALUES('%s')"
, mysql_real_escape_string( $username )
) );
}
}
答案 2 :(得分:0)
当您检查0长度字符串时,使用 strlen()而不是 empty(),为空函数... < / p>
考虑以下事项 是空的:
* "" (an empty string) * 0 (0 as an integer) * "0" (0 as a string) * NULL * FALSE * array() (an empty array) * var $var; (a variable declared, but without a value in a class)
如您所见,并非所有这些值都是空字符串。
答案 3 :(得分:0)
你应该同时使用两者。我还建议使用filter_var,因为它也会清理数据。还有许多其他事情需要考虑。