Php SQL、魔引号和301重定向-SQL注入风险?
我们正在将php升级到5.5,现在不推荐使用magic quotes,因此我们正在删除它们并将其转换为PDO,而我们还没有这样做 然而,我遇到了一种情况,即没有要转换的查询,我正在尝试确定我的代码是否正常 这个页面纯粹是一个301重定向从旧的遗留代码。这基本上是之前的整个页面代码:Php SQL、魔引号和301重定向-SQL注入风险?,php,mysql,sql-injection,Php,Mysql,Sql Injection,我们正在将php升级到5.5,现在不推荐使用magic quotes,因此我们正在删除它们并将其转换为PDO,而我们还没有这样做 然而,我遇到了一种情况,即没有要转换的查询,我正在尝试确定我的代码是否正常 这个页面纯粹是一个301重定向从旧的遗留代码。这基本上是之前的整个页面代码: <?php $id = "0"; if (isset($HTTP_GET_VARS["id"])) { $id = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS["id
<?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,所以我不认为有什么不好的地方可以通过,而且您可以假设newpage.php使用的是PDO查询。我想得对吗
一如既往地感谢您。您的新代码看起来不错 重定向前可能会有更高的安全性: 1将id解析为int: 请参阅文档:
2检查数据库中是否存在“已解析”id或您想要的内容您的任何摘录都与SQL有关。URL上下文将指示urlencode转义。安全风险可以很好地定义。一方面,您怀疑显示的简单代码中存在安全风险,另一方面,您假设使用PDO将神奇地消除所有安全风险。事实并非如此。这一切都取决于你是如何使用它的。你必须开始对安全问题进行清晰的推理。没有魔法。这是关于转义和验证用户输入,以及使用正确的编码和转义序列。在将参数传递到数据库之前,不要忘记再次清理newpage.php中的参数@LorenzMeyer-感谢您的回复。恕我直言,但我正试图就这些话题进行清晰的推理。显然,我的理解与您的不同,但我正在尝试学习和修复糟糕的遗留代码,并将stackoverflow用作检查工作的资源。我在努力学习!我知道没有魔法,我从来没有说过有魔法,所以我想我不明白你回答的语气。我只是想得到反馈。
<?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>
$rid = intval($_GET['id']);