首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“使用PHP向mysql输入数据的安全方法”插入数据时出现的问题

问使用“使用PHP向mysql输入数据的安全方法”插入数据时出现的问题
EN

Stack Overflow用户
提问于 2011-01-17 13:55:21
回答 3查看 620关注 0票数 0

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

如果我提交web's forms using backslash \,我会得到这样的输出:

代码语言:javascript
复制
"web\'s forms using backslash \\"

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

代码语言:javascript
复制
"web's forms using backslash"

这里没有显示反斜杠,但在末尾应该有一个反斜杠。

问题是,如果有人在密码字段和任何其他字段中使用反斜杠,那么反斜杠将被剥离或显示twice.And也请告诉我什么是最好的显示输出htmlentities或htmlspecialchars

EN

回答 3

Stack Overflow用户

发布于 2011-01-17 13:58:30

You have magic quotes turned on。您需要完全禁用它们,因为它们在安全性方面不是很好。

将它们设置为php.ini中的off (首选):

代码语言:javascript
复制
; 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

或者,您可以在运行时禁用它们:

代码语言:javascript
复制
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);
}
票数 4
EN

Stack Overflow用户

发布于 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?

票数 0
EN

Stack Overflow用户

发布于 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/有很多不错的幻灯片,你应该看看。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4710381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档