SQL Enjeksiyonu (SQLi)
Selamlar,
Yazıyı okumak için zaman ayırdığınız için teşekkür ederiz - yukarı! Bunu takdir ediyorum!
Bugünün içeriği 'SQL Injection'ı anlamak üzerine olacak.
İçerik tamamen kişisel deneyimlerime ve bilgilerime, Uygulama Sek ve Yazılım Geliştirme alanındaki inanılmaz insanlarla etkileşimlerime ve çok sayıda okuma ve güvenli kodlamaya dayanmaktadır.
Bu yazıda, içeriği temel olarak basitleştirmeye çalışacağım. Okuyucuların kendi düşünceleri ve yorumları olacağından eminim ve her türlü geri bildirim ve tartışmayı memnuniyetle karşılıyorum.
Görüşler / Yorumlar / Fikirler bana aittir ve eski / şimdiki işverenime ait değildir.
Birlikte öğrenelim!
SQL Enjeksiyonu nedir?
Kötü niyetli bir aktörün, bir veritabanındaki verilere erişmek ve verileri işlemek için savunmasız bir giriş alanına kötü amaçlı SQL kodu eklediği bir tür uygulama güvenlik saldırısı. SQLi, saldırganın bir veritabanındaki verileri görüntülemesine / değiştirmesine / silmesine izin verir.
SQLi'yi nasıl düzeltebilirim?
SQL sorgularını ve giriş değerlerini birleştirmeyin.
Her zaman giriş doğrulaması yapın ( kişisel görüşüm, aslında pek çok kötü niyetli imzayı engeller ) ve ardından SQLi'yi düzeltmek için aşağıdaki stratejilerden birini izleyin -
- Parametreli Sorgular: Giriş değerlerini sql ifadelerine parametre olarak iletin. Bu, parametreli sorgular kullanılarak elde edilir. Bu, kötü niyetli girdilerin SQL kodu olarak yürütülmesini engeller.
- Saklı Prosedürler: Kod içinde SQL sql sorguları olmaması ve bunları saklı prosedürler aracılığıyla bir DB'ye taşımak çok daha iyidir.
Parametreli Sorgular:
Alttaki kod örneğinde, name ve pass, 'setString()' aracılığıyla sql ifadesine parametre olarak iletilir. Bir PreparedStatement yöntemidir.
....
// simple basic example
// assume name and pass are obtained from some input
// conn is the connection
String sqlStatement = "SELECT * FROM userdetails WHERE name = ? AND pass = ?";
PreparedStatement stmt = conn.prepareStatement(sqlStatement);
stmt.setString(1, name);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
// carry on with your logic
....
Alttaki kod örneğinde, 'ad' ve 'konum', 'setString()' yoluyla 'userDetails' saklı yordamına parametre olarak geçirilir. Bu bir CallableStatement yöntemidir. Çıktı, 'registerOutParameter' kullanan 'output' parametresi aracılığıyla alınır. CallableStatement'ın başka bir yöntemidir.
....
// simple basic example
// Assume name and location are obtained from some input
// conn is the connection
CallableStatement stmt = conn.prepareCall("{ call userdetails(?,?,?) }");
stmt.setString(1, name);
stmt.setString(2, location);
stmt.registerOutParameter(3, java.sql.Types.INTEGER);
stmt.execute();
int output = stmt.getInt(3);
// carry on with your logic...
....
Her zaman içeriği geliştirmeye ve daha iyi olmaya çalıştığım için Yorumlar / Geribildirimler her zaman memnuniyetle karşılanır.
Kaynak yazma: App Sec'teki kendi deneyimim, içeriği birden çok çevrimiçi web sitesinden, Open AI, DALL-E, Geliştirici ve NLP araçlarından başka sözcüklerle ifade etme.
Teşekkür ederim!
Beni LinkedIn'de ekle

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































