stackoverflow bana her zaman sorularıma doğru cevaplar vererek kodlama kariyerimde çok yardımcı oldu. Ancak bu soru biraz spesifik olabilir ve umarım siteye ilk gönderdiğimden dolayı sert yanıtlar almaz.SQL Server 2012'de SQL Enjeksiyonu
Kullanıcıların çeşitli sütunları aramalarına izin veren bir SQL Server 2012 saklı yordamını oluşturmakla ilgileniyorum. Beklediğim şeyi yapan saklı bir proc ürettiğime inanıyorum ama SQL Injection girişimleriyle ilgili endişelerim var. Tüm mevcut üsleri SQL Injection ile aklımda mı tutuyorsunuz? Değilse, lütfen benim örnek kaydedilen proc'umu engelleme yolları konusunda beni eğitin. Lütfen Dikkat: Şirketin veri yapısını korumak için not edilen değişiklik yapılmıştır.
Saklı Prosedür:
CREATE PROCEDURE [dbo].[spSearch]
(
@searchTerm varchar(50) = NULL
)
AS
set @searchTerm = LTRIM(RTRIM(@searchTerm));
select a.ID
,a.Col1
,a.Col2
,a.Col3
,a.Col4
,a.Col5
,b.Col1
from table1 a
left join table2 b on a.ID = b.ID
where (a.Col1 like '%' + @searchTerm + '%'
or a.Col2 like '%' + @searchTerm + '%'
or a.Col3 like '%' + @searchTerm + '%'
or a.Col4 like '%' + @searchTerm + '%'
or b.Col1 like '%' + @searchTerm + '%'
or b.Col2 like '%' + @searchTerm + '%'
or b.Col3 like '%' + @searchTerm + '%'
or b.Col4 like '%' + @searchTerm + '%'
or b.Col5 like '%' + @searchTerm + '%'
or b.Col6 like '%' + @searchTerm + '%')
GO
Benim asıl sorun 50 karakterlik varchar parametresine komutları ve nerede hükümlerin gibi çeşitli hiçbirinde yürütmek zorunda düşmanca SQL geçme olasılık olduğunu.
SQL enjeksiyon saldırısını parametre kullanarak ele aldınız. Düşman komutları, bir "host" komutu dizisi arıyormuşsunuz gibi düz bir "arama metni" olarak görülecektir. –
Bu, bu düzeyde bir sorun değil. Bu zaten parametrelendirilmiş, bu yüzden parametrenin değeri üzerinde bir arama yapmış gibi davranacaktır. – Siyual
BTW, bu parametreyi aldığınız ve SQL sunucusuna göndereceğiniz noktada hala SQL enjeksiyon saldırı deliğini tanıtabilirsiniz. –