我正在尝试使用表单将数据输入到MySQL中,并使用mysql_real_escape_string实现此目的。不幸的是,我的输出有问题。它显示\s,或者如果我使用stripslashes,它将删除所有斜杠。
如果我提交web's forms using backslash \,我会得到这样的输出:
"web\'s forms using backslash \\"看,我得到了一个双反斜杠。但是,如果我使用stripslashes函数,那么它会删除所有斜杠,但也会删除输入的斜杠,输出为
"web's forms using backslash"这里没有显示反斜杠,但在末尾应该有一个反斜杠。
问题是,如果有人在密码字段和任何其他字段中使用反斜杠,那么反斜杠将被剥离或显示twice.And也请告诉我什么是最好的显示输出htmlentities或htmlspecialchars
发布于 2011-01-17 13:58:30
You have magic quotes turned on。您需要完全禁用它们,因为它们在安全性方面不是很好。
将它们设置为php.ini中的off (首选):
; Magic quotes
;
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off或者,您可以在运行时禁用它们:
if (get_magic_quotes_gpc())
{
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process))
{
foreach ($val as $k => $v)
{
unset($process[$key][$k]);
if (is_array($v))
{
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
}
else
{
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}发布于 2011-01-17 14:00:23
使用mysqli库和准备好的语句。然后所有的字符都作为数据进入,你不需要处理所有这些东西。
What characters are NOT escaped with a mysqli prepared statement?
Why is using a mysql prepared statement more secure than using the common escape functions?
发布于 2011-01-17 15:10:37
向mysql输入数据的安全方法
使用“安全的方式将数据输入到mysql中”插入数据时的
问题
你应该使用PDO(新改进的方法)的预准备语句,它比以前的(mysql_real_escape_string, etc)更安全、更快。Why you Should be using PHP’s PDO for Database Access介绍了更深层次的细节。
显示输出
的问题是,如果有人在密码字段和任何其他字段中使用反斜杠,那么反斜杠将被剥离或显示twice.And也请告诉我什么是最好的显示输出htmlentities或htmlspecialchars。
新的和改进的方法是使用filter。特别是,我建议您阅读PHP创建者Rasmus Ledorf的所有这些Performance and Security幻灯片。一般来说,http://talks.php.net/有很多不错的幻灯片,你应该看看。
https://stackoverflow.com/questions/4710381
复制相似问题