


Perangkap biasa dan anti-corak ketika bekerja dengan superglobal $ _get
Sentiasa mengesahkan dan membersihkan $ _get input menggunakan filter_input () atau filter_var () dan melarikan diri output dengan htmlspecialchars () untuk mencegah XSS. 2. Periksa jika parameter wujud menggunakan isset () atau pengendali comel null (??) untuk mengelakkan amaran. 3. Jangan lulus data sensitif atau besar melalui rentetan pertanyaan; Gunakan $ _POST atau sesi sebaliknya. 4. Elakkan terlalu banyak $ _get untuk pengurusan negeri; Gunakan sesi atau pangkalan data untuk menyimpan keadaan kompleks. 5. Sentiasa url-encode parameter dinamik dengan urlencode () apabila menjana pautan. 6. Elakkan mendedahkan logik dalaman atau ID; Gunakan UUIDs atau Obfuscation dan menguatkuasakan kawalan akses. 7. Whitelist membenarkan nilai untuk menyusun dan menapis untuk mencegah suntikan dan penyalahgunaan. Merawat semua data $ _get sebagai tidak dipercayai dan memohon pengesahan yang konsisten memastikan keselamatan, penyelenggaraan, dan pengalaman pengguna yang lebih baik.
Bekerja dengan superglobal $_GET
dalam PHP adalah salah satu cara yang paling biasa untuk mendapatkan data dari rentetan pertanyaan URL. Walaupun mudah digunakan, pengendalian yang tidak betul boleh membawa kepada kelemahan keselamatan, pepijat, dan pengalaman pengguna yang lemah. Berikut adalah perangkap biasa dan pemaju anti-corak harus mengelakkan apabila menggunakan $_GET
.

1. Tidak mengesahkan atau membasmi input
Salah satu kesilapan yang paling kerap adalah menggunakan nilai $_GET
tanpa pengesahan atau sanitisasi.
// ❌ anti-corak Echo "Hello,". $ _Get ['name']; // ✅ Pendekatan yang lebih baik $ name = filter_input (input_get, 'name', filter_sanitize_string); jika ($ nama) { Echo "Hello,". htmlspecialchars ($ nama); }
Mengapa ia berbahaya:
Input yang tidak berasaskan boleh menyebabkan serangan skrip lintas tapak (XSS) . Sentiasa menganggap $_GET
data tidak dipercayai.

Amalan Terbaik:
- Gunakan
filter_input()
ataufilter_var()
untuk pengesahan. - Escape Output dengan
htmlspecialchars()
apabila memaparkan dalam html. - Tentukan jenis data yang dijangkakan (contohnya, integer, e -mel) dan sahkan dengan sewajarnya.
2. Dengan mengandaikan parameter selalu ada
Mengakses kekunci $_GET
tanpa memeriksa sama ada ia ditetapkan boleh menyebabkan amaran PHP.

