我正在为一些简单的功能开发基本API。我正在捕捉如下的输入:
if ($action == 'delete' && isset($_POST['targetId']) && isset($_POST['userId'])) {
//The isset causes "Do not access Superglobal _POST array directly" warning in Netbeans
$userId = filter_input(INPUT_POST, 'userId');
$beamId = filter_input(INPUT_POST, 'targetId');
}
我是否应该使用filter_input来检查是否设置了值?像:
if ($action == 'delete' && filter_input(INPUT_POST, 'targetId') && filter_input(INPUT_POST, 'userId')) {
}
我不是在考虑这里的选择,而是对最安全和防黑客的最正确的解决方案感到满意。
编辑:是的,上述信息将用作SQL的输入
答案 0 :(得分:7)
另一个解决方案可能是使用filter_has_var()。
if (filter_has_var(INPUT_POST, "userId") {
//occurs when $_POST['userId'] is set or not null
}
答案 1 :(得分:3)
filter_input
用于清理或检查输入的数据类型。它用于确保您期望的数据采用所需的格式,并且您可以使用所需的过滤器对其进行清理。在您的情况下,isset
将检查是否设置了所需的变量(或不是NULL)。所以两者都有不同的用例。我没有看到直接在POST项目上使用isset
但是我建议使用filter_input
以便也可以验证数据。
答案 2 :(得分:2)
未经过滤的输入的主要问题主要是代码注入。这是一个问题,您将输入用作SQL语句的一部分或输出回用户(JavaScript)。
因此,没有必要只检查是否输入了值。最好是保持一致并首先使用filter_input
填充变量,然后使用这些变量来检查字段是否已填充,如果您将在稍后的脚本中使用该值。