Go Postgresql'de SQL Enjeksiyonunu Önleyin
Oct 02 2020
Go'da postgresql injection forumunu araştırıyorum ve SQL enjeksiyonunda aşağıdaki gibi bazı yararlı bilgiler buldum:
Golang kullanarak SQL'de IN araması nasıl yapılır?
Go'da "veritabanı / sql" kullanırken SQL enjeksiyon saldırılarını nasıl önleyebilirim?
ancak yine de tavsiyeye ihtiyacım var çünkü Go'daki kodum farklı türde bir kod ve kullanım alanları kullanıyor. tavsiyeye ihtiyacım olan bazı kullanım durumları / sorular böyledir
INSERT INTO a (a1,a2,a3) VALUES (%d,%d,%s)Fmt.Sprintf gibi birden çok ekleme için sorgu döngüsü kullanmak, sprinft kullanmanın kötü olduğunu biliyorum. bu döngü sorgusu için herhangi bir çözüm var mı? Ör:INSERT INTO a (a1,a2,a3) VALUES (%d,%d,%s),(%d,%d,%s),(%d,%d,%s)- Param kullanıyorsa, sorgu oluşturmak için fmt.Sprintf kullanmak güvenli mi
%dyerine%s? - Prepare deyimini ve Sorguyu kullanmak güvenlidir, ancak ya Select (kullanarak $1,$2) ve NamedQuery işlevi (adındaki yapı kullanılarak) Örn:
Select * from a where text = $1-> bu$1kasayı kullanıyor mu? ve Örn:Select * from a where text = :text-> bu NamedQuery işlevinde güvenli midir?
Lütfen tavsiyelerinize ihtiyacım var çocuklar. Teşekkür ederim!
Yanıtlar
5 KennyGrant Oct 02 2020 at 18:20
İlk olarak, genellikle db yer tutucularını kullanmayı mı tercih edersiniz? 1 dolar vb.
- Evet, SQL oluşturmak için tamsayı parametreleriyle fmt.Sprintf kullanmak güvenlidir, ancak yapabiliyorsanız kaçınmaya değer, ancak üçüncü parametreniz% s - bundan kaçının ve kullanın?
- Evet, tamsayı parametreleriyle fmt.Sprintf kullanmak güvenlidir, ancak% s veya% v çok daha risklidir ve bundan kaçınıyorum, neden buna ihtiyacın olduğunu düşünemiyorum.
- Burada yer tutucular kullanın, o zaman evet güvenlidir.
Genel kurallar:
- Varsayılan olarak yer tutucular kullanın,% d nadiren kullanılır (örneğin, IN sorgunuzda olduğu gibi)
- Herhangi bir doğrulama veya kullanımdan önce parametreleri tamsayı gibi türlere ayrıştırın
- Mümkünse string concat'den kaçının ve özellikle string parametrelerine karşı dikkatli olun
- Sütun ve tablo adları gibi şeyleri her zaman sabit kodlayın, bunları asla kullanıcı girdisinden üretmeyin (örneğin? Sort = mystringcolname)
- Her zaman aldığınız parametrelerin yalnızca o kullanıcı için yetkilendirilmiş olanlar olduğunu doğrulayın
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'