我正在开发一个PHP注释系统,在写入注释文件时遇到了注释者的引号被分隔的问题,因此输出将像这样结束,例如:"那是你爸爸的!"这对他来说很特别!"(随机的句子)。如何禁用此功能?
在数据库查询中添加反斜杠是为了防止SQL注入。当您从数据库中检索注释时,您可以使用stripslashes()
函数来删除它们。
你还应该看看魔术引号
这取决于PHP版本和它的配置。旧版本(比5.3早)默认启用了此功能。它在您发布评论时添加引号(因此它将与引号一起存储在数据库中)。您可以禁用此行为:
http://cz.php.net/manual/en/function.get-magic-quotes-gpc.php http://cz.php.net/manual/en/function.set-magic-quotes-runtime.phphttp://cz.php.net/manual/en/info.configuration.php ini.magic-quotes-gpc
对于现有的注释,您必须运行一些清理脚本来获取所有行,对其执行stripslashes()
并将其保存回来。逃避你的查询应该由mysql_real_escape()
无论如何,依靠魔术引号是自杀,所以如果你考虑一下,它是更安全的,完全关闭它们,手动逃避查询。
关闭php.ini中的gpc_magic_quote 's。
这些反斜杠是用来从SQL引擎转义引号的。
这种编程风格在mysql_*
系列函数中非常常见,这些函数直接从程序中获取字符串,并直接在数据库引擎中执行。众所周知,这很容易受到SQL注入攻击,并且正如您所发现的那样,会破坏您的数据。(当一致地应用时,您总是可以使用stripslashes()
函数在返回用户的途中对数据进行还原,但是也必须一致地执行)
在我看来,更好的方法是使用准备好的语句,让数据库库直接将数据插入数据库,而不涉及任何转义或非转义。这也完全消除了SQL注入攻击的风险。(尽管您仍然可以自由地编写不安全的代码。)