Kode program : XSS Cross Site Scripting

Golang Web – XSS (Cross Site Scripting)

XSS adalah salah satu security issue yang biasa terjadi ketika membuat website, XSS adalah celah keamanan, dimana orang bisa secara sengaja memasukkan parameter yang mengandung JavaScript agar dirender oleh halaman website kita. Biasanya tujuan dari XSS adalah mencuri cookie browser pengguna yang sedang mengakses website kita. XSS bisa menyebabkan akun pengguna kita diambil alih jika tidak ditangani dengan baik.

Auto Escape

Berbeda dengan bahasa pemrogaman lain seperi PHP, pada golang template, masalah XSS sudah diatasi secara otomatis, golang template memiliki fitur Auto Escape, dimana dia bisa mendeteksi data yang perlu ditampilkan di template, jika mengandung tag-tag html atau script, secara otomatis akan di escape.

Untuk mencobanya, silakan buat template baru dengan nama post.gohtml dan isikan kode program berikut

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{.Title}}</title>
</head>
<body>
    <h1>{{.Title}}</h1>
    {{.Body}}
</body>
</html>

Selanjutnya buat file baru untuk kode program handler dan unit test nya xss_test.go dan masukkan baris kode berikut ini

package belajar_golang_web

import (
	"fmt"
	"io"
	"net/http"
	"net/http/httptest"
	"testing"
)

func TemplateAutoEscape(writer http.ResponseWriter, request *http.Request) {
	myTemplates.ExecuteTemplate(writer, "post.gohtml", map[string]interface{}{
		"Title": "Template Auto Escape",
		"Body":  "<p>Ini adalah Body</p>",
	})
}

func TestTemplateAutoEscape(t *testing.T) {
	request := httptest.NewRequest(http.MethodGet, "http://localhost:8080", nil)
	recorder := httptest.NewRecorder()

	TemplateAutoEscape(recorder, request)

	body, _ := io.ReadAll(recorder.Result().Body)
	fmt.Println(string(body))
}
Kode program : XSS Cross Site Scripting
Kode program : XSS Cross Site Scripting

Coba jalankan baris kode diatas, dan perhatikan hasil output dari tag <p> nya sudah di escape

Output kode program XSS
Output kode program XSS

Mematikan auto escape

Jika kita mau, auto escape juga bisa dimatikan, namun kita perlu memberitahu template secara eksplisit ketika kita menambahkan template data. Kita bisa menggunakan sebperti berikut

  • template.HTML, jika ini adalah data HTML
  • template.CSS, jika ini adalah data CSS
  • template.JS, jika ini adalah data Javascript
package belajar_golang_web

import (
	"fmt"
	"html/template"
	"io"
	"net/http"
	"net/http/httptest"
	"testing"
)

func TemplateAutoDisabled(writer http.ResponseWriter, request *http.Request) {
	myTemplates.ExecuteTemplate(writer, "post.gohtml", map[string]interface{}{
		"Title": "Template Auto Escape",
		"Body":  template.HTML("<p>Ini adalah Body</p>"),
	})
}

func TestTemplateAutoEscapeDisabled(t *testing.T) {
	request := httptest.NewRequest(http.MethodGet, "http://localhost:8080", nil)
	recorder := httptest.NewRecorder()

	TemplateAutoDisabled(recorder, request)

	body, _ := io.ReadAll(recorder.Result().Body)
	fmt.Println(string(body))
}
Kode program : Disable auto escape
Kode program : Disable auto escape

Masalah XSS (Cross Site Scripting)

Saat kita mematikan fitur auto escape, bisa dipastikan masalah XSS akan mengintai kita, jadi pastikan kita benar-benar percaya terhadap sumber data yang kita matikan auto escapenya.

Penutup

Pada artikel kali ini kita telah belajar tentang XSS Cross Site Scripting pada golang web. Dan pada artikel selanjutnya saya akan membahas redirect pada golang web.

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar

About Me

About Me

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam.

Social Profiles

Facebook