Kami akan membahas bahaya keluaran yang tidak bersih dan memberikan cara aman untuk menampilkan keluaran yang diformat.
Tidak ada bahaya memfilter keluaran
Jika Anda hanya mendapatkan input pengguna dan kemudian menampilkannya, Anda dapat merusak halaman output Anda, misalnya seseorang dapat dengan jahat menyematkan javascript di kotak input yang mereka kirimkan:
Ini adalah komentar saya
<script Language="javascript:
alert ('Lakukan sesuatu yang buruk di sini!')">.
Dengan cara ini, meskipun penggunanya tidak jahat, beberapa pernyataan HTML Anda akan rusak, seperti tabel tiba-tiba terputus, atau halaman ditampilkan tidak lengkap.
Tampilkan hanya teks yang belum diformat
Ini adalah solusi paling sederhana, Anda cukup menampilkan informasi yang dikirimkan pengguna sebagai teks yang tidak diformat. Gunakan fungsi htmlspecialchars() untuk mengubah semua karakter menjadi pengkodean HTML.
Misalnya, <b> akan dikonversi menjadi <b>, yang memastikan bahwa tidak ada tag HTML yang tidak diharapkan yang akan dihasilkan pada waktu yang tidak tepat.
Ini adalah solusi yang baik jika pengguna Anda hanya peduli dengan konten teks yang tidak diformat. Namun akan lebih baik jika Anda memberinya kemampuan untuk memformat.
Memformat dengan Tag Markup Khusus
Tag milik pengguna untuk memformat.
Anda dapat memberikan tag khusus untuk digunakan pengguna. Misalnya, Anda dapat mengizinkan penggunaan [b]...[/b] untuk menekankan tampilan, [i].. .[/i ] Tampilan dicetak miring, cukup lakukan operasi pencarian dan penggantian sederhana: $output = str_replace("[b]", "<b>", $output);
$output = str_replace("[i]", " <i >", $output);
Lebih baik lagi, kita dapat mengizinkan pengguna mengetikkan beberapa tautan. Misalnya, pengguna akan diizinkan untuk memasukkan [link="url"]...[/link], yang akan kami ubah menjadi pernyataan <a href="">...
</a> , kita tidak bisa menggunakan pencarian sederhana Penggantian harus dilakukan menggunakan ekspresi reguler:
$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1">' , $output);
Eksekusi ereg_replace() adalah
menemukan string di mana [link="..."] muncul dan menggantinya dengan <a href="...">
[[:graph:]] berarti apa saja karakter yang tidak kosong. Silakan lihat artikel terkait untuk ekspresi reguler.
Fungsi format_output() di outputlib.php menyediakan konversi tag ini. Prinsip keseluruhannya adalah: Aliansi Manajemen Jaringan China bitsCN.com
memanggil htmlspecialchars() untuk mengubah tag HTML menjadi pengkodean khusus, menyaring tag HTML yang tidak boleh ditampilkan, dan kemudian, ubah serangkaian tag khusus kami menjadi tag HTML yang sesuai.
Silakan lihat kode sumber di bawah ini:
<?php
fungsi format_output($output) {
/********************************************* **********************************
* Mengambil string mentah ($output) dan memformatnya untuk output menggunakan spesial
* menghilangkan markup yang mirip dengan HTML
******************************************************* * *******************************/
$output = htmlspecialchars(stripslash($output));
/* paragraf baru */
$keluaran = str_replace('[p]', '<p>', $keluaran);
/* berani */
$keluaran = str_replace('[b]', '<b>', $keluaran);
$keluaran = str_replace('[/b]', '</b>', $keluaran);
/* miring */
$keluaran = str_replace('[i]', '<i>', $keluaran);
$output = str_replace('[/i]', '</i>', $output);Manajemen jaringan bitscn_com
/* diformat */
$output = str_replace('[pra]', '<pre>', $output);
$output = str_replace('[/pre]', '</pre>', $output);
/* blok menjorok ke dalam (blockquote) */
$output = str_replace('[indentasi]', '<blockquote>', $output);
$output = str_replace('[/indent]', '</blockquote>', $output);
/* jangkar */
$output = ereg_replace('[anchor="([[:graph:]]+)"]', '<a name="1"></a>', $output);
/* link, perhatikan kami mencoba mencegah javascript di link */
$output = str_replace('[link="javascript', '[link=" javascript', $output);
$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1">', $output);
$output = str_replace('[/link]', '</a>', $output);
kembali nl2br($keluaran);
}
?>
Beberapa catatan:
Ingatlah untuk mengganti tag khusus untuk menghasilkan string tag HTML setelah memanggil fungsi htmlspecialchars(), bukan sebelum panggilan ini, jika tidak, kerja keras Anda akan sia-sia setelah memanggil aliran htmlspecialchars().
Setelah
manajemen jaringan bitscn_com
diubah, kode HTML pencarian akan diganti. Misalnya, tanda kutip ganda "akan menjadi".Fungsi nl2br() mengubah karakter carriage return dan line feed menjadi tag <br>, yang juga harus setelah htmlspecialchars().
Saat mengonversi [links=""] ke <a href="">, Anda harus memastikan bahwa pengirim tidak akan memasukkan javascript. Cara sederhana untuk mengubah [link="javascript menjadi [link=" javascript, cara ini tidak akan terjadi penggantinya, cukup tampilkan kode aslinya.
outputlib.php
memanggil test.php di browser. Anda dapat melihat penggunaan format_output().
Tag HTML normal tidak dapat digunakan. Ganti dengan tag khusus berikut:
- ini adalah [b]bold[/b]
- ini [i]italik[/i]
- ini adalah [link=" http://www.phpbuilder.com"]sebuah tautan[/link]
- ini adalah [anchor="test"]sebuah jangkar, dan [link="#test"]tautan[/link] ke
paragraf jangkar [p]
[pra]Diformat sebelumnya[/pra]
[indent]Teks interlaced[/indent]
saja
, Anda bebas menambahkan lebih banyak tag sesuai kebutuhan Anda. Aliansi Manajemen Jaringan bitsCN@com
KesimpulanDiskusi
ini menyediakan metode untuk menampilkan masukan pengguna dengan aman, yang bisa digunakan di
Papan pesan, pengguna menyarankan pengumuman sistem
dalam program berikut
sistem BBS