رفتن به مطلب
مرورگر پیشنهادی آرساکیا گیم مرورگر های تحت موتور کرومیوم می‌باشد، برای دانلود روی مرورگر انتخابی خود کلیک کنید
Google Chrome Microsoft Edge Ungoogled Chromium Brave Opera GX Opera

ارسال‌های توصیه شده

درود خدمت دوستان گرامی

امروز تصمیم گرفتم بعد از مدتی طولانی یکم فعالیت توی انجمن داشته باشم

 

خب همونطور که از عنوان تاپیک مشخصه قراره درباره‌ی SQL Injection صحبت کنیم (فکر کنم دوستان درباره‌ی این موضوع تاپیک ایجاد نکرده باشن)

 

 

1. SQL injection چی هست؟

همونطور که از اسمش مشخصه تزریق SQL یک نوع حمله از طریق آسیب پذیری های امینیتی در وب اپلیکیشن ها هستش. این آسیب پذیری ها به کاربر اجازه میدن که در عملکرد کوئری های وب اپلیکیشن ما اختلال ایجاد کنند یا به دیتابیس ما کوئری دلخواه خودشون رو بفرستن.

 

2. چه زمانی SQL Injection اتفاق میوفته؟

وقتی ما فرم هایی که در سایتمون داریم رو اعتبار سنجی نکنیم و درخواست های کوئری سایتمون رو ایمن سازی نکنیم، کاربر و یا فرد مهاجم میتونه فرم های ورود و دیگر فرم های سایت مارو دور بزنه و به اطلاعات دیتابیس ما دسترسی پیدا کنه و حتی اونارو ویرایش و یا حذف بکنه!

 

3. بررسی کوئری های آسیب پذیر

به طور مثال این کوئری یک کوئری آسیب پذیر هست:

query = "SELECT * FROM users WHERE username = '" . $_POST['username'] . "'";

 

خب حالا چرا آسیب پذیره؟

ما مقدار وارد شده کاربر در فرم رو به صورت مستقیم و بدون اعتبار سنجی یا ایمن سازی در کوئری قرار دادیم

خب حالا من میام و در بخش نام کاربری این مقدار رو وارد میکنم:

' OR '1'='1

 

حالا شاید بگید که چی میشه اگه من نام کاربریم این باشه؟

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

SELECT * FROM users WHERE username = '' OR '1'='1';

 و این کوئری همیشه جواب مثبت (true) رو برمیگردونه

 

حالا چطوری از این استفاده میکنن که وارد بشن یا ورود رو دور بزنن؟

فرد مهاجم در دنباله‌ی اون نام کاربری میاد و -- رو قرار میده (دنباله کوئری رو کامنت میکنه و به بخش وریفای پسوورد نمیرسه) و سعی میکنه بدون داشتن پسوورد وارد سایت بشه

 

یعنی کوئری نهایی ما به این شکل میشه:

SELECT * FROM users WHERE username = '' OR 1=1 -- ' AND password = '1234';

 

هرچند ممکنه در بسیاری از مواقع این روش کاری انجام نده! اما خب احتمال کار کردنش صفر هم نیست.

 

حتی فرد میتونه قبل از بخش کامنت و بعد از 1=1 هر کوئری که میخواد رو ارسال کنه! مثلا کل دیتابیس رو پاک کنه

 

 

4. انواع SQL Injection

این تزریق انواع مختلفی داره که اینجا کامل توضیح نمیدیم و فقط به انواعش اشاره میکنم که in-band, out-of-band و blind هستن.

 

5. چطوری جلوگیری کنیم؟

اول از همه با اعتبارسنجی فرم ها. یعنی چی؟

یعنی فرم هارو چک کنیم که مقادیری که میخوایم رو وارد کرده باشن و نه کاراکتر های بی ربط

راه دوم استفاده از کوئری های پارامتری شده هست (Prepared Statements) که میتونیم از PHP PDO استفاده کنیم:

$stmt = $db->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);

 

توی این روش مستقیما کوئری رو ارسال نمیکنیم. بلکه ابتدا مقدار ارسالی رو با یک Placeholder پر میکنیم (؟) و سپس مقادیر ارسالی رو جایگذاری میکنیم. توی این روش کاربر حتی اگر دستور کوئری ارسال کنه، به عنوان یک Data با اون رفتار میشه. یعنی برخلاف مثال قبلی، دستور کوئری به این شکل میشه:

SELECT * FROM users WHERE username = ' ' OR 1=1 -- ';

 

این یعنی اینکه دقیقا به دنبال مقداری تحت عنوان ' OR '1'='1 میگرده و به عنوان دستور تفسیرش نمیکنه.

 

