我的Magic_Quotes一直在进行,直到今天我才看到它正在被摧毁。如果我把它关闭,我可以逃避所有用户输入(无论是否在我的数据库中使用)。我绝对不能回头重写我的所有数据库查询以使用mysql_real_escape_string()。
我可以循环遍历所有$ _GET,$ _POST和$ _SESSION并应用mysql_real_escape_string()吗?
答案 0 :(得分:3)
mysql_real_escape_string
和magic_quotes_gpc
是两回事。魔术引号不会使您的输入足够安全,无法进行SQL查询。
无论您是否喜欢,应该转换所有数据库查询以使用正确的转义机制,否则您的应用程序会因SQL注入等安全问题而处于开放状态。
你不能直接在$ _GET,$ _POST等上直接应用mysql_real_escape_string
,因为如果除了SQL之外还需要其他任何东西(如表单验证等),它可能会搞砸你的输入数据。 / p>
答案 1 :(得分:2)
将其关闭。与被黑客入侵的痛苦相比,手工重新编码的痛苦,与案件相比,相形见绌。
答案 2 :(得分:1)
这是我使用的方法。如果您使用case方法切换,只需连接index.php文件。 第二种方法,您需要添加到每个页面。
- 的index.php?页=家
- index.php?page = two ...
醇>
第二种方法每页添加代码
- 的index.php
- contact.php
- product.php ....
醇>
推荐:简单页面查询案例/开关
// Magic Quotes Fix
if (ini_get('magic_quotes_gpc')) {
function clean($data) {
if (is_array($data)) {
foreach ($data as $key => $value) {
$data[clean($key)] = clean($value);
}
} else {
$data = stripslashes($data);
}
return $data;
}
$_GET = clean($_GET);
$_POST = clean($_POST);
$_REQUEST = clean($_REQUEST);
$_COOKIE = clean($_COOKIE);
}
答案 3 :(得分:0)
是的,您可以,但不要忘记您也可以通过GPC发送数组。 ?var[1]=data
。应该注意的是,magic_quotes_gpc已被删除了,这是有充分理由的,我打赌很多啤酒,你的应用程序很容易被sql注入。
if (!get_magic_quotes_gpc()) {
function my_escape(&$value, $key) {$value = mysql_real_escape_string($value);}
$gpc = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
array_walk_recursive($gpc, 'my_escape');
}