2014-11-07 76 views
3

使用此代碼時,我在netbeans上發出警告。有人可能會發布代碼,不會在netbeans中顯示任何警告,並實現我想要的。我的代碼是否包含安全缺陷?

我得到的警告說:「永遠不要直接訪問Superglobal $ _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 [ '降序'];'。這本身不是不安全的,但是你可能會這樣做。 Netbeans只是提醒你用相當謹慎的態度對待用戶數據。 – 2014-11-07 00:25:50

+0

@MikeW OP實際上會在它們被使用的所有4行中得到它們:-) – jeroen 2014-11-07 00:32:01

回答

1

嘗試使用此:

<?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',所以你可以測試它。 – jeroen 2014-11-07 00:35:29

+0

所以在上面的例子中不需要isset()? – compsci 2014-11-07 00:41:00

+0

@ jeroen,好評,我做了更新,謝謝! – 2014-11-07 00:45:58

0

我不會太擔心的警告,即使你實際使用的過濾器功能的線(儘管不同的人比NetBeans的建議...)生成相同的消息。

這些提示應該讓你思考你在做什麼,它們可以非常有用。

但是,如果你不希望看到他們,你可以去:

Tools > Options > Editor > Hints 

轉來轉去的具體警告關閉的情況。