Vir*_*dia 17 php security magic-quotes
根据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()这样的特定于数据库的转义函数.
sk.*_*sk. 25
魔术引言本来就被打破了.它们旨在清理PHP脚本的输入,但不知道如何使用该输入,就无法正确清理.如果有的话,最好检查魔术引号是否已启用,然后在$ _GET/$ _ POST/$ _ COOKIES/$ _ REQUEST上调用stripslashes(),然后在某处使用它时清理变量.例如urlencode()如果你在URL中使用它,htmlentities()如果你将它打印回网页,或者使用数据库驱动程序的转义函数(如果你将它存储到数据库中).请注意,那些输入数组可能包含子数组,因此您可能需要编写一个函数可以递归到子数组中以去除这些斜杠.
"从PHP 5.3.0开始,此功能已被弃用,从PHP 5.4.0开始被删除.非常不鼓励依赖此功能.Magic Quotes是一个自动将传入数据转义为PHP脚本的过程.最好用魔法编码引用关闭,并根据需要在运行时转义数据."
Mar*_*rkR 17
魔术引号是一个设计错误.它们的使用与保持理智是不相容的.
我更喜欢:
if (get_magic_quotes_gpc()) {
throw new Exception("Turn magic quotes off now!");
}
Run Code Online (Sandbox Code Playgroud)
不要编写与本质上破坏的设置兼容的代码.而是通过让代码快速失败来防止使用它们.
我在我的网站的头文件中使用以下代码来反转magic_quotes的效果:
<?php
// Strips slashes recursively only up to 3 levels to prevent attackers from
// causing a stack overflow error.
function stripslashes_array(&$array, $iterations=0) {
if ($iterations < 3) {
foreach ($array as $key => $value) {
if (is_array($value)) {
stripslashes_array($array[$key], $iterations + 1);
} else {
$array[$key] = stripslashes($array[$key]);
}
}
}
}
if (get_magic_quotes_gpc()) {
stripslashes_array($_GET);
stripslashes_array($_POST);
stripslashes_array($_COOKIE);
}
?>
Run Code Online (Sandbox Code Playgroud)
然后我可以编写其余的代码,好像magic_quotes从未存在过一样.
| 归档时间: |
|
| 查看次数: |
12474 次 |
| 最近记录: |