الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

فتح باب للنقاش حول موضوع sql injection

مغلق
بدأه metoovet في 25 مايو 2007 · 8 رد · 1,252 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

حبيت ان اكتب هذا الموضوع راجيا من العلى القدير ان تتم الافادة لكل الاعضاء

سوف أفتح باب للنقاش لجميع المستويات مبتدا او متقدم حول ثغرات الحقن الخاصة بقواعد البيانات

ياريت الجميع يشارك

واى عضو نريد بداية من الاول لانى مش عارف ابدا من اين

احنا نبدأ خطوة خطوة من الاول والاخر حتى يعرف الجميع كيف يتم استخراج هذا النوع من الثغرات

فى انتظار التفاعل وبدأ الموضوع

#2

هلا أخوي metoovet

موضوع جميل ... وأسأل الله أن يجعله في موازين حسناتك .

لكن لتبدأ الموضوع على الأقل إطرح مقدمة بسيطة عنه , عشان الأعضاء يتفاعلون معك .

أنا بصراحة أعرف كيف أتعامل معه في قاعدة البيانات mssql لكن في mysql بصراحة ما عندي خلفية عنه .

فرأح أشارك باللي أقدر عليه ... لكن بعد نأخذ فكره عامه عنه .

ولي رجعه إن شاء الله

#3

b.m.s اوكى اخى العزيز نبدأ فى اmssql وبعدين ندخل للmysql

#4

بسم الله الرحمن الرحيم

سأبدأ بالقليل عن ثغرات الحقن لمن لا يعرف ما هي :

ثغرات الحقن هي تمكن احد المتسللين من اكتشاف ثغرات موجودة في جمل SQL واستغلالها للقيام باعمال اخرى لغير ما وجدت له هذه الجمل او تجاوز الصلاحيات الممنوحة له.

على سبيل المثال غالبا ما نستخدم للتحقق من اسم المستخدم عن طريق الجملة التالية (vb+msql)

sql = "select* from users where username = '" & txtuser & "' and password ='" & txtpwd & "'"

وبعد ذلك تنفيذ هذه الجملة بالطريقة المناسبة وفحص رجوع قيم ام لا

هنا يأتي دور المتسلل بالتجريب فيدخل في txtuser مايلي :

' or 1=1 --

واي شيء في الباسوورد مثل 1

فتصبح الجملة السابقة كالتالي :

select* from users where username='' or 1=1 -- and pwd='1'

للتوضيح اكثر

username='' or 1=1 هذا شرط صحيح دائما

( -- ) تعني في sql server تعليق comment اي الكتابة التي بعدها لا فائدة منها

اذا هذه الجملة ترجع قيم صحيحة دائما فيصبح بامكانه الدخول الى النظام

وكذلك يمكن ان يضع (;) semicolon والتي تعني بداية جملة جديدة ويكتب بعدها جملة تعديل او حذف كما يشاء

الحلول لهذ المشكلة وهي :

1- منع هذه الاحرف من مربعات الادخال او عمل استبدال لها

2-التعامل مع stored procedure لان بها آمان اكثر ولا يحصل مثل هذا الامر وخاصة عند استخدامها ك parameters

3- في مثل الفيجوال بيسك ايضا يمكن عمل command وتمرير هذه القيمة ك parameter ايضا تكون آمنة

4-اصبحت هنالك معالجة داخلية من لغات البرمجة مثل asp.net لمنع اي من هذه الرموز من الادخال حيث اذا ادخلت اي من هذه الرموز يعطي عليها خطأ واقصد بالرموز (; < >) وغيرها التي يمكن ان تستخدم في مثل هذه الحالات .

هذه مقدمة بسيطة وارجو من الاخوة التعليق والزيادة في الشرح حتى تعم لفائدة للجميع

#5

مشكور اخى العزيز

وياريت نبدا بالشرح على خطوات

مثلا سابدأ اولا مثلا اذا اردنا ان نتخطى اى توثيق لمستخدم فيوجد عدة طرق

Username : ' OR '='
Password : ' OR '='

هذا للتخطى بدون ان نكون لنا حق authenicate لهذا المستخدم مثلا

او

Username : admin'--

وهذه لليوزر

او

Username : ' or 1=1--

للمستخدم الاول فى جداول USERS

وغيرها

يتبع

#6

موضوع جميل

#7

السلام عليكم,

بالنسبة ﻷزاى ممكن تحمى نفسك فى php :

إذا بتستخدم الـ MySQL extension العادية, فأستخدم mysql_real_escape_string

إذا بتستخدم PDO مع اى نوع من محركات قواعد البيانات المدعومة, استخدم الـ prepared statements :

$stmt = $db->prepare("INSERT INTO users WHERE name = ? and pass = ?");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $pass);

التزامك بأستخدام الـ prepared statements بيحميك من الـ SQL injection باﻷضافة لنه اسرع من التنفيذ المباشر خصوصا لمة بتكون بتكرر اﻷستعﻻم بتاعك اكتر من مرة مع مجرد تغير البيانات فقط.

Web Citizen

ShrefInLife.gif

__________

General blog : Shref In Life

#8

مشكور ياغالى على التوضيح

بس انا حابب نبدأ الموضوع بالنظام عشان النقاش يكون منه فائده

باذن الله

#9

أتذكر في mssql فيه شئ إسمه prepared statements وكنت أتسائل هل موجود في لغتي المفضلة php مثل هذا الشئ ؟

لكن ردك أخوي shreef ممتاز , ولا يهون بقية الأعضاء ردودهم كافية ووافية .

مكتبة PDO فتحت علي أشياء كثيرة في Php

شكراً لكم

هذا الموضوع مغلق.

مواضيع مشابهة