SQL,Magic Quotes和301重定向 - SQL注入风险?

时间:2015-08-10 17:58:07

标签: php mysql sql-injection

我们正在将PHP升级到5.5并且魔术引号现已弃用,因此我们将其删除并转换为我们尚未使用的PDO。

但是,我遇到的情况是没有要转换的查询,我正在尝试确定我的代码是否正常。

此页面纯粹是旧版旧代码的301重定向。这基本上是整个页面代码BEFORE:

<?php
$id = "0";
if (isset($HTTP_GET_VARS["id"])) {
  $id = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS["id"] : addslashes($HTTP_GET_VARS["id"]);
}

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://example.com/newpage.php?id='.$id);
exit();

?>
<head>
</head>

这是我将其转换为的新代码。我摆脱了神奇的东西,也放入ctype_digit ()来验证输入为正整数。

同样,这是该页面的整个代码:

<?php

// grab the variable
$rid = 1;
if (isset($_GET["id"]) && ctype_digit($_GET["id"])) // if the variable exists and is a positive integer
    {$rid = ($_GET["id"]);}
else
{
//die("This page doesn't exist");
}

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://example.com/newpage.php?id='.$rid);
exit();

?>
<head>
</head>

所以,我的问题:

  1. 这种变化是否合理合适?

  2. 我认为因为我使用ctype_digit()而无法传递任何错误,而且您可以假设newpage.php正在使用PDO查询。我是否正确地考虑过这个问题?

  3. 一如既往地谢谢。

1 个答案:

答案 0 :(得分:0)

您的新代码看起来不错。

在重定向之前可以提高安全性

1)将id解析为int:

$rid = intval($_GET['id']);

请参阅文档:http://php.net/manual/en/function.intval.php

2)检查数据库中是否存在“已解析”ID(或您想要的内容)