// ❌ anti-corak $ Page = $ _get ['Page']; // ✅ Pendekatan yang betul $ Page = $ _get ['Page'] ?? 1; // lalai hingga 1 // atau $ page = isset ($ _ get ['page'])? (int) $ _ get ['Page']: 1;
Petua: Gunakan pengendali coalescing null ( ??
) untuk sandaran bersih. Sentiasa berikan lalai untuk parameter pilihan.
3. Menggunakan $_GET
untuk data sensitif atau besar
Lulus data sensitif (seperti kata laluan, token, atau maklumat peribadi) melalui rentetan pertanyaan adalah kesilapan yang serius.
// ❌ Jangan pernah melakukan ini // https://example.com/delete?user_id=5&token=abc123 // ✅ Gunakan permintaan dan sesi pos
Kenapa buruk:
- Rentetan pertanyaan muncul dalam log pelayan, sejarah penyemak imbas, dan tajuk perujuk.
- URL boleh dikongsi secara tidak sengaja.
- Panjang terhad (sekatan panjang URL berbeza -beza mengikut penyemak imbas/pelayan).
Garis panduan: Gunakan $_POST
atau sesi untuk muatan sensitif atau besar.
4. terlalu banyak $_GET
untuk pengurusan negeri
Bergantung pada rentetan pertanyaan yang panjang atau kompleks untuk menguruskan keadaan aplikasi menjadikan URL tidak berat sebelah dan rapuh.
// ❌ overcompicate //? Langkah = 3 & mod = edit & form = profil & tab = pemberitahuan & pengguna = 123 & lang = en & tema = gelap
Masalah:
- Sukar untuk mengekalkan dan debug.
- Pecah mudah jika parameter hilang atau cacat.
- UX dan SEO yang lemah.
Alternatif yang lebih baik:
- Gunakan sesi untuk menyimpan keadaan pelbagai langkah.
- Simpan konfigurasi dalam pangkalan data atau keutamaan pengguna.
- Pastikan rentetan pertanyaan minimum dan semantik (misalnya ,
?page=2
,?search=php
).
5. Parameter Dinamik Pengekodan URL
Apabila menjana URL dengan nilai $_GET
dinamik, gagal menyandikannya boleh memecahkan pautan atau memperkenalkan isu keselamatan.
// ❌ Berbahaya echo "<a href = 'search.php? q = $ query'> carian </a>"; // ✅ Selamat echo '<a href = "search.php? q ='. urlencode ($ query). '"> cari </a>';
Sentiasa gunakan urlencode()
apabila memasukkan data pengguna ke dalam URL.
6. Mengekspos logik dalaman atau ID
Menggunakan ID pangkalan data mentah atau pengenal dalaman dalam URL boleh mendedahkan struktur sistem anda.
// ❌ diramal dan bocor //? id = 12345
Pendekatan yang lebih baik:
- Gunakan UUIDs atau ID Obfuscated.
- Melaksanakan kawalan akses - hanya kerana ID berada di URL tidak bermakna pengguna harus melihatnya.
- Mengesahkan kebenaran pengguna pada setiap permintaan.
7. Membenarkan penapisan atau penyortiran yang tidak terhad
Membiarkan Parameter $_GET
secara langsung mengawal pertanyaan SQL tanpa senarai putih berisiko.
// ❌ terdedah kepada suntikan atau penyalahgunaan $ sort = $ _get ['sort']; $ query = "Pilih * dari pesanan pengguna dengan $ sort"; // ✅ Gunakan senarai putih $ dibenarkan_sorts = ['nama', 'e -mel', 'created_at']; $ sort = in_array ($ _ get ['sort'], $ dibenarkan_sorts)? $ _Get ['sort']: 'name';
Sentiasa mengesahkan bahagian pertanyaan dinamik terhadap senarai nilai yang boleh diterima.
Ringkasan Amalan Terbaik
- ✅ Sentiasa mengesahkan dan membersihkan
$_GET
input. - ✅ Gunakan
filter_input()
danhtmlspecialchars()
. - ✅ Periksa sama ada kunci wujud menggunakan
isset()
atau??
. - ✅ Elakkan data sensitif dalam rentetan pertanyaan.
- ✅ Pastikan URL bersih dan bermakna.
- ✅ Nilai encod url dimasukkan ke dalam pautan.
- ✅ Melaksanakan kawalan akses walaupun untuk data "tidak kelihatan".
- ✅ Whitelist membenarkan nilai untuk menyusun, penapisan, dll.
Menggunakan $_GET
dengan selamat tidak sukar - ia hanya memerlukan merawat semua input pengguna sebagai tidak dipercayai dan menggunakan pengesahan yang konsisten. Tabiat ini melindungi aplikasi anda dan meningkatkan penyelenggaraan.
Atas ialah kandungan terperinci Perangkap biasa dan anti-corak ketika bekerja dengan superglobal $ _get. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Untuk mengendalikan parameter $ _get yang hilang atau cacat secara berkesan dalam PHP, input mesti disahkan dan dibersihkan terlebih dahulu, dengan syarat nilai lalai, data yang diakses menggunakan kaedah selamat jenis, dan gagal dengan anggun dengan cara yang mesra pengguna. 1. Sentiasa periksa sama ada parameter wujud dan sahkan jenis dan format mereka, seperti menggunakan isset () dan filter_input () untuk memastikan bahawa ID adalah integer positif; 2. Tetapkan nilai lalai yang selamat untuk parameter pilihan, seperti medan paging atau sorting untuk mengelakkan kemalangan akibat hilang; 3. Elakkan akses langsung ke $ _get, bacaan selamat harus dilakukan dengan mengemas fungsi seperti get_param () dan get_int () digabungkan dengan pengendali gabungan null; 4. Apabila parameter tidak sah, API harus mengembalikan 400 kod status dan kesilapan JSON

$ _GetParameterscanfragmentcacheentries, reducecachehitrates, dancausecdncachinginefficiencyesbecauseeachuniqueparametercombinationcreatesadistonturl;

Swasta dan SwastaandeSanitize $ _GeInputusing filter_input () atau filter_var () andesescapeOutputWithHtmlSpecialChars () topvrachtxss.2.Check jika parameter -pouner. USS

Sentiasa $ \ _ getDataAsUntrusted; 2.CheckifTheParameterExistSusingSet () ornullcoalescing; 3.SanitizeBasedExpectedType -useFil Ter \ _validate \ _intForIntegers, htmlspecialchars () forstrings, andfilter \ _validate \ _booleanforbooleans; 4.validateAgaStBusinessl

Gunakan operator nullcoalescing (??) untuk memudahkan akses selamat ke parameter $ _get. 1. Gunakan ?? bukannya isset () memeriksa, seperti $ page = (int) ($ _ get ['page'] ?? 1); 2. Jenis penukaran, pembersihan rentetan dan pengesahan nilai masih diperlukan, seperti (int), trim (), in_array (), dan sebagainya; 3. Nilai lalai berbilang boleh ditetapkan dalam rantai, seperti $ query = $ _ get ['carian'] ?? $ _ get ['q'] ?? $ _ get ['s'] ?? '', tetapi terlalu banyak harus dielakkan; 4. Perhatikan bahawa fungsi itu tidak akan malas untuk menilai, dan ia perlu dilaksanakan ditangguhkan oleh pembolehubah atau penutupan; 5. Menggabungkan Keselamatan Jenis dan Pengesahan Input

Phpautomaticallyparsesarray-likequerystringsintostructured $ _getArrays, enablingComplexDatahAndling.1.use? Colors [] = Red & Colors [] = BlueTogeTindExedArrays.2.use? User [name]

Gunakan $ \ _ getTocaptureFilterandNavigationStateFreurlQuerystring, enableBookmarkableLinksandPreservingContextacrossResResandNavigation.2.BuildurlSdynamiciSingAgiceLperfunctionThunctionThatMergesexisting,

ThheshiftFromRaw $ _getTostructureRequestobjectsimprovestestabilitybyallowingMockRequestsinsteadofrelyingonglobalstate.2.itenhancesconsistencyandsafetythroughbuiltbuilt-inmethodsfordefaults, sanitization, andvalidation.3
