我正在开发一个PHP注释系统,并且遇到了这样一个问题,即评论员的引号在写入注释文件时会被分隔,因此输出最终会像这样结束: “那是你父亲的!这对他来说很特别!” (随机句)。如何禁用此功能?
答案 0 :(得分:1)
将反斜杠添加到数据库查询中以防止SQL注入。从数据库中检索注释时,可以使用stripslashes()
函数删除它们。
您还应该查看magic quotes。
答案 1 :(得分:1)
这取决于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.php
http://cz.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc
对于现有注释,您必须运行一些清理脚本,该脚本将获取所有行,对其执行stripslashes()
并将其保存回来。
无论如何,逃避您的查询应该由mysql_real_escape()
完成,依靠魔术引用是自杀,所以如果您考虑一下,将它们完全关闭并手动转义查询会更安全。
答案 2 :(得分:1)
在你的php.ini中关闭gpc_magic_quote。
答案 3 :(得分:0)
那些反斜杠是 escape 来自SQL引擎的引号。
这种编程风格在mysql_*
系列函数中很常见,这些函数直接从程序中获取字符串并直接在数据库引擎中执行。众所周知,这很容易SQL injection attacks而且正如您所发现的那样,会破坏您的数据。 (当始终如一地应用时,您可以使用stripslashes()
函数在返回用户的路上取消数据,但也必须一致。)
我认为更好的方法是使用prepared statements并让数据库直接将数据插入数据库,而不涉及任何转义或不转义。这也完全消除了SQL注入攻击的风险。 (虽然你仍可以自由编写不安全的代码。)