


PHP moden melarikan diri corak untuk kod selamat dan bersih
Jul 26, 2025 am 09:51 AMSentiasa melarikan diri output menggunakan kaedah khusus konteks: htmlspecialchars () untuk kandungan dan atribut html, rawurlencode () untuk url, dan json_encode () dengan json_hex_tag, json_hex_apos, json_hex_quot, dan json_unescaped. 2. Gunakan enjin templating seperti Twig, Laravel Blade, atau Templat PHP Symfony yang auto-escape secara lalai, meminimumkan kesilapan manusia. 3. Jangan sekali -kali menyuntik pembolehubah PHP terus ke JavaScript; Sentiasa gunakan json_encode () yang ditandakan dengan betul untuk mengelakkan XSS. 4. Sanitize input untuk integriti data tetapi tidak pernah bergantung padanya untuk keselamatan output, kerana konteks yang berbeza memerlukan melarikan diri yang berbeza. 5. Melaksanakan tajuk Dasar Keselamatan Kandungan (CSP) sebagai langkah pertahanan-mendalam untuk mengurangkan risiko XSS walaupun melarikan diri dilangkau. 6. Buat atau gunakan fungsi pembantu terbina dalam seperti E () untuk menyelaraskan output selamat melarikan diri. Melarikan diri dalam PHP adalah selamat dan boleh diurus apabila anda melarikan diri pada output, gunakan templat moden, mengendalikan JavaScript dengan selamat, dan pertahanan lapisan seperti CSP.
Apabila menulis aplikasi PHP moden, pengendalian output dengan selamat tidak boleh dirunding. Tidak dapat melarikan diri membawa kepada kelemahan keselamatan-terutamanya skrip lintas tapak (XSS) -dan, html yang rosak. Berita baiknya ialah ekosistem PHP hari ini menawarkan corak melarikan diri yang bersih, konsisten, dan selamat. Inilah caranya untuk melakukannya pada tahun 2024 dan seterusnya.

1. Sentiasa melepaskan output berdasarkan konteks
Peraturan Emas: Melarikan diri data pada titik output , bukan input. Dan secara penting, kaedah yang melarikan diri bergantung pada di mana dan bagaimana anda mengeluarkan data .
- Kandungan badan html →
htmlspecialchars()
- Nilai atribut html →
htmlspecialchars()
dengan memetik yang betul - JavaScript dalam Templat → Json-Encode dengan
json_encode()
- Parameter URL →
rawurlencode()
- CSS atau Konteks JS mentah → Elakkan penyisipan dinamik apabila mungkin; Gunakan alternatif yang lebih selamat
Contoh:

// output html selamat echo '<p>'. htmlspecialchars ($ usercontent, ent_quotes, 'utf-8'). '</p>'; // atribut selamat echo '<input value = "'. htmlspecialchars ($ nilai, ent_quotes, 'utf-8'). '">'; // parameter url selamat echo '<a href = "/profil? name ='. Rawurlencode ($ name). '"> Profil </a>';
?? Jangan sekali -kali bergantung pada
htmlentities()
melainkan jika anda mempunyai keperluan charset warisan.htmlspecialchars()
lebih cepat dan mencukupi untuk kebanyakan kes.
2. Gunakan templat dengan melarikan diri terbina dalam (disyorkan)
Projek PHP moden harus menggunakan enjin templating yang auto-escape secara lalai. Ini secara drastik mengurangkan kesilapan manusia.

Ranting (pilihan paling popular)
<!-Auto-Ecaped secara lalai-> <p> {{user.name}} </p> <!-Tandakan dengan selamat hanya apabila dipercayai-> <div> {{htmlcontent | raw}} </div>
Bilah Laravel
<!-melarikan diri secara lalai-> <p> {{$ name}} </p> <!-Uneachaped (gunakan dengan berhati-hati)-> <div> {!! $ amanahhtml !!} </div>
Templat PHP Symfony (dengan komponen escaper)
<? php echo $ this-> Escape ('html', $ name)?>
? Benefit: Anda tidak perlu ingat untuk melarikan diri dari setiap echo -estaping adalah tingkah laku lalai.
3. Melarikan diri untuk JavaScript dengan selamat
Suntikan data PHP ke JavaScript adalah vektor XSS biasa. Jangan sekali -kali melakukan ini:
<script> var username = "<? = $ username?>"; // Berbahaya! </script>
? Sebaliknya, gunakan json_encode()
dengan bendera yang sesuai:
<script> var userData = <? = json_encode ($ data, json_hex_tag | json_hex_apos | json_hex_quot | json_unescaped_unicode)?>; </script>
Mengapa ini berfungsi:
-
JSON_HEX_TAG
,JSON_HEX_APOS
,JSON_HEX_QUOT
: mencegah</script>
,'
, dan"
dari memecahkan konteks -
JSON_UNESCAPED_UNICODE
: menyimpan UTF-8 boleh dibaca -
json_encode()
output literals JavaScript yang sah, disebut dengan betul
4. Mengesahkan dan membersihkan input, tetapi jangan bergantung padanya untuk keselamatan output
Input sanitasi (contohnya, tag pelucutan dengan strip_tags()
atau filter_var()
) berguna untuk integriti data -tetapi ia bukan pengganti output yang melarikan diri .
Contoh:
// baik: sanitasi input $ email = filter_var ($ _ post ['e -mel'], filter_sanitize_email); // masih mesti melepaskan output Echo 'E -mel:'. htmlspecialchars ($ e-mel, ent_quotes, 'utf-8');
Kenapa? Data yang sama mungkin output dalam konteks yang berbeza (HTML, JSON, E -mel, dan lain -lain), masing -masing memerlukan melarikan diri yang berbeza.
5. Gunakan Dasar Keselamatan Kandungan (CSP) sebagai lapisan pertahanan-mendalam
Walaupun dengan melarikan diri yang sempurna, XSS boleh tergelincir. Tambahkan tajuk CSP yang kuat untuk mengurangkan kesan:
header ("Kandungan-keselamatan-dasar: lalai-src 'diri'; skrip-src 'diri' 'tidak selamat-inline'");
Dari masa ke masa, menghapuskan 'unsafe-inline'
dan gunakan nonces atau hash untuk skrip yang dibenarkan.
CSP tidak akan menggantikan melarikan diri, tetapi ia boleh menghalang seluruh kelas serangan XSS apabila melarikan diri gagal.
Bonus: Fungsi penolong untuk kod bersih
Buat pembantu yang boleh diguna semula untuk mengelakkan mengulangi htmlspecialchars
di mana -mana:
fungsi e (string $ teks): String { kembali htmlspecialchars ($ teks, ent_quotes, 'utf-8'); } // Penggunaan echo '<p>'. e ($ nama). '</p>';
Dalam rangka kerja moden, pembantu seperti itu sering wujud dari kotak.
Melarikan diri di PHP tidak perlu membosankan atau berisiko. Dengan menggunakan konteks yang melarikan diri, enjin templating moden, dan strategi pertahanan-mendalam seperti CSP, anda boleh menulis kod yang selamat dan boleh dibaca.
Pada asasnya: melarikan diri pada output, gunakan templat, encode untuk JS, dan tidak pernah mempercayai suntikan mentah.
Atas ialah kandungan terperinci PHP moden melarikan diri corak untuk kod selamat dan bersih. 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)

Topik panas

preg_quote () escapesregex-specialcharacters, termasukbackslashesandthedelimiter, totreatthemasliterals; 2.avoiddouble-escapingbypassingrawstrings (mis., 'c: \ path')

Heredoc mengendalikan interpolasi yang berubah -ubah dan urutan melarikan diri asas seperti \ n, \ t, \\, \ $, tetapi tidak memproses \ "atau \ ', sementara sekarang tidak melakukan pembolehubah dan mana -mana pemprosesan melarikan diri. disimpan seperti yang berlaku pada masa ini;

Swasnakan yang boleh diketepikanContext-SpecificMethods: htmlspecialchars () forhtmlContentAndAttributes, rawurlencode () forurls, andjson_en kod () withjson_hex_tag, json_hex_apos, json_hex_quot, andjson_unescaped_unicodeforjavascript.2.usetemplatingenginesliketwig, Lara

Inbash, singlequotestreatallcharactersliterallywhiledoublequotesallowvariableexpanspanmedlimitedeCaping; inpythonandjavascript, kedua

TomasterbackslashesinphEgEx, fahamithattwolayersofparsingoccur: phppprocessesescapeSeseFiCsfirst, thentheregexenginedoes;

AddSlashes () harus dielakkan untuk melarikan diri SQL kerana ia tidak selamat dan tidak dilindungi dari suntikan SQL; HTMLSPecialChars () digunakan untuk output HTML untuk mencegah serangan XSS; mysqli_real_escape_string () boleh digunakan untuk melarikan diri rentetan dalam pertanyaan MySQL, tetapi hanya pilihan suboptimal apabila pernyataan pra -proses tidak dapat digunakan. 1. AddSlashes () sudah lapuk dan tidak selamat dan tidak boleh digunakan untuk melarikan diri SQL dalam aplikasi moden; 2. HtmlSpecialChars () hendaklah digunakan apabila mengeluarkan input pengguna dan mengeluarkan ke HTML untuk mengelakkan XSS; 3. Mysqli_real_escape_string (

Perlindungan suntikan SQL tidak boleh bergantung pada addSlashes () kerana ia tidak memproses pengekodan multi-bait dan hanya melarikan diri dari aksara terhingga, yang mudah dilangkau; Kenyataan preprocessing (seperti pertanyaan parameter untuk PDO atau MySQLI) harus digunakan untuk memisahkan data dari logik SQL untuk memastikan bahawa input tidak dihuraikan ke dalam kod; Sekiranya pra-proses tidak dapat digunakan, fungsi melarikan diri khusus pangkalan data (seperti real_escape_string dan menetapkan set aksara yang betul), pengenalpastian putih atau petikan tanda petikan, pemutus input integer dan kaedah lain harus digunakan mengikut konteks untuk mencapai pertahanan hierarki.

Backslashesgomissinginphpbecausetheyaretreatedasescapecharactersindouble-quotedstrings, sotofixthis: 1.usesinglequotesforl IteralPathsLike'c: \ Users \ John \ Documents ', 2.OrdoBleTheBacksLashesindoublequotesas "C: \\ Users \\\\ John \\ Documents", 3.Prefer
