چگونه از حمله SQL Injection و اجرای کد از راه دور جلوگیری کنیم ؟
![چگونه از حمله SQL Injection و اجرای کد از راه دور جلوگیری کنیم ؟ 1 sql injection چیست](https://comitserver.com/wp-content/uploads/2018/02/sqlinjection2-1024x539.png)
امنیت شبکه یکی از مهمترین مواردی است که ما باید بر آن تمرکز کنیم.
هنگام کار بر روی شبکه، ما باید امنیت شبکه را حفظ کنیم تا اطلاعات با ارزش را حفظ کنیم و مانع حملات نفوذ به حلقه های خصوصی ما شود.
در این مقاله، ما در کامیت سرور در مورد دو حمله مشترک شبکه و اقدامات پیشگیرانه آنها بحث خواهیم کرد.
ما می خواهیم حملات زیر را ببینیم.
1) اجرای کد از راه دور
2) تزریق SQL
اجرای کد از راه دور
فرایند اجرای یک تکه کد در سرور از راه دور توسط یک مهاجم، اجرای کد است.
اجرای کد کدهای از راه دور در غیر اینصورت اجرای کد دلخواه را نامگذاری می کند.
دلیل اصلی این حمله برنامه نویسی ضعیف و نادرست است.
این معمولا توسط مهاجمان انجام می شود که اطلاعات محرمانه را سرقت نکنند، اما به شما اطلاع می دهند که می توانند به شما حمله کنند.
گاهی اوقات در هنگام تست تکالیف، این آسیب پذیری را کشف کنید، اما هنگام انجام یک بررسی کد منبع، چنین مشکلی دیده می شود.
با این حال، هنگام آزمایش برنامه های کاربردی وب مهم است که به یاد داشته باشید
که بهره برداری از این آسیب پذیری می تواند منجر به مصالحه سیستم با حقوق مشابه با خود وب سرور شود.
چگونه از اجرای کد از راه دور جلوگیری کنیم ؟
![چگونه از حمله SQL Injection و اجرای کد از راه دور جلوگیری کنیم ؟ 2 sql injection چیست](https://comitserver.com/wp-content/uploads/2018/02/SQL-Injection-1024x764.png)
اطمینان حاصل کنید که کد شما از مرزهای بافرهای داده شما احترام می گذارد.
در کامپایلرها، چک کردن دامنه یا چکهای زمان اجرا مشابه را فعال کنید.
کامپایلر کد را برای تایید اینکه یک مقدار شاخص آرایه در محدوده قبل از دسترسی به مکان حافظه در آرایه است، منتشر می کند.
به توصیف کاربر داده های خود اعتماد نکنید
. همیشه تصور می کنید زمانی که شما با اطلاعات عرضه می شود، خراب خواهد شد.
رشته ها نخواهند شد.
آرایه ها به اندازه ای مناسب نیستند و سازه ها قطعه های گمشده خواهند شد.
بسته ها بیش از اندازه یا ناقص خواهند بود.
تزریق SQL
این یکی از شایع ترین حملات در صنعت وب است.
تزریق SQL یک روش تزریق کد است که برای حمله به برنامه های کاربردی تحت هدایت داده ها مورد استفاده قرار می گیرد.
در این حملات، مهاجم دستورات SQL را به یک فیلد ورودی در یک فرم برای اجرای وارد می کند.
این باعث می شود که اطلاعات از دست رفته و داده های محرمانه از بین بروند.
این تکنیک است که کاربران مخرب می توانند دستورات SQL را به یک دستور SQL، از طریق ورودی صفحه وب تزریق کنند.
دستورات SQL تزریقی می تواند دستور SQL را تغییر دهد و امنیت یک برنامه وب را به خطر بیندازد.
![چگونه از حمله SQL Injection و اجرای کد از راه دور جلوگیری کنیم ؟ 3 sql injection چیست](https://comitserver.com/wp-content/uploads/2018/02/union_based_sql_injection.png)
تزریق SQL بر اساس 1 = 1 همیشه درست است
این یکی از روش های معمول تزریق SQL است.
بیایید نمونه را ببینیم
بیایید بگوییم هدف اصلی کد این است که یک عبارت SQL را برای انتخاب یک کاربر با یک شناسه کاربر مشخص ایجاد کنیم.
در حمله، ورودی کاربر مانند این است:
Userid 105 یا 1 = 1
این خط کد است که مهاجمان از آن استفاده می کنند:
SELECT *
FROM Users
WHERE UserId = 105 or 1=1
ما می دانیم که 1 = 1 درست است.
همانطور که دستور SQL بالا معتبر است، سیستم جدول کاربر را به مهاجم فهرست می کند. یک تزریق SQL دیگر را مشاهده کنید.
SELECT UserId, Name, Password
FROM Users
WHERE UserId = 105 or 1=1
تزریق SQL بر اساس “” = “” همیشه درست است
این یک شکل دیگر حمله SQL Injection است.
فرض کنید که زیر یک فرم ورود است.
کاربر باید نام کاربری و رمز عبور را وارد کند تا وارد سیستم شوید
هنگامی که یک مشتری در نام کاربری و رمز عبور را تایپ می کند، کد اصلی واقعی تولید شده در زیر نشان داده می شود.
uName = getRequestString(“UserName”);
uPass = getRequestString(“UserPass”);
sql = “SELECT * FROM Users WHERE Name =’” + uName + “‘ AND Pass =’” + uPass + “‘”
یک هکر ممکن است به سادگی با وارد کردن “یا” “=” به نام کاربری یا جعبه متن گذرواژه به نامهای کاربری و کلمه عبور در یک پایگاه داده دسترسی پیدا کند.
کد موجود در سرور یک عبارت معتبر SQL ایجاد می کند مثل این:
SELECT *
FROM Users
WHERE Name =”” or “”=”” AND Pass =”” or “”=””
همانطور که این پرس و جو SQL همیشه درست است، مهاجم به وب سایت وارد شده است.
تزریق SQL براساس بیانیه SQL Batched
![چگونه از حمله SQL Injection و اجرای کد از راه دور جلوگیری کنیم ؟ 4 sql injection چیست](https://comitserver.com/wp-content/uploads/2018/02/Figure01.png)
همانطور که می دانیم، اکثر پایگاه های داده ها از اظهارات SQL متشکل از جداول با ابهام جدا می شوند.
این حمله توسط مهاجمان برای اجرای تزریق SQL تزریق می شود.
eg: SELECT * FROM Users; DROP TABLE table1
این کد جدول کاربران را لیست کرده و جدول table1 را حذف می کند.
حالا، بیایید به کد زیر نگاه کنیم. این توضیح می دهد که چگونه این حمله اجرا می شود.
txtUserId = getRequestString(“UserId”);
txtSQL = “SELECT * FROM Users WHERE UserId = ” + txtUserId;
فرض کنید مهاجم خط زیر را در فیلد متن فیلد متنی وارد کند تا درج شناسه کاربر وارد شود
105; DROP TABLE Suppliers
این یک کد SQL مانند این خواهد شد.
SELECT * FROM Users WHERE UserId = 105; DROP TABLE Suppliers
چگونه از SQL Injection جلوگیری کنیم ؟
برای جلوگیری از حملات تزریق SQL، اقدامات زیر را دنبال کنید.
1) استفاده از Parameterized Queries
2) از روش های ذخیره شده استفاده کنید
3) فرار از تمام ورودی های ارائه شده توسط کاربر
از Parameterized Queries استفاده کنید
در این روش، ابتدا برنامهنویس باید کد SQL را تعریف کند و بعد هر پارامتر را به query بفرستد.
این کار شما را قادر می سازد بین کد و داده ها توسط پایگاه داده بدون توجه به آنچه که کاربر ارائه می شود، تمایز قائل شود.
از روش های ذخیره شده استفاده کنید
روش های ذخیره شده همیشه از SQL Injection بی خطر نیستند.
با این حال، برخی از ساختارهای نرم افزاری استاندارد Stored Procedures همانند استفاده از پارامترهای نمایش داده شده هنگام اجرای ایمن هستند.
فرار از همه ورودی های ارائه شده توسط کاربر
وقتی هیچ کدام از این کارها انجام نمی شود، این روش می تواند اجرا شود.
این روش بسیار خاص پایگاه داده است.
با استفاده از این تکنیک، کاربر قبل از قرار دادن آن در یک query فرار می کند.
هر DBMS پشتیبانی از یک یا چند فریم ورک فرار خاص به انواع خاصی از نمایش داده می شود.
اگر بعد از استفاده از فرمان مناسب برای پایگاه داده با استفاده از DBMS از تمامی ورودی های ارائه شده توسط کاربر فرار کنید،
با ورودی با کد SQL نوشته شده توسط توسعه دهنده، اشتباه نخواهد شد.
اگر شما نیاز به کمک بیشتر دارید، لطفا با بخش پشتیبانی کامیت سرور تماس بگیرید.