Rumah > Artikel > pembangunan bahagian belakang > laluan pendedahan ralat golang
Golang ialah bahasa pengaturcaraan yang cekap, ringkas dan selamat, tetapi ia juga mempunyai kelemahannya sendiri, iaitu ia mudah untuk mendedahkan laluan sistem apabila mengendalikan ralat. Artikel ini akan menerangkan masalah ini dan memberikan penyelesaian.
1. Latar belakang masalah
Mekanisme pengendalian ralat Golang sangat mesra pembangun. Dalam fungsi, jika anda perlu mengembalikan ralat, anda boleh terus mengembalikan pembolehubah jenis ralat. Contohnya:
func Divide(a, b int) (float64, error) { if b == 0 { return 0, fmt.Errorf("cannot divide by zero") } return float64(a) / float64(b), nil }
Apabila menggunakan fungsi ini, anda hanya perlu menentukan sama ada pembolehubah ralat adalah sifar untuk menentukan sama ada ralat telah berlaku. Contohnya:
result, err := Divide(10, 2) if err != nil { fmt.Println(err) return } fmt.Println(result)
Kaedah pengendalian ralat ini sangat ringkas, cekap dan mudah diterima oleh semua orang. Walau bagaimanapun, maklumat tindanan ralat mengandungi maklumat laluan, yang bermaksud bahawa apabila ralat program berlaku, penyerang boleh mendapatkan maklumat sensitif seperti laluan sistem daripada maklumat ralat untuk menjalankan serangan yang lebih tepat.
2. Analisis Masalah
Mari kita lihat contoh di atas Apabila melaksanakan Divide(10, 0)
, mesej ralat adalah seperti berikut:
cannot divide by zero main.Divide /Users/xxx/Documents/go/src/error.go:3 main.main /Users/xxx/Documents/go/src/main.go:10 runtime.main /usr/local/go/src/runtime/proc.go:204 runtime.goexit /usr/local/go/src/runtime/asm_amd64.s:1371
Seperti yang anda lihat, kita bukan sahaja dapat melihat Pergi ke fail dan nombor baris di mana mesej ralat dan fungsi ralat terletak, dan anda juga boleh melihat kod pelaksanaan khusus fungsi ralat. Pendedahan maklumat salah jenis ini terlalu terperinci dan meningkatkan kebarangkalian penyerang untuk berjaya.
3. Penyelesaian
Sekarang masalah itu telah ditemui, kita perlu mencari penyelesaian. Seterusnya ialah dua penyelesaian yang mungkin:
Di Golang, kami boleh menyesuaikan jenis ralat. Takrifannya sangat mudah, anda hanya perlu melaksanakan kaedah Ralat() antara muka ralat. Contohnya:
type MyError struct { Reason string } func (m MyError) Error() string { return m.Reason } func Divide(a, b int) (float64, error) { if b == 0 { return 0, MyError{Reason: "cannot divide by zero"} } return float64(a) / float64(b), nil }
Dengan cara ini, apabila ralat program berlaku, maklumat tindanan ralat tidak lagi mengandungi maklumat sensitif seperti laluan, tetapi hanya mengandungi maklumat ralat tersuai kami. Contohnya:
cannot divide by zero
Selain jenis ralat tersuai, kami juga boleh menggunakan perpustakaan pihak ketiga sedia ada untuk menyelesaikan masalah ini. Perpustakaan yang biasa digunakan termasuk logrus, zerolog, dsb., yang boleh menyulitkan dan memproses maklumat ralat, dan boleh menghalang pendedahan maklumat sensitif seperti laluan sistem dengan berkesan.
Mengambil logrus sebagai contoh, kita hanya perlu menghantar pembolehubah jenis ralat sebagai parameter apabila menggunakan logrus untuk merekod log. Contohnya:
import ( log "github.com/sirupsen/logrus" ) func Divide(a, b int) (float64, error) { if b == 0 { return 0, fmt.Errorf("cannot divide by zero") } return float64(a) / float64(b), nil } func main() { result, err := Divide(10, 0) if err != nil { log.WithError(err).Error("divide error") return } log.Info(result) }
Dengan cara ini, apabila ralat program berlaku, hanya maklumat ralat akan diterima dalam log, dan tiada maklumat sensitif seperti laluan akan didedahkan.
4. Ringkasan
Artikel ini memperkenalkan isu keselamatan mekanisme pengendalian ralat Golang dan menyediakan dua penyelesaian. Menyesuaikan jenis ralat ialah penyelesaian biasa, dan menggunakan perpustakaan pihak ketiga boleh menyelesaikan masalah dengan lebih mudah dan cekap. Pembangun Golang mesti memberi perhatian sama ada maklumat sensitif mungkin terdedah dalam mesej ralat dan mengambil langkah pencegahan yang sepadan. Hanya dengan cara ini program kami boleh dibuat lebih selamat dan boleh dipercayai.
Atas ialah kandungan terperinci laluan pendedahan ralat golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!