وشاندن بە بنکەدراوە (SQL Injection) لە MySQL
Jun 14, 2018
2 خولەک
322 وشە
تــاگ: mysql
هاوبەشی بکە:

پێشەکی

لە زۆر یەک لە ماڵپەڕەکان پەڕەیەک بە ناوی چوونەژوور1،بۆ دڵنیابوونی چوونەژووری بەکارهێنەران دروستدەکرێت.لەم پەڕانە زانیرای بەکارهێنەران وەردەگیرێت و لە لای ڕاژەکار لەگەڵ زانیارییەکانی بنکەدراوە هەڵدەسەنگێت.لەم کاتانە ئەگەری هێرشەکانی SQL Injection، یا وشاندنی بنکەدراوە لە لایەن هاککەرەکان هەیە.ئەکامی بڵاو بوونی دراوە پاشکەوتکراوەکانی بنکەدراوەیە.لەم بابەتە باسیک لە بەرگیری لەم جۆرە هێرشانەمان کردووە.

ئاشنایی لە SQL Injection لە بنکەدراوەی MYSQL

وشاندن بە بنکەدراوە لە MYSQL زۆرتر کاتی وەرگرتنی زانیاری لە بەکارهێنەر روودەدا.بۆ برگیری لە لە MYSQL دەبێ لە سەمبۆلێکی دڵنیایی بەرامبەری2سوود بگرین. لە نمونەکەی خوارەوە زانیاری وەرگیراوە لە بەکارهێنەران بە پیتی ئەلف و بێ، نووسەی ژێر هێڵ و درێژی ژمارە پیتەکان لە نێوان ٨ تا ٢٠ نووسە سنووردار کراوە:

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

بۆ نیشان دانی کێشە ، کۆدی خوارەوە ڕچاو بگرن:

// supposed input
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name = '{$name}'");

لە کۆدەکەی سەرەوە name$ وەرگیراوە لە بەکارهێنەر دەتوانێت بریتی بێت لە تەواو پیتەکانی ئەلف وبێ و بۆشاییەکان. لێرە ئیمە زانیاری name$ کە زانیاری بەکارهێنەرە لەگەڵ فەرمانێکی DELETE نووسیمانەکە تەواو زانیاری بەکارهێنەر دەسڕێتەوە! ئەڵبەت لە کاتی سوود وەرگرتن لە MySQL نەخشەی ()mysql_query رێگەنادا ئەم داوایانە جێبەجێ بکرێن.بەڵام لە بنکەدراوەکان کە لە PHP سوود دەگرن وەک SQLLITE و PostgreSQL ئەگەری ئەم هێرشانە هەیە.

بەرگیری لە وشاندنی SQL لە بنکەدراوەی SQL

ئێوە دەتوانن تەواو نووسەکانی دەرباز3، بە شێوازی هۆشیارانە لە زمانەکانی PERL و PHP بەڕێوەی ببەن. بنکەدراوەی MYSQL لە زمانی PHP نەخشەی ()mysql_real_escape_string بۆ برگیری لە هێرشی وشاندن4 پیشاندەدا:

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

سوود وەرگرتن لە فەرمانی LIKE

بە یارمەتی فەرمانی LIKE بە شیوازێکی نمونەیی تاینەت،چوونەژوورەوەی بەکارهێنەرەان بە ڕیزبەندە بگۆڕن. بەیارمەتی نەخشەی () addcslashes سنوورێکی بچکۆلە لە نووسەکان دابین بکەن:

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


  1. Login ↩︎

  2. pattern matching ↩︎

  3. escape ↩︎

  4. Injection ↩︎