Lewati ke konten

SecureJSON

SecureJSON melindungi dari kelas kerentanan yang dikenal sebagai JSON hijacking. Di browser lama (terutama Internet Explorer 9 dan sebelumnya), halaman berbahaya dapat menyertakan tag <script> yang mengarah ke endpoint JSON API korban. Jika endpoint tersebut mengembalikan array JSON tingkat atas (mis., ["secret","data"]), browser akan mengeksekusinya sebagai JavaScript. Dengan menimpa konstruktor Array, penyerang dapat mencegat nilai yang di-parse dan membocorkan data sensitif ke server pihak ketiga.

Bagaimana SecureJSON mencegah ini:

Ketika data respons adalah array JSON, SecureJSON menambahkan prefix yang tidak dapat di-parse — secara default while(1); — ke body respons. Ini menyebabkan mesin JavaScript browser masuk ke loop tak terbatas jika respons dimuat melalui tag <script>, mencegah data diakses. Konsumen API yang sah (menggunakan fetch, XMLHttpRequest, atau klien HTTP apa pun) membaca body respons mentah dan cukup menghapus prefix sebelum mem-parse.

API Google menggunakan teknik serupa dengan )]}'\n, dan Facebook menggunakan for(;;);. Anda dapat menyesuaikan prefix dengan router.SecureJsonPrefix().

package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
// You can also use your own secure json prefix
// router.SecureJsonPrefix(")]}',\n")
router.GET("/someJSON", func(c *gin.Context) {
names := []string{"lena", "austin", "foo"}
// Will output : while(1);["lena","austin","foo"]
c.SecureJSON(http.StatusOK, names)
})
// Listen and serve on 0.0.0.0:8080
router.Run(":8080")
}