1

我有一些结构如下的链接......

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;
}
4

2 回答 2

2

是的,这是一个解决方案。此外,您还可以强制转换为 int。

$integer = (int) $_GET['problem_id'] ;

您应该保护数据库的所有输入,即使数值不会造成任何伤害,因为它们不包含特殊符号。

于 2013-06-22T17:10:22.753 回答
1

你会确保这?problem_id=是数字。但是,您的所有其他字段可能仍然存在风险,因此这不是保护 SQL 注入的正确方法。您应该查看 PDO 和 MySQLi,以及它们的bindParam / bind_params函数。

于 2013-06-22T17:09:10.923 回答