标签: magic-quotes

PHP中的魔术引号

根据PHP手册,为了使代码更具可移植性,他们建议使用以下内容来转义数据:

if (!get_magic_quotes_gpc()) {
    $lastname = addslashes($_POST['lastname']);
} else {
    $lastname = $_POST['lastname'];
}
Run Code Online (Sandbox Code Playgroud)

我还将进行其他验证检查,但上述严格来说,在逃避数据方面有多安全?我还看到在PHP 6中将不推荐使用魔术引号.这将如何影响上述代码?我宁愿不依赖于像mysql_real_escape_string()这样的特定于数据库的转义函数.

php security magic-quotes

17
推荐指数
3
解决办法
1万
查看次数

什么是PHP中的魔术引号运行时?

我完全清楚PHP中魔术行情的异常,它是如何邪恶的,我像害虫一样避免它们,但它们是什么magic_quotes_runtime?来自php.ini:

运行时生成的数据的魔术引号,例如来自SQL的数据,来自exec()等的数据.

我应该检查是否打开并关闭:

set_magic_quotes_runtime(false);
Run Code Online (Sandbox Code Playgroud)

它经常默认开启吗?我知道它在5.3.0中被弃用并在6.0.0中被删除但是由于我的脚本支持5.1.0+,我想知道如何在"遗留"PHP中处理它(如果它是相关的).

编辑:为了清楚,我想退出('关闭魔术引号'); 当Magic引号为ON时.我不是在依赖他们!

php magic-quotes

10
推荐指数
1
解决办法
6405
查看次数

如何在运行时禁用PHP魔术引号?

我正在编写一组PHP脚本,这些脚本将在一些不同的设置中运行,其中一些与魔术引号共享托管(恐怖).如果没有控制PHP或Apache配置的能力,我可以在脚本中做任何事情来在运行时禁用PHP引号吗?

如果代码没有假设魔术引号打开会更好,这样我就可以在不同的主机上使用相同的脚本,这些主机可能有也可能没有魔术引号.

php runtime magic-quotes

9
推荐指数
2
解决办法
1万
查看次数

PHP:当Magic Quotes为ON时,如何(正确)删除数组中的转义引号

如您所知,当Magic Quotes为ON时,单引号会在值和键中转义.大多数在运行时删除Magic Quotes的解决方案只能取消值,而不是键.我正在寻找一种能够解决关键和价值观的解决方案......

我在PHP.net上发现了这段代码:

$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);
Run Code Online (Sandbox Code Playgroud)

但是我不喜欢"&"引用和数组,因为我在过去遇到了像这样的 bug ...

有没有一种"更好"的方式在运行时使用魔术引号(键和值)而不是上面的方法?

php magic-quotes

7
推荐指数
1
解决办法
3066
查看次数

在SQL中转义引号

我对这个话题有点困惑,所以我决定向你们询问一下:)

从php.net开始,我应该使用 mysql_real_escape_string()并关闭魔术引号,因为它已被弃用.

所以我关闭了,我使用mysql_real_escape_string(),但这样就足够了吗?:

$value = "It's Time!";
$escaped_value = mysql_real_escape_string($value);

mysql_query("INSERT INTO table (column, column2) VALUES ('{$escaped_value}', "0")");
Run Code Online (Sandbox Code Playgroud)

当我检查数据库中的数据时它看起来与$ value中的数据相同"It's Time"而不是"It\'s Time",这是正常的,这不应该在引号之前添加斜杠吗?

php mysql sql mysql-real-escape-string magic-quotes

7
推荐指数
2
解决办法
9758
查看次数

Mysql Real Escape String PHP函数在我的字段输入中添加"\"

我正在使用PHP向MySQL数据库提交表单.

我通过该mysql_real_escape_string($content)函数发送表单数据.

当条目出现在我的数据库中(在phpMyAdmin中检查)时,我的所有双引号和单引号都被转义.

