# پایگاه‌های داده > SQL Server > امنیت در SQL Server >  چند سوال درباره اس کیو ال اینجکشن

## csharpprogramer88

سلام

چند سوال درباره اس کیو ال اینجکشن داشتم :
 1- یک تعریف جامع از اس کیو ال اینجکشن میخوام
2- اس کیو ال اینجکشن، مختص اس کیو ال سرور ماکروسافت هست یا شامل دیگر دیتابیس ها هم میشود ؟
3- عملیاتی که در اس کیو ال اینجکشن انجام میشود چه چیزهایی است؟
4-اس کیو ال اینجکشن مختص برنامه های تحت وب هست یا شامل win application   هم میشود ؟


با تشکر

----------


## حمیدرضاصادقیان

سلام.
1- اینجا رو ببینید.
2- خیر الزاما مختص SQL Server نیست و نوعی تزریق کد به TSQL رو می گویند که این زبان تقریبا زبان استاندارد برای بانکهای اطلاعاتی دیگر هم هست.
3- هر کاری که شما میتوانید توسط دستورات SQL Server انجام دهید در این عملیات شامل می شود.
4- شامل هر برنامه ای که از SQL Server استفاده میکند.

----------


## csharpprogramer88

اون مقاله را هم دانلود میکنم ولی اگه میشه در چند خط اس کیو ال اینجکشن را تعریف کنید

----------


## حمیدرضاصادقیان

درواقع SQL Injection تزریق کد مورد نظر به یک رشته SQL Server هست.
فرض کنید تکه کدی مانند زیر در برنامه استفاده کردید.
_
" من مثال رو با دلفی بیان میکنم"_

With Adoquery Do
Begin
SQL.clear;
SQl.add('Select * from table1 where name='+edit1.text);
open;

در اینجا اگر شما هر رشته ای در edit1 بنویسید رشته اون عینا به این رشته منتقل شده و جلوی نام قرار میگیره.
حالا کاربر میتونه رشته رو به این شکل ارسال کنه.

'';Delete from Table1;--

در اینجا کاربر ابتدا رشته شما رو بسته و رشته خودش رو اضافه میکنه و در اخر مابقی دستور رو نیز Comment میکنه .
به این میگن تزریق کد.
که راه برای جلوگیری از این مورد استفاده از ارسال پارامتریک مقادیر هست یا استفاده از SP.

----------


## csharpprogramer88

> درواقع SQL Injection تزریق کد مورد نظر به یک رشته SQL Server هست.
> فرض کنید تکه کدی مانند زیر در برنامه استفاده کردید.
> _
> " من مثال رو با دلفی بیان میکنم"_
> 
> With Adoquery Do
> Begin
> SQL.clear;
> SQl.add('Select * from table1 where name='+edit1.text);
> ...


با فرض ایننکه کاربر دستور delete  وارد کرد ولی دستور اصلی دستور سلکت هست حالا نقش دستور DELETE اینجا چیهههه؟

چه جوری این کد میتونه به اس کیو ال تزریق بشه؟

----------


## Felony

> با فرض ایننکه کاربر دستور delete وارد کرد ولی دستور اصلی دستور سلکت هست حالا نقش دستور DELETE اینجا چیهههه؟


پس توضیحات رو برای چی دادن ؟ خوندیشون ؟

فرض کن تو ادیت کدی که آقای صادقیان گفت رو بنویسی :

'';Delete from Table1;--

این کد به رشته اصلی میچسبه و تشکیل رشته زیر رو میده :

Select * from table1 where name= '';Delete from Table1;--

حالا کد زیر به SQL برای اجرا ارجاع داده میشه و چون با ; از هم جدا شدن معادل دو دستور جدا هستن ، یعنی :

Select * from table1 where name= '';
Delete from Table1;--

خوب خط اول اجرا میشه و جدول رو بر اساس اسم های خالی فیلتر میکنه ؛ حالا خط دوم اجرا میشه و اطلاعات شما رو به فنا میده ... ! OK ؟

----------


## csharpprogramer88

> پس توضیحات رو برای چی دادن ؟ خوندیشون ؟
> 
> فرض کن تو ادیت کدی که آقای صادقیان گفت رو بنویسی :
> 
> '';Delete from Table1;--
> 
> این کد به رشته اصلی میچسبه و تشکیل رشته زیر رو میده :
> 
> Select * from table1 where name= '';Delete from Table1;--
> ...


 پس طرف باید اطلاعاتی مثل نام جدول و ... را داشته باشه تا بتونه اجراش کنه ؟

----------


## Felony

نام جداول و ... رو هم میشه با Query به دست آورد ، کافیه طرف به T-SQL مسلط باشه ، پیشنهاد میکنم چندتا آموزش SQL Injection که در سایت های هک و کرک به وفور پیدا میشه بگیری و ببینی .

----------

