PHP için Netbeans 7.4'te "Süper Küresel $ _POST Dizisine Doğrudan Erişmeyin" uyarısı


118

Ben kullanıyorum ederken PHP NetBeans 7.4 bu mesajı uyarısı var $ 'POST , $ GETin , $ _SERVER , ....

Süper Küresel $ _POST Dizisine Doğrudan Erişmeyin

Bu ne demek? Bu uyarıyı düzeltmek için ne yapabilirim?

Düzenleme: Etkinlik örnek kodu hala bu uyarıyı gösteriyor.


1
Netbeans'te bu mesajı sigortalayan kod nedir?
TiMESPLiNTER

2
Bu sadece bir öneri, seçeneklerden kapatabilirsiniz ... ve bunun bir programlama sorusu olmadığını söyleyebilirim!
Matteo Tassinari

1
Sadece bu uyarının neyi değiştirmemi istediğini bilmek istiyorum! çünkü eski netbeans sürümü gösterilmiyor. Bu parametreleri almanın başka bir yolu var mı? ($ _POST demek istiyorum)
Kannika

@MatteoTassinari Bunun sadece tavsiye olduğunu biliyorum ve bunu nerede devre dışı bırakacağımı biliyorum, ancak herhangi bir uyarı yapmadan düzeltmek için ne yapabilirim? Bilgimin uyarı alma sınırı olduğunu düşünüyorum, ancak kodumu yeni bir şeyle güncellemek için düzeltmek istiyorum çünkü yalnızca $ _POST'un bu gönderme formunu göndereceğini biliyorum. Her neyse,
Yorumunuz

Yanıtlar:


92

filter_input(INPUT_POST, 'var_name')yerine $_POST['var_name']
filter_input_array(INPUT_POST)yerine$_POST


6
"Uyarı ne anlama geliyor" sorusuna mı yoksa "nasıl kaldırılır" sorusuna mı cevap veriyorsunuz? Seninle aynı fikirdeyim, uyarının anlamı bu, ancak işlev kullanıldığında uyarı orada kalıyor. Şu anda bir$name = filter_input(INPUT_POST, $_POST["name"]); .
stenci

6
@stenci, böyle bir şey yapmanız gerekirken, tekrar $ _POST kullanıyorsunuz $ name = filter_input (INPUT_POST, "name");
Wojciech Sobczyk

16
Eh, uyarı kaybolabilir, ancak bir filtre belirtmezseniz, NetBeans'in işaret ettiği güvenlik sorununu gerçekten düzeltemezsiniz. Örneğin, bir int bekliyorsanız, şunu kullanın:filter_input(INPUT_POST, 'var_name', FILTER_SANITIZE_NUMBER_INT)
HoffZ

44
-1: Bu cevap biraz önemsiz görünüyor. açıklama yok, filter_input ne yapar, php.net/filter_input bağlantısı bile yok . İnsanların onu sadece görmesi, kullanması, daha iyi kod yazdığını düşünmesi ama yine de bir şeyi anlamaması beni korkutuyor.
IARI

5
Ow, filtre bağımsız değişkeni olmadan bir filtre işlevinin kullanılmasını önermek, FILTER_UNSAFE_RAW'a yol açar, bu da TRUST_ALL_BAD_INPUT
Kzqai

88

Biraz geç de olsa aynı sorunun çözümünü ararken bu soruyla karşılaştım, bu yüzden umarım herhangi bir faydası olabilir ...

Kendimi seninle aynı karanlıkta buldum. NetBeans 7.4'te sunulan bazı yeni ipuçlarını açıklayan bu makaleyi buldum.

https://blogs.oracle.com/netbeansphp/entry/improve_your_code_with_new

Eklenmesinin nedeni, süper küresellerin genellikle körü körüne güvenilmemesi gereken kullanıcı girdisiyle dolu olmasıdır. Bunun yerine, bir tür filtreleme yapılmalı ve ipucu bunu gösteriyor. Bazı zehirli içeriğe sahip olması durumunda süper küresel değeri filtreleyin.

Örneğin, sahip olduğum yer:

$_SERVER['SERVER_NAME']

Bunun yerine şunu koydum:

filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_SANITIZE_STRING)

Burada filter_input ve filtreler belgesine sahipsiniz:

http://www.php.net/manual/en/function.filter-input.php

http://www.php.net/manual/en/filter.filters.php


Söylediğinizi tam olarak yaparsanız, Netbeans yine de "$ _POST" veya "$ _GET" bölümlerinin altını çizecek ve bildirimi filtrelenmemiş gibi görüntüleyecektir. Bu sorun yalnızca bir Netbeans hatası olabilir (en azından sürüm 8.1'de).
user3640967

6

Diğer yanıt verenlerle, çoğu durumda (neredeyse her zaman) girdinizi sterilize etmeniz gerektiği konusunda hemfikirim.

Ancak böyle bir kodu göz önünde bulundurun (bir REST denetleyicisi içindir):

$method = $_SERVER['REQUEST_METHOD'];

switch ($method) {
            case 'GET':
                return $this->doGet($request, $object);
            case 'POST':
                return $this->doPost($request, $object);
            case 'PUT':
                return $this->doPut($request, $object);
            case 'DELETE':
                return $this->doDelete($request, $object);
            default:
                return $this->onBadRequest();
}

Burada dezenfektan uygulamak çok yararlı olmayacaktır (her ne kadar hiçbir şeyi bozmasa da).

Öyleyse, tavsiyelere uyun, ancak körü körüne değil - neden olduklarını anlayın :)


1

Sadece kullan

$ _INPUT_METHOD_NAME ['var_name'] yerine filter_input (INPUT_METHOD_NAME, 'var_name') $ _INPUT_METHOD_NAME yerine filter_input_array (INPUT_METHOD_NAME)

Örneğin

    $host= filter_input(INPUT_SERVER, 'HTTP_HOST');
    echo $host;

onun yerine

    $host= $_SERVER['HTTP_HOST'];
    echo $host;

Ve kullan

    var_dump(filter_input_array(INPUT_SERVER));

onun yerine

    var_dump($_SERVER);

Not: Diğer tüm Süper Global değişkenlere uygula


0

Kodumdaki NetBeans'te uyarıyı getiren satırın bir kısmı:

$page = (!empty($_GET['p'])) 

Çok fazla araştırma yaptıktan ve bu diziyi filtrelemenin sayısız yolu olduğunu gördükten sonra, basit olan bir tane buldum. Kodum çalışıyor ve NetBeans mutlu:

$p = filter_input(INPUT_GET, 'p');
$page = (!empty($p))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.