我很确定这是一个PHP配置问题?

所以:

$content = 'Hi, my name is Jascha and my "favorite" thing to do is sleep';
mysql_real_escape_string($content);
$query = 'INSERT INTO DB...'
Run Code Online (Sandbox Code Playgroud)

在我的数据库中出现:

嗨,我的名字是Jascha,我最喜欢的事情就是睡觉

我该告诉谁该怎么办?(我无法访问php.ini).

php mysql magic-quotes

5
推荐指数
2
解决办法
1万
查看次数

虽然magic_quotes被关闭仍然逃脱字符串?

我在php.ini中禁用了magic_quotes.

但我仍然在表单中获得转义字符串.

注意:我在Wordpress的主题中运行它.

php wordpress magic-quotes

5
推荐指数
1
解决办法
611
查看次数

PHP魔术引号问题

我从来没有在之前打开魔术引号的环境中编程.现在我正在开展一个项目.这就是我一直在设置用户接受的数据情况:

$first_name = $_POST['first_name']
if(!get_magic_quotes_gpc()) {
    $first_name = mysql_real_escape_string($first_name);
}
Run Code Online (Sandbox Code Playgroud)

通过这种过滤,当启用魔术引号时,我仍然可以打开SQL注入攻击吗?

我真的只关心任何会破坏我的查询的SQL注入......其他区域的其他白名单,htmlspecialchar()-ing等.

看一些类似的SO问题似乎建议改为检查魔术引号,如果它打开则在数据上运行'stripslashes',然后总是运行转义函数.我有点担心这样做,因为网站中的所有现有代码都假定它已经开启.

谢谢!

php sql-injection mysql-real-escape-string magic-quotes

5
推荐指数
1
解决办法
516
查看次数

PHP 5.3自动从表单字符串中转义$ _GET/$ _ POST?

我的服务器管理员最近升级到PHP 5.3,我得到一个奇怪的"错误"(或功能,因为PHP人员有它).mysql_real_escape_string出于明显的安全原因,我已经掌握了大部分字符串表单数据,但现在看来这种转义已经由PHP完成了.

<?php

echo $_GET["escaped"];

?>

<form method="get">
    <input type="text" name="escaped" />
</form>
Run Code Online (Sandbox Code Playgroud)

此输出,如果我的情况下进入escape 'this test',escape \'this test\'.如果我使用POST而不是相同的话GET.

是直接绑定到5.3升级还是我的管理员可以在php.ini文件中触发一些自动切换?

另外,我应该保持原样(如果它确实是一个正确捕获所有get和post变量的良好的失败证明机制),或者我应该禁用它(如果这甚至可能!)并返回mysql_real_escape_string?我的胆量告诉我方法2是最好的,但方法1有点自动化.:)

编辑:实际上,我需要禁用它.有时我会收集表单数据并将其重新发送到客户端表单以防出现错误(即缺少字段),因此我不希望他/她出现突然出现的斜线.

php forms escaping magic-quotes

5
推荐指数
2
解决办法
1万
查看次数

PHP magic_quotes_gpc漏洞

我被分配到我公司的一个遗留Web应用程序,经过一两天的探索,我发现了一个类似于以下内容的SQL注入向量:

mysql_query("SELECT * FROM foo WHERE bar='" . $_GET['baz'] . "'");
Run Code Online (Sandbox Code Playgroud)

我试图对此执行SQL注入测试,但由于PHP的magic_quotes_gpc模块已打开,它失败了.

我知道magic_quotes_gpc脏的,但我们有数百-如果不是数千-类似于上面的一个行的代码.我们根本无法magic_quotes_gpc关闭,因为这会使像这样的代码大开.

我想知道上面的代码是如何"可利用"的,以及我们是否应该立即修复它,或者包括修复它与我们的其他重构任务的任务.

php exploit sql-injection magic-quotes

4
推荐指数
1
解决办法
3495
查看次数