Skip to content

Instantly share code, notes, and snippets.

@rizkytegar
Last active July 12, 2024 03:55
Show Gist options
  • Save rizkytegar/8779a088867912b825f739a48923e990 to your computer and use it in GitHub Desktop.
Save rizkytegar/8779a088867912b825f739a48923e990 to your computer and use it in GitHub Desktop.
<?php
function e($value, $doubleEncode = true)
{
if ($value instanceof DeferringDisplayableValue) {
$value = $value->resolveDisplayableValue();
}
if ($value instanceof Htmlable) {
return $value->toHtml();
}
if ($value instanceof BackedEnum) {
$value = $value->value;
}
return htmlspecialchars($value ?? '', ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8', $doubleEncode);
}
@rizkytegar
Copy link
Author

Kode PHP di atas adalah sebuah fungsi bernama e yang digunakan untuk memastikan bahwa data yang dimasukkan ke dalam halaman web aman dari serangan XSS (Cross-Site Scripting). Fungsi ini akan mengubah karakter khusus dalam teks menjadi entitas HTML yang aman, sehingga tidak dieksekusi sebagai kode berbahaya oleh browser. Mari kita jelaskan langkah demi langkah dengan bahasa yang mudah dipahami:

Penjelasan Fungsi e

  1. Parameter:

    • $value: Ini adalah data yang ingin kita amankan sebelum ditampilkan di halaman web.
    • $doubleEncode: Parameter opsional (dengan nilai default true) yang menentukan apakah karakter yang sudah dienkode harus dienkode lagi atau tidak.
  2. Pengecekan Tipe Data:

    • DeferringDisplayableValue: Jika $value adalah objek dari tipe ini, kita panggil metode resolveDisplayableValue() untuk mendapatkan nilai yang sebenarnya.
    • Htmlable: Jika $value adalah objek dari tipe ini, kita panggil metode toHtml() untuk mendapatkan representasi HTML dari nilai tersebut.
    • BackedEnum: Jika $value adalah objek dari tipe ini, kita ambil nilai dasarnya dengan mengakses properti value.
  3. Mengamankan Data:

    • Fungsi htmlspecialchars() digunakan untuk mengubah karakter khusus (seperti <, >, &, dan " atau ') menjadi entitas HTML yang aman. Misalnya, < diubah menjadi &lt; sehingga tidak diinterpretasikan sebagai kode HTML oleh browser.
    • Parameter ENT_QUOTES | ENT_SUBSTITUTE digunakan untuk memastikan bahwa baik tanda kutip tunggal (') maupun ganda (") diubah menjadi entitas HTML, dan karakter yang tidak valid diganti dengan karakter pengganti.
    • Pengaturan UTF-8 sebagai karakter encoding memastikan bahwa data ditangani dengan benar dalam format karakter yang umum digunakan.
    • Parameter $doubleEncode menentukan apakah karakter yang sudah dienkode harus dienkode lagi atau tidak.

Kesimpulan

Dengan kata lain, fungsi e ini memastikan bahwa data yang kita masukkan ke dalam halaman web aman dengan mengubah karakter-karakter yang dapat berbahaya menjadi bentuk yang tidak akan dieksekusi oleh browser sebagai kode. Hal ini mencegah serangan XSS, di mana penyerang mencoba menyuntikkan kode berbahaya ke dalam halaman web untuk mencuri data atau merusak situs.

Berikut adalah penjelasan ringkasnya dalam bahasa awam:

  • Fungsi e melindungi data yang akan ditampilkan di halaman web dengan mengubah karakter berbahaya menjadi aman.
  • Ini membantu mencegah serangan di mana penyerang bisa menyuntikkan kode berbahaya ke situs web.
  • Fungsi ini menangani berbagai jenis data, memastikan semuanya diubah menjadi format yang aman sebelum ditampilkan.

Jika ada bagian yang masih membingungkan atau ada pertanyaan lain, jangan ragu untuk bertanya!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment