使用“使用PHP向mysql输入数据的安全方式”插入数据的问题

时间:2011-01-17 05:55:21

标签: php mysql mysql-real-escape-string html-entities stripslashes

我正在尝试使用表单将数据输入MySQL,并且还使用mysql_real_escape_string来实现此目的。不幸的是我的输出有问题。它显示\ s,或者如果我使用stripslashes,则会删除所有斜杠。

如果我提交web's forms using backslash \,我会收到此输出:

"web\'s forms using backslash \\"

看到我得到了一个双反斜杠。但是如果我使用stripslashes函数,那么它会删除所有斜杠,但也会删除输入的斜杠,输出为

"web's forms using backslash"

这里没有显示反斜杠,但最后应该有一个反斜杠。

问题是如果有人在密码字段和任何其他字段中使用反斜杠,那么反斜杠将被剥离或显示两次。还请告诉我什么是最适合显示输出htmlentities或htmlspecialchars

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

使用mysqli库和Prepared Statements。然后所有角色都作为数据进入,你不需要搞乱所有这些东西。

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?

答案 2 :(得分:0)

向mysql输入数据的安全方式

  

使用“安全”插入数据时出现问题   使用PHP“

将数据输入mysql的方法

你应该使用PDO(新的改进方式)预处理语句,它比前辈(mysql_real_escape_string, etc)更安全,更快。 Why you Should be using PHP’s PDO for Database Access深入细节。

显示输出

  

问题在于,如果有人使用   密码字段中的反斜杠和任何   其他提交,然后反斜杠将   被剥离或展示两次   还请告诉我什么是最好的   显示输出htmlentities或   用htmlspecialchars。

新的改进方法是使用filter。特别是我建议你阅读PHP创建者Rasmus Ledorf的所有这些Performance and Security幻灯片。 http://talks.php.net/一般有很多好的幻灯片,你应该看一下。