我们正在将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>
所以,我的问题:
这种变化是否合理合适?
我认为因为我使用ctype_digit()
而无法传递任何错误,而且您可以假设newpage.php
正在使用PDO查询。我是否正确地考虑过这个问题?
一如既往地谢谢。
答案 0 :(得分:0)
您的新代码看起来不错。
在重定向之前可以提高安全性:
1)将id解析为int:
$rid = intval($_GET['id']);
请参阅文档:http://php.net/manual/en/function.intval.php
2)检查数据库中是否存在“已解析”ID(或您想要的内容)