在写入数据库之前清理数据的更好方法

时间:2011-01-23 21:41:42

标签: php sql-injection mysql-real-escape-string

我正在使用PHP和MySQL为基础论坛提供支持。当用户使用撇号(')或在其帖子中插入链接时,mysql_real_escape_string函数会将\添加到文本中。显示帖子时,链接不起作用,并且所有撇号都在它之前有一个\。

问题是我在输出文本之前没有做什么或者是在写入MySQL之前我没有正确清理数据的问题?

2 个答案:

答案 0 :(得分:2)

Magicquotes是否已开启?您可以通过创建如下所示的PHP页面来快速检查:

<?php var_dump(get_magic_quotes_gpc()) ?>

如果页面显示int(1)之类的内容,则罪魁祸首不是mysql_real_escape_string,而是PHP本身。这是一个安全功能,但不是很安全,而且大多只是讨厌。在清理每个变量之前,首先需要使用stripslashes撤消削减。

答案 1 :(得分:0)

您也可以使用以下方法关闭魔术引号:

if ( version_compare(PHP_VERSION, '5.3.0', '<') ) {
    set_magic_quotes_runtime(0);
}

当你的服务器运行任何低于5.3.0的版本的php时,它会关闭魔术引号。