PHP:管理url $ _GET修补

时间:2010-10-25 14:24:40

标签: php url exception-handling get

这是一种情况,我有一个支持票据列表,当您单击票证的标题时,会将您带到显示票证的页面。如果使用URL GET变量来查询数据库。我已经考虑了SQL注入,但是如果有人将url修改为不存在的id会怎么样?最新的解决方法是什么?

谢谢,

Jonesy

5 个答案:

答案 0 :(得分:5)

如果该ID不存在,请发送一个404 - Not Found标头以及一个很好的错误页面,告诉用户没有找到它。

答案 1 :(得分:3)

你可能不得不让页面处理不成功的搜索;只是把它放在那里。然后,您可以帮助用户以一致的方式查找他搜索的内容,提供提示和“搜索次数最多”以及不搜索的内容。

答案 2 :(得分:1)

这看起来似乎太简单了,但是在对它们做任何事情之前,你应该总是验证你的GET(或POST)变量。在您的情况下,只需验证数据库中是否存在该ID。如果没有,请通知用户。

答案 3 :(得分:1)

您应该始终检查您的查询是否返回了任何内容。如果它返回0行,则该ID不存在。

<?php

$result = mysql_db_query("your query", $link);
$num_rows = mysql_num_rows($result);

if($num_rows < 1) {
  // row with that id doesnt exist
  // do whatever you want
} elseif($num_rows > 1) {
  // you have problem with your ids in db
} else {
  // everything went fine
  // do your thing here
}

?>

答案 4 :(得分:0)

检查故障单是否存在;如果没有,做出相应的反应什么“相应的反应”意味着由您的业务逻辑决定:创建一张新票?提出错误?将用户带到可用票证列表?

为简洁起见使用旧的mysql扩展的示例:

$sanitized_numeric_id = (int) $_GET['ticket_id']; // assuming id is numeric
$query_resource = mysql_query('SELECT `somecolumn`, `column2`, `othercolumn` 
                                  FROM `tickets`
                                  WHERE `id`= ' . $sanitized_numeric_id);
if (mysql_num_rows($query_resource) > 0) {
    // the ticket exists, do something with it
} else {
    // the ticket doesn't exist, react accordingly
}