dorparasti
جمعه 16 دی 1390, 14:37 عصر
من یک پروسیجور به صورت زیر می سازم که یک پارامتر از نوع int می گیره و رکورد متناظر اونرو برمیگردونه .
Create PROCEDURE [dbo].[TableGetByID]
@ID int=0
AS
BEGIN
SET NOCOUNT ON;
; SELECT * from TableName where ID=@ID;
END
و در اپلیکشن اینطور مقدار دهی می کنم :
new SqlParameter("@ID", SqlDbType.Int,4, ParameterDirection.Input,false,0,0,"", DataRowVersion.Proposed, ID)
خوب همیشه اینطور کد می نوشتم و مطمئن بودم که چون از پارامتر استفاده می کنم و نوع داده هم به درستی تعیین شده مشکلی از نظر sql injection ندارم . اما امروز اومدم از توی خود sql managment پروسیجور رو execute کردم و برای پارامتر @ID مقدار زیر را دادم با این فرض که خطا می گیره
USE [DataBase]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[TableGetByID]
@ID=1;delete from tablename where 0=0;
SELECT 'Return Value' = @return_value
GO
اما در کمال تعجب کد اجرا شد و علاوه بر برگردوندن یک رکورد همه رکوردها از جدول حذف شد ! کد اجرا شده بود .
اصلاً بد حالم بد شد .
حالا دارم فک می کنم شاید چون مستقیم از توی sql managment بوده اینکارو کرده ولی ...
این حدسم درسته ؟ یا واقعاً باید همه کدهای همه پروژه ها رو اصلاح کنم
Create PROCEDURE [dbo].[TableGetByID]
@ID int=0
AS
BEGIN
SET NOCOUNT ON;
; SELECT * from TableName where ID=@ID;
END
و در اپلیکشن اینطور مقدار دهی می کنم :
new SqlParameter("@ID", SqlDbType.Int,4, ParameterDirection.Input,false,0,0,"", DataRowVersion.Proposed, ID)
خوب همیشه اینطور کد می نوشتم و مطمئن بودم که چون از پارامتر استفاده می کنم و نوع داده هم به درستی تعیین شده مشکلی از نظر sql injection ندارم . اما امروز اومدم از توی خود sql managment پروسیجور رو execute کردم و برای پارامتر @ID مقدار زیر را دادم با این فرض که خطا می گیره
USE [DataBase]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[TableGetByID]
@ID=1;delete from tablename where 0=0;
SELECT 'Return Value' = @return_value
GO
اما در کمال تعجب کد اجرا شد و علاوه بر برگردوندن یک رکورد همه رکوردها از جدول حذف شد ! کد اجرا شده بود .
اصلاً بد حالم بد شد .
حالا دارم فک می کنم شاید چون مستقیم از توی sql managment بوده اینکارو کرده ولی ...
این حدسم درسته ؟ یا واقعاً باید همه کدهای همه پروژه ها رو اصلاح کنم