-------------------------------
برای جلوگیری از اینگونه حملات ، چندین راه در پیش دارید. اولین راه قرار دادن magic_quotes_gcp به صورت on است . با انجام این کار کاراکتر Apex در کوکی ها و ارسال هایی که توسط روش GET و POSTانجام میگریند ، ***** شده و از بین میروند. همانطور که دیدید ، کاراکتر Apex نقش مهمی در ایجاد یک حمله موفق تزریق کد های SQL بازی میکند و نبود آن باعث شکست حمله ما میشود.
روش دیگر استفاده از تابع addslashes() است.این تابع کاراکتر های مربوط به ارسال های پایگاه داده ها مانند ( ‘ ) و ( " ( و NUL را با یک اسلش ( / ) همراه میسازد.به طور مثال :
<?
//addslashes() Function example
//Attack and defence php apps book
//shahriyar - j
$str = "Is your name Shahriyar'j?";
echo addslashes($str);
// Outputs: Is your name Shahriyar\'j?
?>
همانطور که میبینید کاراکتر ( ‘ ) ***** شد.
راه دیگر برای در امان ماندن از این حملات استفاده از تابع Mysql_escape_string() است.این تابع نیز همانند تابع Addslashes() عمل میکند.ببینید:
<?
//mysql_escape_string() Function example
//Attack and defence php apps book
//shahriyar - j
$item = "shahriyar-j's Book";
$escaped_item = mysql_escape_string($item);
printf("Escaped string: %s\n", $escaped_item);
// Outputs: shahriyar-j\'s Book
?>
یکی دیگر از روش هایی که میتوان برای جلوگیری از این حملات به کار برد استفاده از توابعIs_numeric() و Is_int برای گرفتن شماره کاربری است.
آخرین راهی که برای جلوگیری از این حملات به ذهن من میرسد استفاده از تابع array_map() است.یکی از کاربرد هایی که این تابع به ما ارائه میدهد ، اعمال یک تابع بر روی ورودی هایی که به صورت آرایه هستند ،است.برای فهم این موضوع به مثال زیر دقت کنید:
<?
//array_map() Function Example
//Attack and defence php apps book
//shahriyar - j
<?php
function cube($n)
{
return($n * $n * $n);
}
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
?>
در کد های بالا با استفاده از تابع array_map() کاری کردیم که تابع cube با استفاده از هر یک از داد های موجود در آرایه $a اجرا شده و مقداری جدید ، ایجاد کند. نتیجه کد های بالا به صورت زیر خواهد بود.
Array
(
[0] => 1
[1] => 8
[2] => 27
[3] => 64
[4] => 125
)
اکنون میتوان از این تابع به صورت زیر برای جلوگیری از حملات تزریق کد های SQL بهره جست.
$_GET = array_map('stripslashes', $_GET);
$_POST = array_map('stripslashes', $_POST);
$_COOKIE = array_map('stripslashes', $_COOKIE);
$_GET = array_map('mysql_real_escape_string', $_GET);
$_POST = array_map('mysql_real_escape_string', $_POST);
$_COOKIE = array_map('mysql_real_escape_string', $_COOKIE);
$_GET = array_map('addslashes', $_GET);
$_POST = array_map('addslashes', $_POST);
$_COOKIE = array_map('addslashes', $_COOKIE);
با انجام هر یک از توابع بر روی روش ها ارسالPOST ، COOKIE و GET کاراکتر های خاصی را که برای حمله مورد نیاز هستند ، ***** کرده و حمله را ناموفق میکنیم.البته شما میتوانید با استفاده از خلاقیت خود روش های جدیدی برای جلوگیری از این حملات ایجاد نمایید.
نکته : از روش هایی که در آنها از توابع خاص استفاده شده است، تنها در صورتی استفاده کنید که مقدار magic_quotes_gpc برابر OFF باشد. برای این کار میتوانید از یک شرط ساده استفاده کنید:
if(!get_magic_quotes_gpc())
{
Filter codes
Escape codes
Filter codes
Escape codes
Filter codes
Escape codes
}
پایان