Apakah ada pembantu Magento bawaan untuk menghindari data template yang dihasilkan untuk mencegah XSS?
Atau haruskah saya menggunakan PHP htmlspecialchars
atau htmlentities
fungsinya saja?
Apakah ada pembantu Magento bawaan untuk menghindari data template yang dihasilkan untuk mencegah XSS?
Atau haruskah saya menggunakan PHP htmlspecialchars
atau htmlentities
fungsinya saja?
Jawaban:
Ada beberapa metode pembantu tergantung pada konteksnya. Semua didefinisikan
Mage_Core_Helper_Abstract
tetapi juga diMage_Core_Block_Abstract
, sehingga Anda dapat menggunakannya dengan$this->...()
di setiap templat:escapeHtml()
: Ini sebenarnya memanfaatkanhtmlspecialchars
dengan parameter yang disarankan untuk keluar dari HTML:$result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);
- Anda juga dapat menentukan daftar putih dari tag yang diizinkan dan memanggil metode pada array untuk keluar dari semua elemen sekaligus. Gunakan ini untuk teks inline apa pun.quoteEscape()
: versi yang lebih sederhana tanpa pemrosesan daftar putih dan array tetapi yang ini lolos dari tanda kutip tunggal serta tanda kutip ganda, berguna untuk teks dalam atribut HTML .jsQuoteEscape()
: yang satu ini lolos dari tanda kutip tunggal dengan garis miring terbalik. Ini digunakan untuk menghindari string literal dalam JavaScript. Tapi ini tidak aman . (Contoh oleh @Xorax:)'test\\\'+alert("powned");//'
. Diperlukan pelarian backslash tambahan. GunakanquoteEscape()
sebagai gantinya!escapeUrl()
: Saya tidak tahu mengapa metode ini ada, itu bukan string URL encoding, itu hanya biasa sajahtmlspecialchars()
tanpa parameter apa pun. Jangan gunakan itu. Pernah.Pada catatan terkait, ada
urlEncode()
yang juga tidak menerapkan pengodean URL, tetapi base64 sebagai gantinya ... Jangan menggunakannya, jika Anda tidak tahu persis apa yang Anda butuhkan.Ya, penamaannya tidak konsisten. Setelah semua nama-nama metode mengikuti skema
somethingEscape()
tetapi kemudian seseorang memutuskan untuk mundurhtmlEscape()
danurlEscape()
mendukung metode baru dan lupa tentangquoteEscape()
danjsQuoteEscape()
.sumber
Cukup terjemahkan
Anda harus selalu menggunakan fungsi terjemahan standar
Dalam contoh blok
Di tempat lain
Dan gunakan dengan cara yang sama Anda gunakan
sprintf
dengan PHPMisalnya.
Atau menghindarinya
Dalam contoh blok
Di tempat lain
Menggunakan
Mage/Core/Helper/Abstract.php
Misalnya.
sumber
Mage_Core_Block_Abstract::htmlEscape()
sudah tidak digunakan pada Magento v 1.4.0.0-rc1 danMage_Core_Block_Abstract::escapeHtml()
harus digunakan sebagai gantinya.$this->__('Hello %s', '<script>alert("XSS!")</script>')
.Kelas
Mage_Core_Block_Abstract
danMage_Core_Helper_Abstract
keduanya menggunakan fungsi yang samaMage_Core_Helper_Abstract::escapeHtml
dan implementasinya internaly menggunakan fungsi PHP htmlspecialchars selain menerapkan beberapa logika tambahan untuk array dengan konten HTML.Fungsi ini dapat diakses di semua blok dan kelas pembantu melalui $ this dan karena fungsi ini bersifat publik, Anda dapat menggunakannya melalui Mage :: helper ('core'), atau kelas pembantu lainnya, di tempat lain.
sumber
Untuk konversi Spanyol:
sumber