KomputerPerisian

PHP berubah-ubah global dalam fungsi. Membuat berubah-ubah global dalam PHP

Untuk mencipta laman penuh, yang mempunyai fungsi luas yang anda perlu tahu banyak. Tetapi apa yang boleh membuat dia benar-benar unik - ia adalah PHP. Pembolehubah global dalam bahasa pengaturcaraan tidak digunakan selalu, tetapi kadang-kadang untuk mengetahui bagaimana ia berfungsi, kadang-kadang ia adalah perlu. Itu adalah kajian tentang apa yang ia dan bagaimana ia berfungsi, kita akan lakukan dalam artikel ini.

skop

Jadi panggilan konteks di mana pembolehubah dan ditentukan. Dalam kebanyakan kes, mereka hanya mempunyai satu skop. Apabila PHP pembolehubah global dimuatkan dari fail lain, maka ia mungkin termasuk (termasuk) dan diperlukan (memerlukan).

Secara lalai, mereka adalah terhad kepada skop fungsi tempatan. Dan bagaimana untuk membuat ubah fail lihat dalam sempadannya, yang lebih dan boleh digunakan? Untuk tujuan ini, dan disediakan dalam pembolehubah global PHP.

kata kunci "global"

Dan di sini adalah bagaimana untuk mengisytiharkan pembolehubah global untuk PHP? Dalam mencapai matlamat ini akan membantu kita perkataan "global". Ia adalah perlu untuk meletakkan di hadapan pembolehubah yang anda ingin global (narimer, global «ubah The").

Selepas pelaksanaan petunjuk sedemikian, data akan dapat bekerja dengan mana-mana fail. Jika di suatu tempat terdapat rujukan kepada pembolehubah ini, atur cara akan sentiasa memberi perhatian kepada versi global.

Mengapa bahasa pelik? Fakta bahawa pada masa yang sama mungkin ada versi tempatan. Tetapi mereka boleh didapati secara eksklusif untuk fail-fail mana diumumkan. Dan untuk semua yang lain akan bertindak pembolehubah global kelas PHP. Oleh itu anda perlu berhati-hati. Dan bahawa tidak syak lagi, di sini adalah satu contoh apa yang mereka kelihatan seperti: a global.

Kerana jika satu fail akan mempunyai akses kepada beberapa pembolehubah, ia akan menyebabkan mereka bercanggah. Tetapi kita tidak boleh mengatakan dengan pasti - tempatan atau global ★ dibaca atau sama sekali gagal. Jadi, jika ia adalah untuk mendaftar dalam fungsi, ia sepatutnya tidak ada masalah. Tetapi penggunaan pembolehubah untuk sempadan untuk menjadi bermasalah. Oleh itu, struktur penggubalan kod yang diperlukan untuk memantau dan memastikan bahawa mana-mana ada walaupun pra-syarat kepada konflik itu timbul.

Satu lagi penjelmaan rakaman

Adakah mungkin di PHP untuk membuat ubah global dengan cara yang lain? Ya, tidak walaupun satu. Pertama, mari kita mempertimbangkan $ Globals. Ini adalah pelbagai bersekutu. Kunci kepada ia - adalah nama. Oleh kerana nilai kandungan bertindak sebagai pembolehubah global. Ia harus diperhatikan bahawa array selepas pengumuman wujud dalam mana-mana skop. Ini memberi sebab untuk mempercayai ia Superglobal. Ia kelihatan begitu: $ Globals [ 'ubah'].

Yang telah ditetapkan / superglobals

Dalam setiap bahasa pengaturcaraan terdapat beberapa nama yang disewa untuk beberapa fungsinya. Oleh itu, untuk mewujudkan dalam PHP pembolehubah global dengan nama yang sama tidak akan berfungsi.

Ini bahasa pengaturcaraan mempunyai ciri-ciri sendiri. Jadi, ia adalah penting bahawa pembolehubah yang telah ditetapkan di sini tidak memasang "super", iaitu, mereka tidak terdapat di semua lokasi. Bagaimana saya boleh memperbaikinya? Kepada pembolehubah yang telah ditetapkan boleh didapati di beberapa kawasan tempatan, ia mesti diisytiharkan seperti berikut :. «ubah Global" Ia seolah-olah sama seperti sebelum ini memberitahu, bukan? Ia adalah benar, tetapi tidak cukup. Mari kita lihat sudah "berjuang" contoh:

  • $ Global HTTP_POST_VARS;
  • echo $ HTTP_POST_VARS [ 'nama'].

Anda rasa perbezaan di antara mereka? Perhatikan bahawa dalam PHP pembolehubah global tidak semestinya perlu digunakan dalam fungsi. Ia juga boleh diletakkan di dalam fail yang termasuk di dalamnya.

Pautan dan keselamatan

Seperti yang anda lihat, dalam PHP mewujudkan pemboleh ubah global tidak menjadi masalah. Tetapi ada link relatif tertentu? Ya, mungkin ada kelakuan yang tidak dijangka apabila menggunakan global. Tetapi sebelum itu, backstory sedikit.

Dalam versi 4.2.0 arahan daripada register_globals lalai berubah dari dalam negeri ke luar. Untuk kebanyakan pengguna, ini tidak begitu penting, tetapi sia-sia. Lagipun, ia langsung memberi kesan kepada keselamatan produk maju. Jika anda perlu membuat berubah-ubah global PHP-arahan pada parameter ini tidak terlibat secara langsung. Walau bagaimanapun, penggunaan yang tidak betul sudah boleh membuat keselamatan duluan.

Jadi jika register_globals dihidupkan, sebelum pelaksanaan hurufiah dimulakan pembolehubah yang berbeza yang diperlukan, sebagai contoh untuk menghantar HTML-bentuk. Oleh itu, ia telah memutuskan untuk mematikannya.

Mengapa keadaan arahan ini dalam pembolehubah global php berhutang banyak? Hakikatnya adalah bahawa apabila keadaan pemaju tidak selalu dengan pasti boleh diri mereka menjawab persoalan di mana ia datang dari. Dalam satu tangan, ia adalah lebih mudah untuk menulis kod. Tetapi di pihak yang lain - ia adalah satu risiko keselamatan. Oleh itu, untuk mengelakkan kesilapan, serta data pencampuran dan arahan telah dilumpuhkan.

Sekarang mari kita lihat tidak / code selamat, serta bagaimana untuk mengesan kes-kes di mana pengumuman pembolehubah PHP global disertai dengan cubaan mengganggu data. Ini adalah perlu untuk mewujudkan bukan sahaja cantik, tetapi juga semakin tapak yang tidak retak orang pertama yang ada bekerja.

kod berniat jahat

Mari kita menetapkan pembolehubah yang benar untuk orang-orang yang telah diberi kuasa:

jika (authenticate_user ()) {
$ Memberi kuasa = true;
}

if ($ Memberi kuasa) {
termasuk "/highly/sensitive/data.php";
}

Dalam keadaan ini, pembolehubah boleh ditetapkan secara automatik. Memandangkan bahawa data boleh hanya diganti, dan sumber asal mereka tidak ditetapkan, maka sesiapa sahaja boleh menjatuhkan apa-apa ujian dan berpura-pura menjadi orang lain. Jika mahu, penyerang (atau orang hanya ingin tahu tetapi tidak berpengalaman) akan terjejas, logik kita.

Jika kita menukar nilai arahan itu, kod ini akan berfungsi dengan betul, seperti yang kita diperlukan. Tetapi pengawalan pembolehubah bukan sahaja nada yang baik dalam pengaturcaraan, tetapi juga memberi kita jaminan tertentu kestabilan skrip.

versi dipercayai kod

anda boleh mematikan atau bersenam arahan, atau menetapkan kod yang lebih kompleks untuk mencapai matlamat ini. Sebagai contoh, seperti ini:

jika (isset ($ _ SESSION [ 'nama pengguna'])) {

echo "Hello {$ _ SESSION [ 'nama pengguna']} ";

} Lain {

echo "Hello Guest
";
echo "Selamat datang pengguna!";

}

Membuat pertukaran pemain dalam kes ini, akan menjadi sukar. Tetapi masih - mungkin. Untuk melakukan ini, anda mesti berhati-hati bahawa alat tindak balas yang pesat telah disediakan. Jika anda mahu untuk memasukkan pembolehubah global dalam PHP, anda boleh menggunakan alat-alat berikut: jika kita tahu apa julat adalah nilai yang diperolehi, ia adalah mungkin untuk mendaftar skrip untuk memeriksa ini dengan perlawanan. Sudah tentu, ia juga tidak menjamin perlindungan penuh terhadap nilai-nilai penggantian. Tetapi itu terlalu banyak pilihan ketara merumitkan.

Mendapati percubaan menyamar

Mari kita lihat bagaimana anda memahami ditulis lebih awal. Dalam PHP pembolehubah global dalam fungsi yang akan diberikan di bawah, anda perlu untuk mengisytiharkan diri sendiri. Kita boleh mengatakan bahawa ini adalah satu jenis kerja rumah pada asimilasi topik pelajaran. Berikut adalah kod ini:

jika (isset ($ _ COOKIE [ 'C_COOKIE'])) {
} Elseif (isset ($ _ GET [ 'C_COOKIE']) || isset ($ _ POST [ 'C_COOKIE'])) {

mel ( "administrarot@example.com", "Perhatian, skrip dicatatkan percubaan pecah rumah dan mengganggu data", $ _SERVER [ 'REMOTE_ADDR']);
echo "Terdapat keselamatan yang patah atau cuba berbuat demikian diberitahu Pentadbir.";
keluar;

} Lain {
}
?>

Sekarang penjelasan dengannya. Sebahagiannya C_COOKIE datang kepada kami dari sumber yang boleh dipercayai. Untuk berpuas hati sepenuhnya mengikut hasil yang diharapkan, kami menyemak nilai dan memberitahu pentadbir dalam kes masalah. Jika ia tidak datang, maka tidak ada tindakan dan tidak perlu untuk membuat. Anda perlu memahami bahawa hanya melumpuhkan arahan register_globals tidak membuat kod anda adalah selamat. Oleh itu, apa-apa ubah yang menerima skrip daripada pengguna, perlu diperiksa untuk nilai yang dijangka.

kesimpulan

Di sini, secara umum, dan semua yang anda perlu tahu tentang pembolehubah global untuk berjaya dan selamat menggunakannya dalam kerja mereka. Sudah tentu, untuk mengatakan bahawa terdapat jaminan penuh bahawa tidak akan menggunakan mereka tidak boleh - penyerang sentiasa memperbaiki kaedah dan kemahiran mereka. Oleh itu, adalah wajar untuk menghadkan penggunaan maksimum pembolehubah global dalam kod. Nasib baik, struktur dan reka bentuk ciri-ciri bahasa pengaturcaraan ini boleh mencapai matlamat ini. nasib baik!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 ms.delachieve.com. Theme powered by WordPress.