我正在开发一个简单的 PHP 数据库应用程序供内部使用,但希望将其编码为最佳实践。我的一些页面正在从 GET 请求接收整数值,我只是想知道真正需要多少验证和清理。
目前我正在使用 $num = filter_input(INPUT_GET, 'num', FILTER_VALIDATE_INT, $num_options);
以及指定的最小值和最大值。如果 $num == false
是否还需要使用$mysqli->real_escape_string($num);
目前我不介意,因为我认为使用整数进行 SQL 注入(inject)非常困难......
谢谢
凯文
更新:澄清我正在执行的查询如下所示
$sql = "SELECT employeeID, concat(FirstName, ' ', LastName) as Name FROM employee WHERE employeeID='$num'";
最佳答案
我看到您使用 mysqli,您最好的安全选择是查看准备好的语句。
PHP mysqli Prepared Statements
示例有点复杂,但上面的链接有深入的示例。
一旦你掌握了它的窍门,并建立你的类(class)。这实际上只是一个普通的 sql 查询,但不包含您使用的值?
"SELECT * FROM account WHERE username = ? AND password = ?"
并将您的值绑定(bind)到语句:
array("bradley", "Passw0rd");
简单来说,安全性来自于您不会自己将值连接到查询字符串中。使其不易发生 sql 注入(inject)。
关于php - filter_input 和 mysqli_real_escape_string 用于整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9653099/