رفتن به مطلب

پست های پیشنهاد شده

سلام چه جوري ميشه جلوي هک هاي sql injection رو گرفت ؟ يعني چه تغييري تو کد نويسي بايد داد ؟

با سلام بستگي داره به نوع باگ Sql داره

راه هاي مختلفي هست مثلا Patch کردن خود باگ و يا بستن دسترسي حتي بعد نفوذ از طريق Sql inj

روش هاي جلوگيري از حمله:

1- روش هاي رايج و معمول: در خيلي از مواقع تاکتيکي که خيلي از دوستان برنامه نويس براي جلوگيري از حمله انجام مي دهند، تاکتيک چک کردن ورودي و تبديل آن به کاراکتر هاي ديگه!

مثلا تبديل کدهاي ورودي به نوع int و گرفتن ورودي به صورت عددي... و يا اضافه کردن يک کاراکتر / به ورودي و...

کد زير را در نظر داشته باشيد:

کد PHP:


<?php
$q="select * from TABLE where id=".$_GET['id'];
$q1=mysql_query($q);
?>

روشهاي معمول ايمن سازي به صورت زير است:

1-استفاده از تابع int:

کد اصلاح شده با اين متد:

کد PHP:


<?php
$id=(int)$_GET['id'];
$q="select * from TABLE where id='".$id."'";
$q1=mysql_query($q);
?>

2- اعتبار سنجي ورودي به وسيله تابع ctype_digit() که تقريبا کار بالا رو انجام ميده:

کد اصلاح شده با اين متد:

کد PHP:


<?php
$id=$_GET['id'];
if(isset($id) AND ctype_digit($id)){
$q="select * from TABLE where id='".$id."'";
$q1=mysql_query($q);
}
?>

3- استفاده از escape

کد اصلاح شده با اين متد:

کد PHP:


<?php
$id=$_GET['id'];
$q="select * from TABLE where id='".mysql_real_escape_string($id)."'";
$q1=mysql_query($q);
?>

اين کد تمامي ورودي هاي مضر را خنثي مي کنه!

متد escape روش هاي ديگه هم داره که خيلي ايمن نيستند اما من بخاطر اينکه تاپيک جامع هست آنها را مي آورم:

استفاده از تابع addslash , str_replace:

کد PHP:


<?php
$id=$_GET['id'];
$q="select * from TABLE where id='".addslashes($id)."'";
$q1=mysql_query($q);
?>

اين روش يک / به کد ورودي اضفه مي کنه...

و براي str_replace:

کد PHP:


<?php
$id=$_GET['id'];
$q="select * from TABLE where id='".str_replace("'","''",$id)."'";
$q1=mysql_query($q);
?>

همانطور که مي دانيد اين يک تابع تبديل هست و آرگومنت اول را به آرگومنت دوم تبديل مي کنه...

لینک به ارسال

سلام. ببینید اکثر باگ هایی که توی کدهای php به وجود میاد ناشی از کوتاه نویسی و خلاصه نویسی هست. مثلا توی مثالی که Black_Sky آوردن فرض بر این بوده که هیچ چکی روی ورودی صورت نمیگیره و مستقیما درخواستی به پایگاه داده ارسال میشه. در حالی که حتما هر نوع ورودی ای چه از طریق کدنویسی وارد بشه چه توسط کاربر باید حداقل چک هایی روش صورت بگیره. نوع چک هم باید با این مفهوم باشه که مطمئن بشید همون چیزی هست که انتظار دارید.

اگر کدتون رو استاندارد بنویسید و با دستورهای شرطی مطمئن بشید که ورودی همون چیزی هست که انتظار دارید دیگه نیازی نیست نگران هیچ نوع هکی باشید (البته به جز اونهایی که سرور رو هک می کنن و بعد شما رو ، چون از دستتون خارجه :) ).

موفق باشید.

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...