Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
条纹斜杠不';我的魔术引号在PHP中不起作用_Php_Magic Quotes_Stripslashes - Fatal编程技术网

条纹斜杠不';我的魔术引号在PHP中不起作用

条纹斜杠不';我的魔术引号在PHP中不起作用,php,magic-quotes,stripslashes,Php,Magic Quotes,Stripslashes,我已经开始使用魔法引号,我遇到了一个小问题,一个我猜不出的简单问题 我不想使用条纹睫毛,当我在我的文本区写东西时,它不会删除 代码: 问题: 我也试过这个,它确实有效 <?php $str = "Is your name O\'reilly?"; // Outputs: Is your name O'reilly? echo stripslashes($str); ?> 我不能把它说得比赵在网上的评论更好 不推荐使用“魔术引语”的原因是,一刀切的逃避/引用方法是错误的,而且非

我已经开始使用魔法引号,我遇到了一个小问题,一个我猜不出的简单问题

我不想使用条纹睫毛,当我在我的文本区写东西时,它不会删除

代码:


问题:
我也试过这个,它确实有效

<?php
$str = "Is your name O\'reilly?";

// Outputs: Is your name O'reilly?
echo stripslashes($str);
?>

我不能把它说得比赵在网上的评论更好

不推荐使用“魔术引语”的原因是,一刀切的逃避/引用方法是错误的,而且非常危险。不同类型的内容有不同的特殊魅力和不同的逃避方式,在一个内容中起作用的内容往往会在其他地方产生副作用。无论是在这里还是其他任何地方,任何假装像魔术引号一样工作的示例代码——或者对HTML、SQL或其他类似的东西进行类似的转换——都同样是错误的,同样是危险的

魔法报价不是为了安全。他们从来没有这样做过。这是一件很方便的事情——它们的存在使得PHPNoob可以摸索并最终编写一些mysql查询,而不必学习如何正确地转义/引用数据。他们的工作就是防止一些意外的语法错误。但是,他们无法阻止恶意的半知识型攻击者破坏PHPNoob的数据库。而那个可怜的noob可能永远也不知道他的数据库现在是如何或为什么消失的,因为神奇的引语(或他尖刻的“我要逃避一切”功能)给了他一种虚假的安全感。他从不需要学习如何真正处理不可信的输入

数据应该在需要转义的地方转义,并转义到将使用它的域。(mysql_real_escape_string——不是addslashes!——对于mysql(除非您有线索并使用准备好的语句),对于HTML的htmlspecialchars或htmlspecialchars等等),其他任何东西都注定要失败

真的,听我的建议。不要使用它们,通过尝试它们你不会学到任何有用的东西,只是忘记它们曾经存在过


有关更多信息,请参阅本文和本文。

解决问题的简单方法是创建一个简单的函数,如果数据要接触数据库,您可以通过该函数推送所有数据。可以这样建模:

function sanitizeString($var)
{

    $var = strip_tags($var);
    $var = htmlentities($var);
    $var = stripslashes($var);

    return mysql_real_escape_string($var);

}//end sanitizeString

攻击很容易,但似乎需要更多的努力来帮助。这是我帮助别人的尝试

因此,您正在将数据发回服务器,并且您希望确保用户发回的任何内容不会最终导致其恶意行为

你采用的幼稚策略是说,好吧,我将通过打开神奇的引用,对数据进行一般性的清理,这应该可以避免所有的不愉快

然而,事实并非如此。您的工作是确保在处理不受信任的数据时使用自定义的清除策略,这完全取决于您如何使用它。一个很好的学习资源在哪里您应该允许不受信任的数据进入特定位置,以及如何逃避不受信任的数据可以在

您会注意到,并非所有位置都适用于不受信任的数据(转义数据或其他数据)。这凸显了一个事实,为了真正实现安全的网站,你必须同时考虑<强>哪里< /强>不可信的数据正在进行和<强> > < /强>数据到达那里。< /P> 这个问题更直接地集中在如何,因为我们正在考虑(并攻击)一种通用的逃逸机制。您的意思是,启用magic quotes是一种合适的方法,用于转义发送到您的不受信任数据最终可能到达的所有位置的数据

最佳实践表明,实际上,您需要使用适合您打算使用它的位置的逃逸机制。正如已经指出的,使用是一个流行的函数,它专门用于转义字符串以在MySQL查询中使用。人们确实使用这种机制,但正确使用这种机制取代了手动转义数据的需要。(将不受信任的数据绑定到参数,而不是手动构建查询字符串)

其他明显的转义机制包括使用或和(更通用的引号转义机制和)对html字符进行编码。甚至还有命令行参数和参数的转义方法


因此,您可以看到,正确地转义数据远没有对所有传入数据应用魔引号那么简单,而且根据您打算使用数据的位置,通常有完善的机制来安全地转义数据。

被否决。。。。。。。。。。。。。。
“我已经开始使用魔引号了。”
这是你能得到的最好的建议。@Alexein没有详细说明为什么魔法引号不好。。这应该可以做到“此功能从PHP5.3.0起已被弃用,从PHP5.4.0起已被删除。”它已被弃用。我们很久以前就一致认为,依靠服务器设置来任意逃逸数据是一个很大的错误。我们只是简单地缓解了这个问题(即,如果某个白痴打开了它,则将其关闭),并在必要时让我们的应用程序转义字符。您不应该需要神奇的引号,因为您没有建立查询字符串。你可以避免,有点。有一个自定义的
html()
转义函数,而不是随身携带
htmlspecialchars,这会有所帮助(
parameters。同样,使用绑定参数的PDO要比fugly mysql_uu函数和手动转义简单得多。-重点是不同的任务需要不同的转义函数/功能。非常感谢!!我在我的大学里听说了魔法引号,但我想我应该尽快离开。还有,你知道我该怎么做吗相反,我是一个想学PHP的书呆子!@Alexein我在帖子中链接了几篇文章,你可能会发现这些文章很有用。这里有大量关于不信任用户输入以及如何应对的信息
function sanitizeString($var)
{

    $var = strip_tags($var);
    $var = htmlentities($var);
    $var = stripslashes($var);

    return mysql_real_escape_string($var);

}//end sanitizeString