在 PHP 版本 5.2.14 或 PHP 版本 6 的同等版本上使用 get_magic_quotes_gpc
我们的网站使用的是 PHP 版本 5.2.14
最近我们的主机可能更改了 magic-quote 定义,我提出了建议的解决方案 [代码如下]
- 这个解决方案适用于 PHP 版本 5.2.14 吗?
- 当我们升级到 PHP 版本 6 时,我应该更改哪些内容?
// 代码: 函数 fHandleQuotes($s) { 如果(get_magic_quotes_gpc()) 返回($s); 返回(添加斜杠($s)); } 。 。 。 // 用法: 。 。 。 $query = "UPDATE myTable SET myField = '" . fHandleQuotes($_POST['fieldName']) 。 “'”; 。 。 。
Our site is using PHP Version 5.2.14
Lately our hoster probably changed magic-quote defenition, and I came up with the suggested solution [code bellow]
- Is this solution OK for PHP Version 5.2.14 ?
- What should I change when we upgrade to PHP version 6 ?
// Code: function fHandleQuotes($s) { if (get_magic_quotes_gpc()) return ($s); return (addslashes($s)); } . . . // Usage: . . . $query = "UPDATE myTable SET myField = '" . fHandleQuotes($_POST['fieldName']) . "'"; . . .
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 PHP 6 中 magic_quotes 将被删除!
现在您可以使用这个功能了。
In PHP 6 magic_quotes will be removed!
Now you can use this function.
阅读本文并了解为什么不应使用魔术引号:
http://php.net/manual/en/security.magicquotes.disabling.php
使用该页面上的示例之一,并将
stripslashes
替换为addslashes
。但是,是的,您的解决方案可能有效。不过,在启动时仅使用$_GET = array_map("addslashes", $_GET);
会更快且更少干扰。更好的是使用mysql_real_escape_string
而不是addslashes
。 (但是你的数据库连接必须已经建立才能工作。)另外我想向你推荐这个:http://sourceforge.net/p/php7framework/wiki/input/ - 因为它允许您逐步重写应用程序以使用
$_GET->q["fieldName"]< /code> 用于(不太安全)魔术引用字段,或简单地
$_POST->sql["fieldName"]
用于(更安全)编码字段。您甚至可以使用
$_REQUEST->sql->always()
为所有正常$_REQUEST["fieldName"]
访问默认启用过滤器。尽管这对于某些应用程序来说可能有点过大了。Read this and why you shouldn't use magic quotes:
http://php.net/manual/en/security.magicquotes.disabling.php
Use one of the examples on that page and replace
stripslashes
withaddslashes
. But yes, your solution probably works. Though it would be faster and less intrusive to just use$_GET = array_map("addslashes", $_GET);
once at startup. Even better would be to usemysql_real_escape_string
instead ofaddslashes
thereon. (But your database connection must already be established for this to work.)Also I'd like to spamrecommend you this: http://sourceforge.net/p/php7framework/wiki/input/ - because it allows you to progressively rewrite your application to use
$_GET->q["fieldName"]
for (not so secure) magic quoted fields, or simply$_POST->sql["fieldName"]
for (more secure) encoded fields.You can even use
$_REQUEST->sql->always()
to enable the filter per default for all normal$_REQUEST["fieldName"]
accesses. Though that might be overkill for some applications.