如何检查查询字符串中的ID是否有效?
我传递一个数据库生成的id值链接到另一个页面。在我拨打$_GET
的接收页面中,我想防止人们在网址(例如www.mysite.com?id=43)中的?
之后插入虚假值。如何检查查询字符串中的ID是否有效?
我想检查传入的值并确保它是数据库中的有效标识符,或者有没有办法检查NULL或空值?这是我已经试过:
来源页面:
echo "<a href=\"get-post-pg2.php?id=" .urlencode($row['id']) ."\">Second Page</a>";
目标页面:
$id = $_GET['id'];
if(isset($_GET)) {
echo $id;
} else
echo 'foo';
}
你应该做的是投了$ _GET变量到整型...
$id = (int) $_GET['id'];
然后检查是否为空..
if(!empty($id)){
// process code
}
任何字符串将被转换为零,它在PHP中返回为空。 然后检查数据库中是否存在该ID!
甜!这完美的作品!数据并不重要,我只想学习更好的编码习惯。非常感谢你的帮助! – Stubb207 2012-03-08 20:30:26
'(int)$ _GET ['id']''会为'1 Oops!'返回'1',因此可能转换为int并不一定是最合适的解决方案(规范url?)。为什么不直接在数据库中查询'$ _GET ['id']'而不检查它?如果该行不存在,则显示404,与用户传入的内容无关。Shrapnel提到,无论用户想要什么,都无法阻止用户输入地址栏。 – 2012-03-08 20:31:19
在我的查询函数中,我已经测试了查询,如果失败了,我重定向到一个oops页面。所以这一步没有必要? – Stubb207 2012-03-08 20:43:44
在目标页面上,我只需检查$ _GET ['id']以确保它是您需要的范围内的整数,如果不是,则默认为某个值或重定向用户。
if(is_int($_GET['id']) And $_GET['id']>=1 And $_GET['id'] <= 1000) {
//proceed
}
else {
header('Location:...'); // or set $id to a default value
}
我的下一步也是重定向!干杯! – Stubb207 2012-03-08 20:31:10
检查传入值并确保它是来自数据库IS的有效标识符的唯一方法是根据数据库查询它。简单,呃?
我想防止人们插入虚假值后?在网址中。
答案更简单 - 你不行。
虽然你可以验证你的ID,但是我个人很少打扰这种愚蠢的原因验证变量。
解救的常识!另外,'0'可能是一个有效的ID - 如果你使用像“example.com/?slug = test-for-inserted-values-in-url”那样的slug,那么就没有办法“验证”他们没有数据库查询。 – 2012-03-08 20:33:11
isset()是检查值的好方法! – powtac 2012-03-08 20:10:53
要确保只有整数值,可以使用'echo(int)$ id;' – powtac 2012-03-08 20:11:23
'empty()'检查isset,null和空字符串。但是,如果必须保护该值,则应该使用'$ _SESSION'来持久保存,而不是'$ _GET'将其传递到您自己站点上的另一个页面。 – 2012-03-08 20:11:56