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

SQL, Magic Quotes and 301 redirects - SQL injection risk?

我们正在将 php 升级到 5.5,现在不推荐使用魔术引号,因此我们正在删除它们并在尚未转换为 PDO 的地方进行转换。

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

此页面纯粹是来自旧遗留代码的 301 重定向。这基本上是之前的整个页面代码:

<?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 查询。我想得对吗?

一如既往的感谢。

你的新代码看起来不错。

在重定向之前可能有更高的安全性

1) 将id解析为int:

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

查看文档:http://php.net/manual/en/function.intval.php

2) 检查数据库中是否存在 'parsed' id(或者你想要的)