2014-11-07 4 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

'$ DESC = $ _POST [ 'DESC']'. 이것은 그 자체로는 안전하지 않지만, 당신이하는 일은 그럴 수도 있습니다. Netbeans은 사용자 데이터를 상당한 외모로 다루도록 단순하게 상기시켜줍니다. –

+0

@MikeW OP는 실제로 그것들이 사용되는 모든 네 줄에서 그것을 얻습니다 :-) – jeroen

답변

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

+0

그래서 위의 예제에서는 isset()이 필요하지 않습니까? – compsci

+0

@jeroen, 좋은 의견, 내가 업데이트를 했어, 고마워! –

0

나는 (... 넷빈즈가 아닌 다른 사람이 알 수 있지만) 실제로 필터 기능을 사용하는 경우에도 라인, 그 경고에 대한 걱정을 너무 많이하지 않을는 동일한 메시지 있음을 생성합니다.

당신이하고있는 일에 대해 생각하게하는 힌트이며 매우 유용 할 수 있습니다. 당신이 그들을 표시하지 않으려면

그러나, 당신은 갈 수 있습니다 :

Tools > Options > Editor > Hints 

그리고 개별적으로 특정 경고를 해제합니다.