برگزیده های پرشین تولز

include

sasan_66

کاربر تازه وارد
تاریخ عضویت
18 جولای 2006
نوشته‌ها
450
لایک‌ها
0
يه جايي خوندم كه نوشتن كدهايي مثل كد زير اشتباهه
PHP:
<?php
if (expression)
include ('filename');
else
include ('another_filename');
?>
و شكل درسته اون اين طوريه
PHP:
<?php
if (expression) {
include ('filename');
} else {
include ('another_filename');
}
?>
يعني عبارت هاي include بايد داخل{} قرار بگيرن چرا؟؟
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
46
این اجبار فقط به مفسر PHP برمیگرده و مشکلاتی که اگر include رو در داخل بلوک شرطی نذارید، مفسر در ترجمه دستورات دجار مشکل میشه. احتمالاً یا درست کردنش خیلی مشکل بوده یا اگر میخواستند راه حلی پیدا کنند سایر قسمتها دچار مشکل میشده.
 

Shahed

کاربر قدیمی پرشین تولز
تاریخ عضویت
30 ژوئن 2003
نوشته‌ها
7,270
لایک‌ها
34
محل سکونت
mt.cgi
من توی کتاب PHP 5 تالیف دکتر وحید رضا میرزائیان خوندم که بهتره از تابع Include استفاده نشه چون باگ امنیتی درست می کنه.
نه. تو اون کتاب هم نوشتن حتما ! شما بقیه شو نخوندی !
تحت یه شرایطی هست که این تابع میتونه مشکل ایجاد کنه.
 

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,602
لایک‌ها
49
محل سکونت
Anywhere
من توی کتاب PHP 5 تالیف دکتر وحید رضا میرزائیان خوندم که بهتره از تابع Include استفاده نشه چون باگ امنیتی درست می کنه.
این مشکل امنیتی اینکلود به iq برنامه نویس برمیگرده
127fs4573872.gif
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
41
محل سکونت
یه خورده اونورتر
مثلا چجوری مشکل ساز بشه؟ include_once و require هم مشکل دارن؟
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
46
من توی کتاب PHP 5 تالیف دکتر وحید رضا میرزائیان خوندم که بهتره از تابع Include استفاده نشه چون باگ امنیتی درست می کنه.
من این کتاب رو ندیدم ولی بحث خطر استفاده از include اینه که ورودی کاربر (از طریق URL یا فرم) نباید مستقیماً در include استفاده بشه مثلاً :
PHP:
include($_GET[page] . '.php');
البته به راحتی میشه جلوشو گرفت (اینقدر ساده است که دیگه شرح نمیخواد). این مسأله فقط مربوط به include نمیشه و خیلی توابع هستند که استفاده مستقیم از ورودی کاربر توشون بسیار مخربتر و خطرناک تر از include هست.
 

sasan_66

کاربر تازه وارد
تاریخ عضویت
18 جولای 2006
نوشته‌ها
450
لایک‌ها
0
این اجبار فقط به مفسر PHP برمیگرده و مشکلاتی که اگر include رو در داخل بلوک شرطی نذارید، مفسر در ترجمه دستورات دجار مشکل میشه. احتمالاً یا درست کردنش خیلی مشکل بوده یا اگر میخواستند راه حلی پیدا کنند سایر قسمتها دچار مشکل میشده.
ممكنه اين قسمت رو بيشتر توضيح بدين؟
چرا ممكنه اگه include داخل بلوك شرطي نباشه مفسر دچار اشتباه شه؟
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
46
ممكنه اين قسمت رو بيشتر توضيح بدين؟
چرا ممكنه اگه include داخل بلوك شرطي نباشه مفسر دچار اشتباه شه؟
من اطلاع دقیق ندارم. اگر هم داشتم توضیحش اینجا نمیگنجید. نوشتن یك مفسر زبان برنامه نویسی كار بسیار مشكلی هست و از مراحل مختلفی مثل تجزیه (parsing)‌عبارتها و اختصاص یك token به هر كلمه شروع میشه تا تخصیص حافظه و اجرای دستورات و ... . تو این روند یك باگ یا محدودیت میتونه باعث بشه برنامه نویس(ان) مفسر به این نتیجه برسند كه با وضع یك قانون اضافی میتونند مشكلاتشون رو كمتر كنند. این هم یكی از همون قانونهاست.
 

hba

کاربر فعال صفحات داینامیک
کاربر فعال
تاریخ عضویت
8 آگوست 2004
نوشته‌ها
1,511
لایک‌ها
1
سن
39
محل سکونت
تهران-ونک-php-mysql
کلا اگر متغییری رو به صورت get یا post بگرید
و از فیلتر هایی که باید رد کنید رد نکنید خطری به صورت بسیار زیاد میشود
و باگ معروف RFI را ایجاد می کند در صورت وجود register_global

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

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,602
لایک‌ها
49
محل سکونت
Anywhere
راهش هم خیلی ساده هست , ولی برا اینکه نپرسن دوباره :
PHP:
include("/modules/".$_GET[page] . '.php');
اینطوری اینکلود محدود میشه به یه پوشه و اگه آدرس داده بشه فایل رو پیدا نمیکنه و ارور میده (فکر میکنم یدونه اسلش هم کافی باشه) .
 

hba

کاربر فعال صفحات داینامیک
کاربر فعال
تاریخ عضویت
8 آگوست 2004
نوشته‌ها
1,511
لایک‌ها
1
سن
39
محل سکونت
تهران-ونک-php-mysql
این هم باگ lfi بهش می گند که باش باز هم کارهایی میشه کرد
اون هم با استفاده از null بایت

باید فانکسن بنویسی واقعا فیلتر و تصحیح و حذف کنی توش
 

parvaneh_s

کاربر تازه وارد
تاریخ عضویت
29 جولای 2006
نوشته‌ها
18
لایک‌ها
0
نکته توی پرانتز:
برای اینکه مطمئن بشید که فایل include شده حتما روی سرور خودتون وجود داره باید از دستور زیر استفاده کنید:​

کد:
<?php if (file_exists('myfile.php')) { include('myfile.php') ; }
 

Xiv

کاربر تازه وارد
تاریخ عضویت
17 می 2007
نوشته‌ها
247
لایک‌ها
1
محل سکونت
Internet
این هم باگ lfi بهش می گند که باش باز هم کارهایی میشه کرد
اون هم با استفاده از null بایت

باید فانکسن بنویسی واقعا فیلتر و تصحیح و حذف کنی توش
لطفا یه دونه از این فانکشن ها رو اگه سراغ دارید بگید.
 
بالا