


Dari input mentah ke data selamat: alur kerja muktamad untuk superglobal $ _get php
Sentiasa merawat $ \ _ mendapatkan data sebagai tidak dipercayai; 2. Periksa sama ada parameter ada menggunakan isset () atau null coalescing; 3. SANITIZE Berdasarkan penapis jenis yang dijangkakan \ _validate \ _int untuk integer, htmlspecialchars () untuk rentetan, dan penapis \ _validate \ _boolean untuk boolean; 4. Mengesahkan terhadap logik perniagaan, seperti nilai yang dibenarkan atau kekangan pelbagai; 5. Melepaskan output dengan sewajarnya untuk konteks (misalnya, htmlspecialchars () untuk HTML, penyataan yang disediakan untuk SQL); 6. Jangan lulus data sensitif melalui $ \ _ mendapatkan dan sentiasa menggunakan https; 7. Melaksanakan pemeriksaan panjang input dan mengehadkan kadar untuk mencegah penyalahgunaan; Aliran kerja yang lengkap memastikan RAW $ \ _ mendapatkan input diubah menjadi data yang selamat dan boleh dipercayai dengan menapis input, melarikan diri output, dan mengandaikan semua input berpotensi berniat jahat.
Mengendalikan input pengguna dengan selamat adalah salah satu aspek yang paling kritikal dalam pembangunan web. Antara superglobal PHP, $_GET
sering digunakan untuk mengambil data dari parameter URL -tetapi ia juga merupakan titik masuk yang sama untuk kelemahan keselamatan jika tidak dikendalikan dengan betul. Panduan ini membimbing anda melalui aliran kerja yang pasti dan nyata untuk mengubah input $_GET
mentah ke dalam data yang selamat dan boleh digunakan.

1. Sentiasa menganggap $_GET
tidak dipercayai
Peraturan pertama: Jangan merawat data $_GET
sebagai selamat secara lalai . Sebarang nilai yang datang dari URL boleh dimanipulasi oleh pengguna atau penyerang. Walaupun pautan anda dihasilkan oleh pelayan, pengguna secara manual boleh mengubah rentetan pertanyaan secara manual.
Contohnya:

https://example.com/user.php?id=5
Seseorang boleh mengubahnya menjadi:
https://example.com/user.php?id=999 'atau' 1 '=' 1
Inilah sebabnya mengapa pengesahan dan sanitisasi tidak boleh dirunding.

2. Periksa sama ada parameter ada
Sebelum mengakses parameter $_GET
, selalu sahkan ia wujud untuk mengelakkan notis indeks yang tidak ditentukan.
jika (isset ($ _ get ['id'])) { $ raw_id = $ _get ['id']; } else { // Mengendalikan parameter yang hilang mati ('id diperlukan'); }
Sebagai alternatif, gunakan NULL Coalescing untuk sintaks bersih:
$ raw_id = $ _get ['id'] ?? null;
Jika $raw_id
adalah null
, anda boleh mengarahkan, tunjukkan ralat, atau memohon lalai.
3. Sanitize berdasarkan jenis data yang dijangkakan
Sebaik sahaja anda tahu parameter wujud, sanitisasi mengikut jenis data yang anda harapkan.
Untuk bilangan bulat:
Gunakan filter_var()
dengan FILTER_SANITIZE_NUMBER_INT
. Tetapi lebih baik lagi, sahkan dengan FILTER_VALIDATE_INT
jika anda memerlukan pemeriksaan jenis ketat.
$ id = filter_var ($ _ get ['id'], filter_validate_int); jika ($ id === palsu) { mati ('id tidak sah'); }
Nota:
FILTER_SANITIZE_NUMBER_INT
tidak menjamin integer -ia menghilangkan beberapa chars yang tidak sah tetapi meninggalkan rentetan seperti123abc
sebagai123
. Gunakan pengesahan apabila jenis integriti perkara.
Untuk rentetan:
Trim Whitespace dan jalur atau melarikan diri dari watak berbahaya bergantung pada konteks.
$ carian = trim ($ _ get ['q'] ?? ''); $ search = filter_var ($ carian, filter_sanitize_string, filter_flag_strip_low);
Elakkan FILTER_SANITIZE_STRING
dalam php 8.1 (tidak ditetapkan), jadi pertimbangkan pembersihan manual:
$ carian = htmlspecialChars (trim ($ _ get ['q'] ?? ''), ent_quotes, 'utf-8');
Ini menyediakan rentetan untuk output dalam HTML, mencegah XSS.
Untuk booleans:
$ aktif = filter_var ($ _ get ['active'] ?? '', filter_validate_boolean);
Pulangan true
untuk "1", "benar", "pada", dll.
4. Mengesahkan terhadap logik perniagaan
Sanitizing tidak mencukupi. Anda mesti mengesahkan sama ada data masuk akal dalam konteks.
Sebagai contoh, jika mengharapkan nombor halaman:
$ page = filter_var ($ _ get ['page'] ?? 1, filter_validate_int, [ 'Options' => ['default' => 1, 'min_range' => 1, 'max_range' => 1000] ]);
Atau mengesahkan nilai yang dibenarkan:
$ sort = $ _get ['sort'] ?? 'Nama'; $ dibenarkan_sorts = ['nama', 'tarikh', 'harga']; $ sort = in_array ($ sort, $ dibenarkan_sorts)? $ sort: 'nama';
5. Melarikan diri dari output dengan betul
Walaupun selepas sanitasi input, output melarikan diri berdasarkan konteks:
- Output HTML :
htmlspecialchars()
- Pertanyaan SQL : Gunakan Kenyataan yang Disediakan (tidak pernah bersekutu)
- Javascript/json :
json_encode()
melarikan diri yang betul - URL :
urlencode()
untuk parameter
Contoh dengan HTML:
echo '<h1> Mencari:'. htmlspecialchars ($ carian, ent_quotes, 'utf-8'). '</h1>';
Contoh dengan PDO (SQL):
$ STMT = $ pdo-> Sediakan ("Pilih * dari pengguna di mana id =?"); $ stmt-> Execute ([$ id]);
6. Gunakan https dan elakkan data sensitif dalam $_GET
Jangan lulus data sensitif (token, kata laluan, PII) melalui rentetan pertanyaan. Mereka mendapat log masuk dalam log pelayan, sejarah penyemak imbas, dan tajuk perujuk.
Gunakan $_POST
atau sesi sebaliknya.
Juga, pastikan laman web anda menggunakan HTTPS untuk menyulitkan data dalam transit.
7. Tetapkan had dan pendikit jika diperlukan
Untuk titik akhir awam menggunakan $_GET
, pertimbangkan pembatasan kadar atau sekatan panjang input untuk mencegah penyalahgunaan.
jika (strlen ($ _ get ['q'] ?? '')> 100) { mati ('pertanyaan carian terlalu lama'); }
Aliran kerja ringkasan
Inilah aliran kerja yang lengkap:
- ✅ Semak jika ada kunci:
$_GET['key'] ?? null
- ✅ sanitize berdasarkan jenis (int, rentetan, bool)
- ✅ Mengesahkan format yang dijangkakan dan peraturan perniagaan
- ✅ melarikan diri sebelum output atau penggunaan dalam pertanyaan
- ✅ Elakkan data sensitif dalam URL
- ✅ Gunakan HTTPS dan memantau penyalahgunaan
Menggunakan $_GET
tidak perlu berisiko. Dengan aliran kerja yang disiplin -menyampaikan, mengesahkan, dan melarikan diri -anda menjadikan input mentah, berbahaya ke dalam data yang selamat dan boleh dipercayai. Kuncinya tidak pernah melangkau langkah, walaupun untuk parameter "mudah".
Pada asasnya: Input Penapis, Escape Output, dan anggap setiap nilai $_GET
keluar untuk mendapatkan anda.
Atas ialah kandungan terperinci Dari input mentah ke data selamat: alur kerja muktamad untuk superglobal $ _get php. 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;

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

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

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

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

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

filter_input()issaferthandirect$_GETaccessbecauseitvalidatesandsanitizesinput,preventingtypejuggling,injectionattacks,andunexpectedbehavior.2.Itallowsspecifyingtheinputsource,type,andvalidationrules,returningfalseornullonfailureforsafererrorhandling.
