Latest web development tutorials

MySQL و SQL حقن

إذا كنت تحصل على البيانات المدخلة من قبل المستخدم من خلال شبكة الإنترنت، وأدخله في قاعدة بيانات MySQL، فمن المشاكل الأمنية حقن الممكن SQL.

هذا القسم سوف اقول لكم كيفية منع حقن SQL، ولتصفية الشخصيات حقن SQL في السيناريو.

ما يسمى حقن SQL، هو من خلال الأمر SQL إلى نموذج ويب تقديم أو إدخال اسم نطاق أو طلب صفحة سلسلة الاستعلام، وفي نهاية المطاف خداع الخادم لتنفيذ أوامر SQL الخبيثة.

نحن إدخال المستخدم تثق أبدا، لا بد لنا من التعرف على البيانات المدخلة من قبل المستخدم وغير آمنة، ونحن جميعا الحاجة إلى إدخال المستخدم عملية تصفية البيانات.

في المثال التالي، إدخال اسم المستخدم يجب أن يكون مزيجا من الحروف والأرقام وسفلية، وطول اسم المستخدم بين 8-20 حرفا:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysql_query("SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

دعونا ننظر إلى الوضع عندما لا يكون هناك مرشح SQL تظهر الأحرف الخاصة:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

فوق بيان الحقن، ونحن لم يكن لديك لتصفية اسم المتغير $، $ اسم نحن لسنا بحاجة لإدراج عبارة SQL سيتم حذف كافة البيانات الموجودة في المستخدمين الجدول.

لا يسمح mysql_query في PHP () لتنفيذ عبارات SQL متعددة، ولكن في SQLite وشبكة الإنترنت يمكن تنفيذ عبارات SQL متعددة في وقت واحد، بحيث يمكن للمستخدمين من هذه البيانات ونحن بحاجة إلى التحقق من ذلك بدقة.

منع حقن SQL، نحن بحاجة إلى الالتفات إلى النقاط التالية:

  • 1. إدخال المستخدم تثق أبدا. التحقق من إدخال المستخدم، يمكنك استخدام التعابير العادية، أو تحد من طول، علامات الاقتباس المفردة والمزدوجة "-" في التحويل.
  • 2. لا تستخدم دينامية مزود التجمع، يمكنك استخدام المعلمات من الاستخدام المباشر لSQL أو الإجراءات المخزنة للوصول الاستعلام البيانات.
  • 3. لا تستخدم المسؤول امتيازات اتصال قاعدة البيانات، استخدام أذونات فرد محدودة لكل اتصال قاعدة بيانات التطبيق.
  • 4. لا تخزن معلومات سرية مباشرة، والتشفير أو تجزئة عن كلمات المرور والمعلومات الحساسة.
  • 5. يجب أن تعطى المعلومات الاستثناء التطبيق كما القليلة المطالبات، فمن الأفضل لاستخدام خطأ رسالة خطأ مخصصة رسالة التعبئة والتغليف الأصلي
  • كشف 6.sql موقع الحقن بشكل عام أو دعم منصة برمجيات للكشف، والبرمجيات التي تستخدم عادة مزود أدوات الكشف حقن jsky، موقع على شبكة الإنترنت موقع مليار التفكير هناك أدوات للكشف عن منصة الأمن. MDCSOFT SCAN تريد. باستخدام MDCSOFT-IPS يمكن أن تكون فعالة حقن SQL الدفاع والهجمات XSS.

حقن منع SQL

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

يوفر PHP الخلية تمديد وظيفة mysql_real_escape_string () للهروب إدخال الأحرف الخاصة.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='{$name}'");

مثل حقن بيان

مثل الاستعلام، إذا كان المستخدم يدخل قيمة "_" و "٪"، ثم يحدث هذا: المستخدم كان مجرد محاولة الاستعلام "abcd_"، نتائج الاستعلام هناك "ABCD _"، "ABCDE"، "abcdf" وما إلى ذلك؛ المستخدم للاستعلام عن "30٪" (ملاحظة: ثلاثين في المئة) ستكون لديه مشاكل.

في البرنامج النصي PHP، يمكننا استخدام addcslashes () وظيفة للتعامل مع الحالة المذكورة أعلاه، والأمثلة التالية:

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

addcslashes () وظيفة محددة قبل بخط مائل.

بناء الجملة:

addcslashes(string,characters)
المعلمات وصف
سلسلة المطلوبة. للتحقق من السلسلة المحددة.
الأحرف اختياري. المنصوص عليها في addcslashes () تؤثر على أحرف أو نطاقات حرف.

يمكنك عرض تطبيق معين: في addcslashes PHP () وظيفة