راه حل های دیگه ای هم مثل استفاده از برخی فریم ورک ها که خودشون کوئری رو ایمن سازی میکنن و برخی راه حل های دیگه هم وجود داره که اینجا کاری باهاشون نداشتیم.

 

امیدوارم این مطلب براتون مفید بوده باشه.

سوالی نظری بود درخدمتم❤️

ویرایش شده توسط Kiya
Some corrections
  • دوست دارم که 2

Kiya.png

 

𝐍𝐂

لینک به دیدگاه
https://forum.arsacia.ir/topic/112946-sql-injection/
به اشتراک گذاری در سایت های دیگر

درود بر شما کیا جان ❤️

خیلی ممنونم از تاپیک مفیدتون و ممنون بابته وقتی که گذاشتید ❤️

اگر تمایل دارید و بلد هم هستید خوشجال میشیم تاپیک NoSQL-Injection هم بزارید ❤️

چون بنده خیلی دنبالش گشتم اما هیچ جایی پیدا نکردم یه آموزش کاملش رو

و اینکه، امیدوارم مطالب بیشتری از شما ببینیم ❤️

ما که داریم به شما درس پس میدیم عمو ❤️

Just Programming

لینک به دیدگاه
https://forum.arsacia.ir/topic/112946-sql-injection/#findComment-1174011
به اشتراک گذاری در سایت های دیگر

۱ ساعت قبل، Integer گفته است:

درود بر شما کیا جان ❤️

خیلی ممنونم از تاپیک مفیدتون و ممنون بابته وقتی که گذاشتید ❤️

اگر تمایل دارید و بلد هم هستید خوشجال میشیم تاپیک NoSQL-Injection هم بزارید ❤️

چون بنده خیلی دنبالش گشتم اما هیچ جایی پیدا نکردم یه آموزش کاملش رو

و اینکه، امیدوارم مطالب بیشتری از شما ببینیم ❤️

ما که داریم به شما درس پس میدیم عمو ❤️

درود جواد جان مرسی از لطفت❤️

اطلاعاتم هرچند ممکنه ناقص باشه ولی هرچیزی که بلد باشم رو چشم به اشتراک میزارم

Kiya.png

 

𝐍𝐂

لینک به دیدگاه
https://forum.arsacia.ir/topic/112946-sql-injection/#findComment-1174094
به اشتراک گذاری در سایت های دیگر

39 دقیقه قبل، Kiya گفته است:

درود جواد جان مرسی از لطفت❤️

اطلاعاتم هرچند ممکنه ناقص باشه ولی هرچیزی که بلد باشم رو چشم به اشتراک میزارم

ای بابا عمو این چه حرفیه دیگه ما داریم به شما درس پس میدیم عمو (گلب)

  • دوست دارم که 1

Just Programming

لینک به دیدگاه
https://forum.arsacia.ir/topic/112946-sql-injection/#findComment-1174153
به اشتراک گذاری در سایت های دیگر

سلام

هرچند که زیاد در مورد SQL نمیدونم

ولی مطلب مفید و جالبی بود

ممنون بابت اطلاعاتت ❤️

  • مرسی 1

Bogart.png

❤️ من از هرچی گذشتم به عشق تو رسیدم, چه نامه عشقی تو چشمای تو دیدم ❤️

لینک به دیدگاه
https://forum.arsacia.ir/topic/112946-sql-injection/#findComment-1183576
به اشتراک گذاری در سایت های دیگر

مرسی از شما @Kiya جان بابت وقتی که گذاشتید 

خسته نباشی 💙

                                      وقتی میرسی به قدرت و اون بالا ها میشینی

مراقب رفتارت با آدما باش                                  

                         یه روزی برمیگردی پایین همون ادم هارو میبینی   

1012238-BeNia

My BORO:

1108288-JavadInteger

لینک به دیدگاه
https://forum.arsacia.ir/topic/112946-sql-injection/#findComment-1193012
به اشتراک گذاری در سایت های دیگر

7 ساعت قبل، EzraeeI گفته است:

مرسی از شما @Kiya جان بابت وقتی که گذاشتید 

خسته نباشی 💙

❤️

Kiya.png

 

𝐍𝐂

لینک به دیدگاه
https://forum.arsacia.ir/topic/112946-sql-injection/#findComment-1193890
به اشتراک گذاری در سایت های دیگر

مفیدبود ممنونم کیا جان ❤️

                                      وقتی میرسی به قدرت و اون بالا ها میشینی

مراقب رفتارت با آدما باش                                  

                         یه روزی برمیگردی پایین همون ادم هارو میبینی   

1012238-BeNia

My BORO:

1108288-JavadInteger

لینک به دیدگاه
https://forum.arsacia.ir/topic/112946-sql-injection/#findComment-1203679
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است!

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری
  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی، در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...