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