PDA

View Full Version : مشکلات مربوط به NULL بایت ها



abolfazl-z
شنبه 24 آبان 1393, 19:51 عصر
سلام

همانطور که می دانید مفسر PHP (http://fa.wikipedia.org/wiki/%D9%BE%DB%8C%E2%80%8C%D8%A7%DA%86%E2%80%8C%D9%BE%D B%8C) با زبان C نوشته شده و یک ویژگی از این زبان قدرتمند به ارث برده.

این ویژگی همان NULL Byte هست که در زبان C به معنی آخر رشته می باشد که در واقع یک رشته (http://fa.wikipedia.org/wiki/%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B1%D8%B4% D8%AA%D9%87_%D8%AF%D8%B1_%D8%B3%DB%8C) مجموعه ایی از کاراکتر هایی است که در آرایه قرار دارند و آخر هر رشته به کاراکتر NULL که 0\ می باشد ختم می شود.

این ویژگی در عملیات مربوط به سیستم فایل وجود دارد. (ممکن از نظر من جایی دیگر هم وجود داشته باشد)

ولی این یک باگ محسوب نمیشود اما میتونه در قالب هشدار به برنامه نویس هایی که از این مفهوم با خبر نیستند ابلاغ شود.

125732
مفهوم NULL Byte در C

برای رفع این نوع مشکل هم میتونین از یک لیست سفید استفاده کنید.


<?php
$file = $_GET['file']; // "../../etc/passwd\0"
if (file_exists('/home/wwwrun/'.$file.'.php')) {
// file_exists will return true as the file /home/wwwrun/../../etc/passwd exists
include '/home/wwwrun/'.$file.'.php';
// the file /etc/passwd will be included
}
?>

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



<?php
$file = $_GET['file'];

// Whitelisting possible values
switch ($file) {
case 'main':
case 'foo':
case 'bar':
include '/home/wwwrun/include/'.$file.'.php';
break;
default:
include '/home/wwwrun/include/main.php';
}
?>


http://php.net/manual/en/security.filesystem.nullbytes.php

sara147
شنبه 04 بهمن 1393, 12:14 عصر
این کدی که نوشتین نه راه حل نال بایت هست، نه کدی که درش از روش لیست سفید استفاده شده باشه!

abolfazl-z
یک شنبه 05 بهمن 1393, 14:21 عصر
این کدی که نوشتین نه راه حل نال بایت هست، نه کدی که درش از روش لیست سفید استفاده شده باشه!

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