Arama butonu
Bu konudaki kullanıcılar: 1 misafir
8
Cevap
487
Tıklama
0
Öne Çıkarma
SQL Injection'dan nasıl korunabilirim?
W
8 yıl
Yüzbaşı
Konu Sahibi

Merhaba,

arkadaşlar ben sql injection'dan korunmak istiyorum. Forumdaki bazı sorulara baktım. Parametre kullan diyorlar. Ama parametre derkan bir kod örneği verebilecek var mı?

HELP PLEASSE!!!

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



A
8 yıl
Yarbay

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters(v=vs.110).aspx
 
private static void UpdateDemographics(Int32 customerID,
string demoXml, string connectionString)
{
// Update the demographics for a store, which is stored
// in an xml column.
string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
+ "WHERE CustomerID = @ID;";

using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;

// Use AddWithValue to assign Demographics.
// SQL Server will implicitly convert strings into XML.
command.Parameters.AddWithValue("@demographics", demoXml);

try
{
connection.Open();
Int32 rowsAffected = command.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}


Bu mesaja 1 cevap geldi.
W
8 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: alpmirza

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters(v=vs.110).aspx
 
private static void UpdateDemographics(Int32 customerID,
string demoXml, string connectionString)
{
// Update the demographics for a store, which is stored
// in an xml column.
string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
+ "WHERE CustomerID = @ID;";

using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;

// Use AddWithValue to assign Demographics.
// SQL Server will implicitly convert strings into XML.
command.Parameters.AddWithValue("@demographics", demoXml);

try
{
connection.Open();
Int32 rowsAffected = command.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}


Php için yok mu?



E
8 yıl
Yüzbaşı

Sanırım store procedure kullanmanızı tavsiye etmişler. Yani sql sorgularını kod tarafında değil de mssql tarafında parametre alan sorgular şeklinde yazıyorsunuz. Kod tarafında ise sizin yazdığınız sorgu görünmüyor sadece parametreler görünür. Bildiğim kadarıyla daha hızlı ve güvenli bir yöntem. Tecrübeli arkadaşlar daha fazla bilgi verebilir.



< Bu ileti mobil sürüm kullanılarak atıldı >

W
8 yıl
Yüzbaşı
Konu Sahibi

Merhaba,
http://php.net/manual/tr/function.filter-input.phphttps://www.w3schools.com/php/func_filter_input.asphttp://php.net/manual/tr/function.filter-input-array.phphttps://www.w3schools.com/php/func_filter_input_array.asp

bu linkler sayesinde sql injectiona karşı korunabilir miyim (tamamen) ?

Lütfen yardım edin.

Cevaplarınız için şimdiden çok teşekkür ederim.

İyi günler dileğiyle.

@alpmirza @el-harezmi_0





< Bu mesaj bu kişi tarafından değiştirildi webandyazilimprofesor -- 23 Ağustos 2017; 20:21:3 >
Bu mesaja 1 cevap geldi.
E
8 yıl
Yüzbaşı

Hocam alıntı yaparsanız daha iyi olur. Yoksa haberdar olamıyoruz.

https://soulsecurity.wordpress.com/2012/12/05/sql-injection-temel-saldiri-ve-savunma/amp/



https://www.olympos.net/howto-nasil/sql-injection/adim-adim-sql-injection-93419.html



http://www.burakavci.com.tr/2014/01/sql-injection-login-bypass.html?m=1



http://www.zskblog.com/detay.aspx?id=22

https://www.cyber-warrior.org/Dokuman/Default.Asp?Data_id=704



http://www.ismailsaygili.com.tr/2014/05/php-scriptlerde-sql-injection-tespiti-ve-exploit-etme.html?m=1



Muhtemelen bu siteleri sizde incelemişsinizdir ancak yinede başka arkadaşlara yardımcı olabilir.





< Bu mesaj bu kişi tarafından değiştirildi el-harezmi_0 -- 24 Ağustos 2017; 0:13:6 >

< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @webandyazilimprofesor
W
8 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: el-harezmi_0

Hocam alıntı yaparsanız daha iyi olur. Yoksa haberdar olamıyoruz.

https://soulsecurity.wordpress.com/2012/12/05/sql-injection-temel-saldiri-ve-savunma/amp/



https://www.olympos.net/howto-nasil/sql-injection/adim-adim-sql-injection-93419.html



http://www.burakavci.com.tr/2014/01/sql-injection-login-bypass.html?m=1



http://www.zskblog.com/detay.aspx?id=22

https://www.cyber-warrior.org/Dokuman/Default.Asp?Data_id=704



http://www.ismailsaygili.com.tr/2014/05/php-scriptlerde-sql-injection-tespiti-ve-exploit-etme.html?m=1



Muhtemelen bu siteleri sizde incelemişsinizdir ancak yinede başka arkadaşlara yardımcı olabilir.

Merhaba,

linkler için çok teşekkür ederim. Tırnak yöntemini denedim. Yani "Or'='Or" yöntemini ve hemen giriş yaptı. ADMİN PANELİNE BİLE.

Veriğiniz linklerden şu linki :http://www.zskblog.com/detay.aspx?id=22&utm_campaign=DonanimHaber&utm_medium=referral&utm_source=DonanimHaber

çok beğendim. Korunma yöntemleri olarak. Bu linkdeki korunma yöntemlerini uygularsak sql injection'dan tamamen korunabilir miyiz?

Biliyorum her zaman tamamen korunabilir miyiz sorusunu soruyorum. Ama sonuç da o kadar emek verince insan tamamen saldırılardan korunmak istiyor.

Lütfen yardım edin.

Cevaplarınız için şimdiden çok teşekkür ederim.

İyi günler dileğiyle.



.
8 yıl
Çavuş

kullanıcının ne yazacağı belli olmaz.bu yüzden kullanıcıdan alıp veritabanına gönderdiğin her şeyi düzenlemen gerekiyor.mesela ben c# ta aşağıdaki metodu kullanıyorum

public static string Sorguyu_Duzenle(string metin)
{
string strReturn = metin.Trim();
strReturn = strReturn.Replace(">", "_zararlı karakter_");
strReturn = strReturn.Replace("<", "_zararlı karakter_");
strReturn = strReturn.Replace("--", "_zararlı karakter_");
strReturn = strReturn.Replace("'", "_zararlı karakter_");
strReturn = strReturn.Replace("char ", "_zararlı karakter_");
strReturn = strReturn.Replace("delete ", "_zararlı karakter_");
strReturn = strReturn.Replace("insert ", "_zararlı karakter_");
strReturn = strReturn.Replace("update ", "_zararlı karakter_");
strReturn = strReturn.Replace("select ", "_zararlı karakter_");
strReturn = strReturn.Replace("truncate ", "_zararlı karakter_");
strReturn = strReturn.Replace("union ", "_zararlı karakter_");
strReturn = strReturn.Replace("script ", "_zararlı karakter_");

return strReturn;
}

gördüğün gibi örneğin delete yazarsa değiştiriyorum.normalde _zararlı karakter_ kısmını herkes "" böyle yazar.bu projeye böyle yapmak istedim.

kullanıcıdan aldığın veriyi önce böyle değiştirip sonra sql e parametre olarak gönderirsen sorun kalmaz.başka zararlı karakterlerde olabilir.



D
8 yıl
Yarbay

Using PDO (for any supported database driver):
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');

$stmt->execute(array('name' => $name));

foreach ($stmt as $row) {
// do something with $row
}
Using MySQLi (for MySQL):
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name);

$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// do something with $row
}

tabi temelde kullanıcıdan gelen hiçbir değere güvenme prensibi yatar.

Mesela, zamanında hemen tüm kargo firmalarının kargo takip sisteminde sorunları vardı. Tutup ardışık sayı kullanmışlar kargo takip numarası için. Adam oturmuş basit bir tool yazmış. tek tek kargoları takip ediyor ? yani adresleri topluyor.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.