Peringatan "Jangan Mengakses Superglobal $_POST Array secara Langsung" di Netbeans 7.4 untuk PHP

I've mendapat pesan peringatan pada Netbeans 7.4 untuk PHP, sementara aku'm menggunakan $_POST, $_GET, $_SERVER, ....

tidak Mengakses Superglobal $_POST Array Langsung

Apa artinya? Apa yang dapat saya lakukan untuk memperbaiki ini peringatan?

Edit: Acara sampel kode masih menunjukkan peringatan ini.

Mengomentari pertanyaan (5)
Larutan

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

Komentar (12)

Meskipun sedikit terlambat, saya've datang di pertanyaan ini sementara mencari solusi untuk masalah yang sama, jadi saya berharap itu bisa membantu...

Menemukan diriku dalam kegelapan yang sama dari anda. Baru saja menemukan artikel ini, yang menjelaskan beberapa petunjuk baru diperkenalkan di NetBeans 7.4, termasuk yang satu ini:

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

Alasan mengapa hal itu telah ditambahkan adalah karena superglobals biasanya diisi dengan masukan pengguna, yang seharusnya't pernah menjadi membabi buta terpercaya. Sebaliknya, beberapa jenis penyaringan harus dilakukan, dan bahwa's apa petunjuk yang menunjukkan. Filter superglobal nilai dalam kasus itu memiliki beberapa diracuni konten.

Misalnya, di mana saya memiliki:

$_SERVER['SERVER_NAME']

I've dimasukkan sebagai gantinya:

filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_SANITIZE_STRING)

Anda memiliki filter_input dan filter doc berikut:

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

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

Komentar (1)

Saya setuju dengan yang lain penjawab bahwa dalam kebanyakan kasus (hampir selalu) hal ini diperlukan untuk membersihkan masukan Anda.

Tapi mempertimbangkan kode tersebut (hal ini untuk BERISTIRAHAT controller):

$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();
}

Itu tidak akan sangat berguna untuk menerapkan sanitasi di sini (meskipun itu tidak akan melanggar apa-apa, baik).

Jadi, ikuti rekomendasi, tapi tidak membabi buta - agak mengerti mengapa mereka :)

Komentar (0)

Hanya menggunakan

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

e.g

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

bukan

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

Dan menggunakan

    var_dump(filter_input_array(INPUT_SERVER));

bukan

    var_dump($_SERVER);

N. B: Berlaku untuk semua variabel Super Global

Komentar (0)