【发布时间】:2013-06-22 16:58:14
【问题描述】:
我有一些链接结构如下...
http://domain.com?problem_id=23&course_id=4
GET“字段”(problem_id 和 course_id)的预期值是整数。我可以通过简单地说...来验证这些数据吗?
if (is_numeric($_GET['problem_id'])){
//It's safe, so do stuff.
} else {
echo 'It appears you submitted a problem incorrectly. Please contact us for assistance';
exit;
}
或者这仍然对 sql 注入等恶意行为开放?
建议的解决方案
$int_problem_id = (int) $_GET['problem_id'];
if (ctype_digit($int_problem_id)){
//It's safe, so do stuff.
} else {
echo 'It appears you submitted a problem incorrectly. Please contact us for assistance';
exit;
}
【问题讨论】:
-
请注意,
is_numeric()可能实际上并没有按照您的想法进行操作。以下对于 is_numeric 都将返回 true:3.14、+0123.45e6、0xf4c3b00c、0b10100111001。ctype_digit()是你要找的吗? -
@jcsanyi:使用 ctype_digit 是一种更好的方法。谢谢!
标签: php validation isnumeric