PHP:如何处理$_POST数据

3

当使用这段代码时,我在Netbeans中收到一个警告。可以有人发布一些代码,在Netbeans中不显示任何警告并实现我的要求。我的代码是否存在安全漏洞?

.

我得到的警告是“永远不要直接访问超级全局变量 $_POST。使用某些过滤函数代替。”

<?php
//test if required vars are set
if (
    isset($_POST['num']) &&
    isset($_POST['desc'])
) {
    (double) $num = filter_var($_POST['num'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
    $desc = $_POST['desc'];

    //do stuff after with these vars such as: mysqli queries; equations with ! === || &&. 
}
?>

1
Netbeans 抱怨这一行代码:$desc = $_POST['desc'];。这本身并不是不安全的,但你对它的处理可能会存在问题。Netbeans 只是提醒你要非常谨慎地处理用户数据。 - user1864610
@MikeW OP 实际上会在使用它们的所有 4 行中得到它们 :-) - jeroen
2个回答

1

Try to use this:

<?php

if (filter_input(INPUT_POST, 'num') && filter_input(INPUT_POST, 'desc')) {
    (double) $num = filter_input(INPUT_POST, 'num', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);

    $desc = filter_input(INPUT_POST, 'desc');

    //do stuff after with these vars such as: mysqli queries; equations with ! === || &&. 
}

1
你的前两行代码 - isset - 会导致致命错误:无法在写上下文中使用函数返回值。如果变量名未设置,filter_input 将返回 NULL,因此您可以测试该值是否为 NULL - jeroen
那么在上面的例子中isset()是不需要的吗? - compsci
@compsci,如果变量不存在,它将返回“NULL”。 - Marcio Mazzucato

0

我不会太担心那个警告,即使你实际使用了一个过滤函数的那一行(虽然与NetBeans建议的不同...)也会生成相同的消息。

这些都是提示,应该让你思考你正在做什么,它们可以非常有用。

但是,如果你不想看到它们,可以去:

Tools > Options > Editor > Hints

并且可以单独关闭特定的警告。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接