در مورد SQL INJECTION :
در آخرين فايلي كه براي دانلود گذاشتم :
فايل config.php رو ببينيد :
کد PHP:
function safe( $value ){
$value = trim( $value );
$value = mysql_real_escape_string( $value );
$value = htmlspecialchars($value);
$value = strip_tags($value);
$value = str_replace(array("<",">","'","ی","&","ۜ"),array("<",">","'","ي","&","ي"),$value);
return $value;
}
function autosafe(&$value,$key){
$value = safe($value);
return $value;
}
array_walk($_POST,'autosafe');
array_walk($_GET,'autosafe');
array_walk($_COOKIE,'autosafe');
array_walk($_SESSION,'autosafe');
تابع safe:
ابتدا مقدار ورودي رو trim مي كنيم يعني فضاهاي خالي اول و آخرش رو حذف مي كنيم
mysql_real_escape_string : يك تابع فوق العاده سودمند براي حذف كاراكتر هاي ناخواسته و آماده سازي رشته ورودي براي استفاده در يك كوئري به صورت سالم . مثلا كاراكترهاي \x00, \n, \r, \, ', " and \x1a فيلتر ميشوند.
PHP: mysql_real_escape_string - Manual
htmlspecialchars
تبديل كاراكترهاي html :
مثال :
* '&' (ampersand) becomes '&'
* '"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
* ''' (single quote) becomes ''' only when ENT_QUOTES is set.
* '<' (less than) becomes '<'
* '>' (greater than) becomes '>'
PHP: htmlspecialchars - Manual
strip_tags :
حذف تگ ها ، مثلا تگ اسكريپت و ...
PHP: strip_tags - Manual
تابع autosafe :
تابعي دست نويس براي اجراي خودكار تابع safe روي متغير هاي ورودي . اگر از نحوه كاركرد اين تابع و تابع بعدي يعني array_walk اطلاع نداريد توصيه ميكنم "آرايه ها در php" رو كه قبلا در همين انجمن نوشتم مطالعه كنيد.
-
جلوگيري و مقابله با جعل سشن :
کد PHP:
$client = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$_SERVER['SERVER_NAME']);
$_SESSION['client'] = $client;
يك راه كاملا ساده !
در كد بالا من تركيبي از آي پي كاربر ، مشخصات مرورگر كاربر و آدرس سايت رو در يك رشته تركيب و md5 كردم و داخل يك سشن ريختم
حالا در صفحات لوگين بايد چك كنم :
کد PHP:
$client = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$_SERVER['SERVER_NAME']);
if($client != $_SESSION['client'])
die("Dear User ! Your Login session expired,please re login");
با اينكار حتي اگه سشن يك يوزر جعل و د.زديده بشه باز هم هويتش جعل نميشه.
سعي كردم خلاصه بگم و بيشتر توابع رو php.ini ارجاع مي دم به دو دليل : 1. شلوغ نشدن غير ضروري تاپيك 2. درك سايت فوق العاده مفيد php.net
منتظر ادامه آموزش ها باشيد
