قالب وردپرس قالب وردپرس آموزش وردپرس قالب فروشگاهی وردپرس وردپرس
دوشنبه , شهریور ۴ ۱۳۹۸
خانه / برنامه نویسی / php / امنیت سایت در php – بخش سوم باگ LFI و RFI

امنیت سایت در php – بخش سوم باگ LFI و RFI

باگ LFI و RFI :

این دو باگ تا حد زیادی به هم شبیه هستند . LFI مخفف Local File inclusion و RFI مخفف Remote File Inclusion می باشد .

این دو باگ زمانی رخ میدهد که برنامه نویس فایلی را اینکلود کند که آدرس را از کاربر دریافت میکند .

نکته : دستورات نباید صرفا اینکلود باشد و استفاده کنترل نشده از هر کدام از فایل های زیر میتواند موجب این باگ باشد .

include , include_once , require , require_once

 

سناریو هک با باگ و یک نمونه کد آسیپ پذیر باگ باگ LFI و RFI :

همانطور که گفته شد این دو تا باگ زمانی به وجود می آید  که برنامه نویس فایلی را اینکلود کند که آدرس آن را از کاربر دریافت کند  برای مثال به کد زیر توجه کنید :

<?php
include ($_GET['file']);
?>

حال اگر هکر در ایندکس فایل متد گت آدرس یک فایل تکست که محتویات آن کد های یک شل است و این را بر روی سرور خود ریخته است وارد کند شل اجرا میشود و چون آدرس اینکلود شده خارجی است این باگ RFI خواهد بود .

اما اگر هکر در ایندکس فایل متد گت آدرس یک فایل داخلی را وارد کند فایل نمایان خواهد شد و چون این آدرس داخلی بوده است این باگ را LFI  مینامند .

راه حل چیست ؟

فایل وارد شده توسط کاربر را از یک لیست چک کنیم و اگر فایل در لیست بود اینکلود شود . مثال :

<?php
$files=array('test.gif');
if(in_array($_GET['file'], $files)){
include ($_GET['file']);
}
?>

اگر ادمین سرور هستیم از فایل allow_url_fopen را خاموش کنیم.

یا با دستور ini_set این کار را انجام دهیم . فقط برای (RFI)

<?php
ini_set('allow_url_fopen ', 'Off');
?>

میتوانیم با استفاده از دستور strpos چک کنیم که اگر در آدرس وارد شده ://http بود فایل اینکلود نشود (فقط میتواند جلوی RFI  را بگیرد )

<?php
$strpos = strpos($_GET['url'],'http://');
if(!$strpos){
include($_GET['url']);
}
?>

با استفاده از str_replace میتوانیم آدرس داده شده را از دو کارکتر “/” , “.” پاکسازی کنیم .

<?php
$url=$_GET['url'];
$url = str_replace("/", "", $url);
$url = str_replace(".", "", $url);
include($url);
?>

شما تقریبا با باگ های مهمی آشنا شدید که میتواند امنیت سایتتون رو تامین کند.

امیدوارم از این سری آموزش لذت برده باشید .

 

درباره ی شاهین احمدزاده

شاهین احمدزاده هستم مهندس کامپیوتر در گرایش نرم افزار علاقه مند به برنامه نویسی و طراحی سایت . شماره تلفن : 09195227837 ایمیل : shahin.ahmadzadeh795@gmail.com

مطلب پیشنهادی

اموزش استفاده از MetroFramework ویندوز فرم

در این بخش می خواهیم اموزش عوض کردن فرم پیش فرض ویژوال استادیو به فرم …

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *