خانه » برنامه نویسی » ۴۸ نکته و اصل مهم در برنامه نویسی پی اچ پی

۴۸ نکته و اصل مهم در برنامه نویسی پی اچ پی

به نام آن خدایی که نام او راحت روح است و پیغام او مفتاح فتوح است و سلام او در وقت صباح مؤمنان را صبوح است و ذکر او مرهم دل مجروح است و مهر او بلا نشینان را کشتی نوح است.

این مطلب از مجوعه ای از مباحثی که در انجمن مجید آنلاین پیرامون نکات و اصول مهم در برنامه نویسی پی اچ پی نوشته شده است در اینجا جمع آوری شده است ( با تشکر از Y.PY عزیز و دیگر دوستان انجمن)

۱– هرگز فایل های ضمیمه شده رو با پسوند inc. ذخیره نکنید! یعنی name.class.inc رو به name.class.php تغییر بدید. و یا از .HTAccess برای سطح دسترسی inc. استفاده کنید.

۲– حتاًالمکان تگ های اضافی و فضا های خالی را حذف کنید و از باز و بسته کردن بیش از حد تگهای سرور (<?php ?> <? ?> <?= ?>) خودداری کنید. در عمل تفاوتی ندارند ولی در حجم و سرعت، به ازای هر ۱ کاراکتر اضافی ۱ بایت حجم فایل و صفحه و Loading میبره بالا(مخصوصاً در پروژه های سنگین)!

۳کلاس های خود را با قرار دادن ; کامل ببندید و کلاس را با Final و Initialize/__construct شروع کنید تا Clone نشوند:


final class Name
{
final public function __construct()
{
#…
}
};

۴– برای Escape کردن کاراکترهای ویژه و جلوگیری از خیلی از حملات SQL از دستورات زیر استفاده کنید:

get_magic_quotes_gpc ? $Str_Input= @stripslashes($Str_Input) : $Str_Input= @addslashes($Str_Input);if( function_exists(‘mysql_real_escape_string’)): @mysql_real_escape_string($Str_Input);
else: @mysql_escape_string($Str_Input);
endif;

5در کلاس خود از تابع پیش فرض clone__ برای جلوگیری از تقلید(Clone)(شبیه سازی) توابع استفاده کنید:

final public function __clone()
{
return(@exit(‘Cloning is not allowed.’));
}

۶هرگز از Cookie/Session برای ذخیره کلمه رمز یا مقادیر نمایشی استفاده نکنید(قابل تغییر هستند). خیلی ها از جمله … این مورد رو در نرم افزارشون رعایت نمی کنند و بارها آسیب های جدی و پیش پا افتاده ای رو متحمل میشن.

۷در خط اول هر فایل PHP، بعد از خطا زدایی کامل صفحه، دستور (error_reporting(E_ALL@ را قرار بدید که تمامی خطا ها و هشدار ها رو نمایش بده. تا از سو استفاده های احتمالی جلوگیری بشه.

۸حتاًامکان از دستور GET_$ برای دریافت مقادیر استفاده نکنید. و به جاش از دستور REQUEST_$ استفاده کنید(مقدارش رو هم فیلتر کنید).
مقادیر متد GET_$، براحتی قابل Sniff و Steal هستند. همچنین ظرفیت این متد حداکثر ۱۰۰ کاراکتر هستش و تمام پارامترهای URL رو هم نوار آدرس مرورگر در معرض دید میزاره.
ولی متد REQUEST_$، هیچ کدوم از این ضعف ها رو نداره و قدرت پیمایشش هم بیشتره.
اینم یه مثال ساده برای معتبر سازیش:

$Int_Identity= (int)@preg_replace(‘/[^۰-۹]/i’, ”, $_REQUEST['Id']);

9–  حتماً تمامی دستورات Exit و Die رو با Ignore کردن خطا @ و بستن محتوا استفاده کنید:

@exit(”); یا @die(”);

۱۰–  در اول هر کلاس و تابع حتماً وجود و بودن کلاس و تابع رو چک کنید!

if(!extension_loaded(’standard’)): @exit(‘Extension Standard not loaded!’);
elseif(!extension_loaded(‘mysql’)): @exit(‘Extension MySQL not loaded!’);
elseif(!class_exists(‘ClassName’)): @exit(‘Class ClassName not exists!’);
endif;
…
if(function_exists(‘mysql_real_escape_string’)): @mysql_real_escape_string(…);
else: @mysql_escape_string(…);
endif;

11–  هرگز از روش زیر برای آدرس دهی(Action) استفاده نکنید:

<form name=”Frm_Test” action=”<?= $_Server['PHP_Self'] ?>“ method=”post” target=”_self”>
…
</form>

چراکه قابل تغییر و دستکاری هستند(برای حملات (XSS(Cross Side Scripting).
راه حل:

$_PHPSelf= @basename(__File__);
$_Server['PHP_Self]= @substr($_Server['PHP_Self'], ۰, @strpos($_Server['PHP_Self], $_PHPSelf)) . $_PHPSelf;

12–  حتماً تمامی خروجی ها رو به نوع مربوطش تبدیل کنید:

echo((string)‘Test ’ . $_Var_Test);return((string) $_Str_Test);return((integer) $_Int_Test);

13–  و در آخر، بهتر و ایمن تره اگر تمامی تگ ها و بلاک ها رو کامل مشخص کنید و کامل ببندید:
حافظه هم دچار مشکل نمیشه.

if(…): …
endif;
if(…): …
else(…): …
endif;if(…): …
elseif(…): …
else(…): …
endif;

if(…)
{
…
};

if(…): …
{
…
}
else
{
…
};

while(…):
endwhile;

while(…)
{
};

for…
foreach…
…

مجموعه مشخصی از اشتباهات و آسیب ها و ضعف های نرم افزاری غالباً تکراری رخ می دهند!
که چیزی جز خجالت و خسارت بدنبال نداره. و این آخر جهل و نادانی رو میرسونه. اگر یه سری به SecurityFocus.com/archive، MilW0rm.com، Net-Security و غیره برنید متوجه این موضوع میشید. پس اگر برنامه نویس هستید، حتماً از آخرین رویداد ها و اخبار امنیتی نرم افزارها مطلع باشید.


۱۴– هرگز از SQLite برای نرم افزارهای سنگین استفاده نکنید!
شاید SQLite نقات قوت زیادی داشته باشه(از جمله مستقل بودن)، ولی در رابطه با نرم افزارهای سبک!
در نرم افزارهای سنگین،
اولیش: عدم نیاز به پردازش سرور! در ظاهر یه نقطه قوت هست، ولی نداشتن پردازش سرور، مجموعه ای از مشکلات بزرگ و خطرناکی رو بهمراه داره: از قبیل قفل فایل، مسایل همزمانی، مشکلات حافظه، نداشتن کش Query، مشکلات باینری، مشکلات سرریز شدن(Overflow) داده های سنگین و مشکلات مقیاسی هنگام برخورد با توده عظیمی از اطلاعات!
دومیش: باینری نا امن! SQLite اطلاعات باینری رو نمیتونه Handle کنه. برای Insert کردن داده از نوع باینری، ابتدا باید آنرا Encode کنید. بهمین شکل باید تا آخر، پس از یک Select، داده رو هی Encode/Decode کنید!
سومیش: همه جداول را قفل می کنه! اکثر پایگاه های داده جداول انفرادی(یا حتی سطر ها) رو در حین انجام عملیات قفل می کنند، اما SQLite خفنه و بخاطر کاربردش، همه پایگاه داده رو در حین عملیات قفل میکنه . که این Read/Write همزمان رو بسیار کند میکنه! و مشکلات عمده و بزرگ دیگه ای از این قبیل رو بهمراش میاره!
پس هرگز از SQLite برای نرم افزار های سنگین(با داده های سنگین) استفاده نکنید!

۱۵–  ***** بعد از هر بار استفاده از متغیرها، آرایه ها، شی ها، کلاس ها و غیره… اگر دیگر مقدار آنرا آدرسی دهی نمی کنید اون رو خنثی(یا آزاد) کنید. با این کار سرعت عمل حافظه و پردازش اطلاعات و امنیت اطلاعات رو بالا می برید(این امر در مورد دیگر زبانهای برنامه نویسی هم صدق می کنه).
در PHP:

با دستور ()unset.

مخصوصاً درخواستهای HTTP رو! مثل

$_GET, $_POST, $_REQUEST

. این طوری از Steal و Sniff کردن مقادیرشون هم جلوگیری میشه(تا حد زیادی).

۱۶– اگر به قاعده های توابع موجود در بسته PCRE مسلط نیستید یا به صحت قواعدتون شک دارید برای فیلتر کردن ورودیها/خروجیها استفاده نکنید. اینها توابعی بسیار دقیق در عین حال خیلی حساس هستند. از توابع خود بسته Standard استفاده کنید. بهینه تر هم هست(اگر نیازی به قواعد ندارید).
حتی سرعت برخی توابعی که در بسته Standard هستش از توابع موجود در بسته PCRE خیلی بیشتره! نمونش: سرعت عمل تابع str_replace نسبت به تابع preg_replace، دقیقاً ۲۰% بیشتره(با مثال هم نشون میدم).

۱۷–  در زبانهای برنامه نویسی استاندارد(به غیر از VB و +A شاید Delphi) وقتی شما دستوری رو می نویسید و اجرا می کنید، حافظه پایان اون دستور رو ; یا همون نقطه ویرگول می دونه و یکی از ریز دلایلی که باعث شد استاندارد معرفی بشن همینه.
عدم رعایتش باعث: کندی در پردازش، آسیب پذیری، سردرگمی در بررسی اولیه صحت دستورات، اشغال فضای حافظه(غیر قابل تخلیه)، بروز خطا(در نرم افزارهای سنگین) و از این قبیل هستش!
مثال صحیح(تکرار):

if($_X)
{
};for( $_X; …)
{
};if( $_X): …
endif;for( $_X; …): …
endfor;class X
{
};

۱۸– حتاامکان همه پارامترها، مقادیر، دستورات و غیره… رو تعریف کنید و بحالت پیش فرض رهاش نکنید تا خرابکار(خارج از نرم افزار) سو استفاده و تعریفش نکنه!

۱۹– اگر بیش از ۳ تابع دارید که در یک زمینه فعالیت می کنن همه رو در یک کلاس قرار بدید. هم ایمنیش بیشتره(براحتی فراخونی نمیشه)، هم Handling کردنش و هم قدرت پیمایشش. من خودم قبلاً به دلیل سرعت بیشتر تابع، شاید تا ۵ تابع رو هم کلاس نمی کردم مگر اینه توابع سنگینی بوده باشن. ولی از وقتی از شامپو کلاس استفاده می کنم(ریزش موهام ۲ برابر شده ، خیلی خوبه) کارمم تمیز تر شده .

۲۰–  قبل از استفاده از کلاس، تابع و بسته از وجودش مطلع بشید.  حتماً حتماً!
مثال صحیح:

if(!extension_loaded(’standard’)): @exit(‘Extension Standard not loaded.’);
elseif(!extension_loaded(‘mysql’)): @exit(‘Extension MySQL not loaded.’);
elseif(!extension_loaded(‘pcre’)): @exit(‘Extension PCRE not loaded.’);
elseif(!extension_loaded(’session’)): @exit(‘Extension Session not loaded.’);
elseif(!class_exists(‘Tehran’)): @exit(‘Class Tehran does not exist.’);
endif;
و…
if(function_exists(’settype’)): settype($Str_Input, ’string’);
else: (string)$Str_Input;
endif;

۲۱– الفبای کد نویسی ایستا!
بین(صحیح):

<input name="InpTxt_Username" type="text" value="" maxlength="15" size="15" id="InpTxt_Username">

و (غلط):

<input type="text" name="InpTxt_Username" id="InpTxt_Username">

خیلی تفاوت و جای سو، استفاده هست!
حتی بین پارامترهای CSS(غلط):

overflow: hidden; width: 250px; height: auto;

و(صحیح):

width: 250px; height: auto; overflow: hidden;

همچنین بین(صحیح):

$_REQUEST['FormName'], $_REQUEST['SubmitButtonName',...

و(غلط):

$_GET['FormName'], $_GET['SubmitButtonName'],…

خیلی تفاوت و جای سو استفاده هست!
پس در نوشتن اینها(حتی اگر خودکار Insert می شوند) دقت کنید!

۲۲–  از متد Protected/Public/Private به جای متد Var استفاده کنید. متد Var که معادل Public در PHP 5 هستش منسوخ شده و سطح ایمنی بسیار پایینی برای محافظت متغیر های داخلی داره. پس حتاًالمکان از این متد استفاده نکنید.
شاید هم در نگارش های بعدی PHP(به غیر از Alpha و Beta) بکلی حذف شود! انشاا…

۲۳– حتاامکان از دستورات ::Self و ::Parent در کلاس والد برای دستیابی به اعضا و غیره…، به جای ::ClassName استفاده کنید. در عمل و ظاهر تفاوتی ندارند ولی در باطن(حافظه) خیلی فرق دارند(پشمایش کلی انجام میده).

۲۴–  آسیب پذیری مشترک و همگانی!
ورودی و خروجی پارامترهای URL رو چک و فیلتر کنید. مطمعن شوید که مثلاً

/index.php?Module=News&Action=Show&Identity=1&Valid =True…

، در اینجا Module از نوع حروف(Alphabetic) به طول ۲۵۵ کاراکتر، و Action هم از نوع حروف(Alphabetic) با طول ۲۵۵ کاراکتر و Identity از نوع عدد(Integer) با طول ۱۰، و Valid از نوع Boolean هستش! این نکته ساده رو اغلب رعایت نمی کنن و بارها بارها بارها آسیب های جدی در نرم افزار هایشون بصورت مکرر پیش میاد.
همین الان در همین تالار خیلی ها وبسایتهایی دارند که از این نقطه آسیب پذیرند!!

۲۵– خروجی ها رو به نوع مربوطش حتماً حتماً حتماً تبدیل کنید.
مثلاً:

return((array)$_Ary_Output);

،

return((string)$_Str_Output);


اگر هم نرم افزارتون قابلیت تغییر Template/Theme رو داره، در آخر خروجی HTML یا همون Echo، از دستور

@exti(”);

جهت پاکسازی نهایی(آخر) بعد از خودش استفاده بکنید.
دسترسی فایلها تون رو هم به ReadOnly تنظیم کنید. حتی index.html ها در پوشه های خالی!

۲۶–  اگر از short_open_tag مثل <؟ ؟> استفاده می کنید از فعال(On) بودن این Option در راس نرم افزارتون مطمعن بشید:

@ini_set(’short_open_tag’, ‘on’);

این Option در تعداد بیشماری از Server ها، بصورت Off هستش!

۲۷– حتاامکان از بسته PEAR :: Db استفاده نکنید!
این بسته ۲ مزایا داره که == ۲ معایبش… چون PEAR :: Db با PHP بکار گرفته میشه،
پس ۱: لایه ای که در PHP نوشته می شود از توابع داخلی خود PHP کند تر هست! مخصوصاً اگر بدون کش opcode اجرا شود. که اغلب می شود. نمی دونم چطوری، ولی فکر کنم با دعا جادو!
پس ۲: لایه اضافی کد، پیچیدگی و احتمال خطا را افزایش میده و در نتیجه آسیب پذیر میشه.
من، برای خودم هیچ کدوم از بسته های PEAR رو قبول ندارم. مخصوصاً بسته های Filtration Validation Db. پیشنهاد می کنم شما هم نداشته باشید.

۲۸ حملات DOS!
ساده ترین و عامیانه ترین عواملی که باعث میشن: پهنای باند پایین، پیکربندی نامناسب سرور وب و استفاده از نرم افزار های سنگین(نیوک ها، تالار/انجمن ها…)(برای کار های سبک) و غیر استاندارد هستش!
راه حل ها(در مورد همه زبانهای تحت وب صدق میکنه): پهنای باند حداقل ۵۰۰ مگابایت، محدود کردن حجم هر بسته(HTTP post) نسبت به پهنای باند، محدود کردن حجم هر درخواست(Body request) نسبت به پهنای باند، محدود کردن حجم Upload فایل نسبت به پهنای باند، استفاده از فشرده سازی محتوا(Output)/Cache، محدود کردن زمان Excute نرم افزار(مثلاً ۲۵ ثانیه)، بهینه سازی/استاندارد سازی محتوای Client-side، انتقال ندادن خطاهای HTTP به صفحات اصلی(در غیر این صورت یک Referer خطرناک هم خواهید داشت)، استفاده از فرمت های مناسب(JPG, JPEG, JPE…) تصاویر، Handing کردن Repetition/Duplication ها، محدود کردن ترافیک خارجی با استفاده از IP range و…
محدود کردن ترافیک با استفاده از IP range: در وبسایتهای داخلی، طبیعتاً نیازی به ترافیک کشورهای خارجی نیست(اعم از Spam/Bot/Visitor…)! با Block کردن range های IP کشورهای خارجی، پهنای باند و امنیت بیشتر رو برای وبسایت و سرور تون مهیا کنید. مثل روسیه، عربستان، افغانستان، ترکیه و…

۲۹– پروتکل WAP
25% برنامه نویسان با این پروتکل آشنایی ندارند! ۵۰% آشنایی دارند ولی اهمیتی نمیدن! ۲۵% می شناسن و اهمیت میدن…
تنها چیزی که میشه گفت: این پروتکل همون قدر مفید و قدرتمند هستش/همون قدر هم خطرناک!
فقط چند پیشنهاد: یا کلاً اجازه ورود رو بهش ندید(ارزشش رو داره) یا تماماً Header رو پاکسازی کنید(کمی سخته) یا فقط دسترسی Browse بهش بدید(کار کشته میطلبه).

۳۰– برای جلوگیری از ورود کاراکترهای مخرب UTF/Unicode به جداول Latin، از Option زیر برای ساختن جدول استفاده کنید(در مورد همه Database ها صدق میکنه):

charset= utf8

31– از قرار دادن فضا های خالی بی مورد و Comment های بیجا و نامناسب خودداری کنید. اینها تقریباً ۱۵% از حجم کل نرم افزارتون رو میگیرند!(Web programming میکنید نه Desktop programming).

32– حتالمکان توابع رو در کلاس بصورت static تعریف کنید، چراکه سرعت پردازش/Compile رو بسیار افزایش میده(مخصوصاً توابع طولانی و سنگین).

۳۳– به هیچ وجه از دستور print استفاده نکنید(++۹۹۹۹E+ بار گفته شده). دلیلتون برای استفاده چیه؟!

۳۴– در هنگام نصب جداول از بودن یا نبودنش مطلع بشید تا هنگام نصب/پیکربندی با خطا مواجه نشین. مثلاً:

drop table if exists `xxxxx`;
create table if not exists `xxxxx`;

35– حتاالمکان برای Database تون Password تعیین کنید.
اغلب Database ها بصورت پیش فرض Password هایی برای مدیر دارند، که خرابکار با بدست آوردن Username براحتی وارد Database خواهد شد و…!!
پس برای Database تون Password تعیین کنید.

۳۶– تنضیمات PHP:
register_globals رو Off قرار بدید(++۹۹۹۹E+ بار گفته شده).
session.auto_start رو ۰ قرار بدید.
default_mimetype رو text/html قرار بدید(سرعت بیشتر).
display_errors رو ۱ قرار بدید.
بهتره log_errors رو Off قرار بدید.
بهتره DATABASE.allow_persistent رو Off قرار بدید.
بهتره DATABASE.max_persistent رو ۱- قرار بدید.
حتاامکان DATABASE.default_user و DATABASE.default_password رو خالی بزارید.
حتاامکان session.hash_function رو ۱ قرار بدید(SHA1).
session.hash_bits_per_character رو ۵ قرار بدید.
در حالت معمولی دلیلی ندارید که safe_mode رو On قرار بدید.

۳۷– یک فایل htaccess درست کنید(برای نرم افزارتون) و تنظیمات زیر رو درونش قرار بدید(در حالت عادی):

<Files .htaccess>order allow,denydeny from all</Files>

Options All -Indexes -ExecCGI -MultiViews

DirectoryIndex index.php index.html

AddDefaultCharset utf-8

<FilesMatch "\.(php|phphtml|html|xml)$">Header unset cache-control</FilesMatch>

<IfModule sapi_apache2.c>php_value register_globals 0php_value session.auto_start 0</IfModule>

(این فایل رو در پوشه(Folder) اصلی نرم افزار قرار بدید.)

۳۸محتویات تمام فایلهای Index.html یا Index.php یا Index.* در پوشه های خالی رو پاک کنید و فایل رو خالی از هر چیزی کنید…
حداقل اگر ۲۰ پوشه داشته باشید در هر ۲۰ پوشه ۵ پوشه دیگر و… و در هر فایل Index حداقل ۵۰ کیلوبایت اطلاعات، ببینید چه حجم زیادی از نرم افزار رو میگیرن؟!(Web programming میکنید نه Desktop programming)

39– اگر نرم افزارتون قابلیت Multi language/چند زبانه رو داره، هیچ وقت یک فایل رو مختص تمام این کار قرار ندید و در همه جا همون رو فراخوانی نکنید(خیلی از نرم افزارهای معروف و مثلاً استاندارد اینکارو میکنن)! در صورتی که نیمی از متغیرها بی استفاده تعریف و Load میشن!! و دیگه Unload/Unset هم نمیشن!!
باید مثلاً ۱ پوشه به نام زبان درست کنید و درونش بخش بخش فایل های Language رو قرار بدید. مثلاً ,menu.php ,events.php ,global.php index.php ,login.php,…

۴۰– هیچ وقت از آرایه/متغیر سراسری GLOBALS$/global استفاده نکنید. این دستور به صورت Scope تعریف و ارجاع می شه! و ایمنی خیلی پایینی هم داره. همچنین از ()UnSet هم پشتیبانی نمی کنه(تجسم خلاق کنیم حذفش کنن…).

۴۱ بهتره هیچ وقت از include و include_once استفاده نکنید! دلیلتون برای استفاده چیه؟!

۴۲ حتاالمکان آدرس کامل(Path) رو برای ضمیمه هر فایلی بنویسید. این کار سرعت پیدا/Solve کردن Path رو توسط سرور افزایش میده(Steelsheet ها، JavaScript ها، require ها و…).

۴۳ بعد از نصب/پیکربندی نرم افزار، حتماً حتماً پوشه/فایل Install رو حذف کنید!

۴۴ حتاامکان از دستور switch بجای چند شرطی if استفاده کنید. اینکار سرعت پردازش/Compile رو افزایش میده.

۴۵– حتالمکان از @ برای ignore کردن خطا(Error suppression) در توابع/دستورات طولانی/سنگین/پر کاربرد استفاده نکنید! این کار سرعت سرور وب رو برای پردازش/Compile خیلی کاهش میده!!

۴۶– متغیر ها، آرایه ها، درخواستهای HTTP و… رو بعد از استفاده حتماً حتماً Unset/خنثی کنید!

۴۷– کدها/اسکریپتهای کوتاه رو در فایل HTML قرار بدید. این کار سرعت سرور وب رو برای پردازش/Compile خیلی افزایش میده.

۴۸ بعد استفاده از session حتماً حتماً اون رو destroy و unset کنید!!
session_unset و session_destroy
اغلب PHP نویسان به session_destroy کفایت میکنن!! در صورتی که unset یه چیزه destroy چیزه دیگست…

و آخر اینکه مواظب تصاویری که Upload میشن باشید!!
این مساله بیشتر در مورد فرم های ثبت نام!!، فرم های استخدام!! گالری های تصاویر!! و امثالش صدق میکنه.
باید مطمعن بشید که فایل Upload شده تصویری هستش! در غیر این صورت با همچین چیزی مواجه میشید:
مثال ساده محتوای فایل hack.gif

<?php@system($_REQUEST['Command']);?><?phpworm, cookiestealer...?>

برای جلوگیری از اینکار سایز/اندازه/پیکسل تصویر رو بگیرید… اگر فاقد اینها بود فایل تصویری نیست.
امیدوارم این مطلب بسیار کاربردی و مهم مورد استفاده شما قرار بگیرید، انشاء الله آرایه قلبتون null نباشه length  اش هیچ وقت هم صفر نباشه
پ.ن : اگه اصلا نمی فهمید این چیزهایی که نوشته شده چه معنی می دهد، پس در نتیجه این مطلب برای شما نوشته نشده است.

Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

23 نظر

  1. سلام خسته نباشد! مطالب سایت بسیار عالی بود دستتون درد نکنه!

  2. خیلی عالی بود، خدا قوت.

  3. خسته نباشی بهروز جان
    جالب بود
    ولی من اون قسمتی که گفته بودی فایل های index.html و index.php را از پوشه ها حذف کنید را اصلا قبول ندارم چون در این صورت افراد مبتدی هم می توانند به قسمتی از محتویات داخل پوشه و لیست فایل های داخل پوشه دسترسی پیدا کنند ، جوابش رو حتما بده .
    با تشکر

    • سلام ابوالفضل عزیز
      این که گفتم index.html و index.php را از پوشه ها حذف کنید به این معنا نیست که محتوایات فایل ها رو در اختیار کاربران قرار دهید
      تمام این کارها با نوشتن یک خط کد در .htaccess (آپاچی) مربوط به root وبسایت قابل انجام هست و به راحتی امکان مشاهده محتوایات تمام پوشه ها از دید کاربران محدود می شود
      برای تکمیل صحبت هام کد رو در زیر قرار می دهد

      IndexIgnore *
      

      این کد می بایست در فایلی با نام .htaccess بر روی سرور قرار گیرد…

      موفق و پیروز باشید

      • خیلی ممنون از پاسخت
        نظرت در مورد جستجوگر پارسی که ساختم رو برام بفرست . آدرسش وب سایت نظر قبلیمه ! فقط هنوز ایندکس هامو شروع نکردم . با آی دی من در تماس باش .
        آی دی من : goodarzimail

  4. خیلی چیزا رو بی دلیل گفتی، من نمی تونم قبول کنم – بعضی هاشم بی توضیح گفتی، بازم نمی تونم قبول کنم:
    =>>> ۶- هرگز از Cookie/Session برای ذخیره کلمه رمز یا مقادیر نمایشی استفاده نکنید(قابل تغییر هستند).
    ->خب بجاش چی استفاده کنیم؟ مقادیر نمایشی منظورت چیه؟
    =========================
    =>>> بهتر و ایمن تره اگر تمامی تگ ها و بلاک ها رو کامل مشخص کنید و کامل ببندید
    -> مگه میشه تگ ها رو نبست؟
    =========================
    =>>> با دستور ()unset.
    اگه آخر هر صفحه php تابع die() رو بنویسیم، همه متغیر ها خودکار آنست نمی شوند؟
    =========================
    =>>> حتی بین پارامترهای CSS(غلط):
    overflow: hidden; width: 250px; height: auto;
    و(صحیح):
    width: 250px; height: auto; overflow: hidden;
    -> این که همونه، فقط جاشون فرق کرده، تازشم، توی css چه حمله ای می تونند به وب سایت داشته باشند؟
    =========================
    =>>> محدود کردن حجم هر بسته(HTTP post) نسبت به پهنای باند، محدود کردن…..
    -> این کارا که گفتی چطوری انجام میشه؟دست ما هست یا دست سرور؟
    =========================
    =>>> فقط چند پیشنهاد: یا کلاً اجازه ورود رو بهش ندید(ارزشش رو داره) یا تماماً Header رو پاکسازی کنید(کمی سخته) یا فقط دسترسی Browse بهش بدید(کار کشته میطلبه).
    -> چطوری؟ چطوری؟ چطوری؟
    =========================
    =>>> 35- حتاالمکان برای Database تون Password تعیین کنید.
    -> مگه واسه mysql میشه؟منظورت همون رمزیه که باهاش به دیتابیس متصل می شیم یا یکی دیگه بذاریم؟
    =========================
    =>>> ۴۵- حتالمکان از @ برای ignore کردن خطا(Error suppression) در توابع/دستورات طولانی/سنگین/پر کاربرد استفاده نکنید!
    -> قبلش نوشتی برای هر دستور @die() و @exit() ازش استفاده کنید. اینا جز اونان یا نیستند؟
    =========================
    در کل ممنون، به معلوماتم اضافه کردی
    اگه حال داشتی و به کامنت ام جواب دادی، یه ایمیل بده بیام بخونمش

    • سلام ، ممنون از دقت نظرتون
      یک جواب کلی در مورد سوالات شما وجود دارد این هست که همه این موارد اشاره به روش های بهتر هست و در بعضی موارد دیدگاه می تواند بر مبنای نکته ریز و یا کاربردی و یا آسان نمودن ، سریع ، امن و… نمودن برنامه باشد

      مورد اول :
      Cookie/Session به راحتی قابل تغییر و دریافت هستند و اگر برنامه شما بر پایه مستقیم این اطلاعات باشد می تواند مساله هایی به وجود آورد ، برای ذخیره اطلاعاتی مثل رمز ها بهتر هست استفاده نشود

      مورد دوم :
      بله همان طور که می دانید می توانید حلقه های و شرط و .. را بدون {} هم بنویسید ، که بهتر هست ننویسید و به صورت کامل بنویسید

      مورد سوم :
      بله به صورت خودکار این کار انجام می شود ولی انجام این کار روند کار را سریع تر و بدون اشکال احتمالی (تر) می کند

      مورد چهارم :
      خوب اولا ترتیب در نوشتن Css شاید به نظر مهم نباشد ولی در کد تاثیر گزار هست
      در مورد حمله می توان به مثلا مخفی کردن باکس مربوطه به تبلیغات مثلا با یک display:none; و… اشاره کرد

      مورد پنجم :
      تنظیمات ini ویا توسط چک کردن ورودی ها

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

      مورد هفتم :
      در این مورد استفاده نکردن از رمزهای مثل ۱۲۳۴۵ و … مد نظر می باشد

      مورد هشتم :
      در این موارد احتمال ایجاد خطا در بعضی ورژن های پی اچ پی وجود دارد و می توان از @ استفاده کرد ، البته استفاده نکردن این موارد هم مورد ندارد.

      باز هم سپاسگزارم از دقت نظر شما و وقتی که برای نوشتن نظر صرف کردید

      موفق و پیروز باشید

  5. چقدر بیکاری تو دیگه 😀 شوخی کردم، ممنون که جواب دادی:
    => مورد اول: بجاش از چی استفاده کنیم؟
    مثلا می خوایم وقتی کاربر لاگین کرد، اطلاعاتش بمونه، کجا ذخیره کنیم؟
    => مورد چهارم :
    از کجا بدونیم ترتیب درست چیه؟ چه تاثیری در کد داره؟
    =================
    نه بابا خواهش می کنم، تازه فهمیدم یکی بیکار تر از من هم هست
    خیلی ممنون

    • سلام دوست عزیز
      نظر همه دوستان ارزش ویژه ای برای بنده دارد 😀
      مورد اول :
      بهتر هست اصلا رمز را به این صورت نگه داری نکنید و اگر نیاز هست به صورت کد شده طبق الگوریتم خاص خودتان در Session ها ذخیره کند و هنگام استفاده از آن دی کد نمایید

      مورد چهارم :
      بیشتر این تاثیر در خوانایی کد هست ، البته این ترتیب های برای هماهنگ کردن با مروگرهای قدیمی گاهی اوقات نیاز می شود، برای این موارد بهتر هست از نرم افزار های معتبرسازی کدهای استایل بر اساس استاندارد مورد استفاده شما در صفحه خودتون استفاده کنید

      این ترتیب مثلا قرار دادن hidden در ابتدا اجازه می دهد که با قرار دادن یک خط کد در انتها این مورد را به مورد دیگر تغییر دهید ، همان طور که می دانید Css آخرین تعریف را مد نظر قرار می دهد
      برای اطلاعات بیشتر در این موارد به کتاب های اختصاصی CSS مراجعه نمایید

      موفق و پیروز باشید

      موفق و پیروز باشید

  6. سلام خسته نباشید چطور می تونم عکس اپلود کرد یا تابع کپی چطور در php باید استفاده کرد متشکرم

  7. salam
    fogholadeh bod rasti nazaret rajeh cake PHP cheh?

  8. ممنون از مطلبتون.
    فرق mysql_escape_string و mysql_real_escape_stringچیه؟
    و اینکه @ چه مواقعی ازش استفاده میشه و کلا مفهومش چیه و کی ازش استفاده میشه؟
    کلمه final تو final class Name چه کاری انجام میده؟
    و یه سوال خیلی مهم اینکه میتونیم این فایلهای dll که مثلا داخل پوشه phpداخل xampp هست رو باز کنیم؟ آخه میخوام یه الگوریتم کدگذاری بنویسم فک کنم باید dllباشه؟ و اینکه میتونین تو این مورد کمکم کنید چجوری بنویسم منبعی آموزشی چیزی؟

    • سلام
      ۱ – فرقی ندارند
      ۲ – مربوطه به سکوت هست در برابر خطاهای احتمالی هر جا بخواهید در صورت خطا خطایی صادر نشود ، بهتر هست کمتر استفاده شود
      ۳ – به مباحث مربوط به شی گرایی در پی اچ پی مراجعه شود
      ۴ – این ها اکستنشن هستند که بر روی سرور اختصاصی امکان بارگزاری دارند ، و برای نوشتن آنها استاندارد خاصی وجود دارد ، شما می توانید هر الگوریتیمی را درون خود پی اج پی نیز پیاده سازی کنید ، به هر حال این اکستنشن ها برای لینوکس و ویندوز با فرمت های متفاوتی می باشد و می بایست بعد از ساخته شدن سرور اختصاصی داشته باشید تا بتوانید آن را روی سرور هم قرار دهید ، بر روی شبیه ساز لوکال هاست شما به دلیل ویندوزی بودن فایل dll مربوطه وجود دارد

      موفق و پیروز باشید

  9. سوال من رو جواب ندادین. ممنون

  10. درود دوست عزیز…
    گرچه من متن مقاله ی شما رو با مدت زیادی-شاید ۳-۴ سال تأخیر خوندم، اما بسیار نکات ارزنده ای بود که چندتاییش رو شخصأ تجربه کردم و می تونم نتیجه بگیرم که اکثر قریب به اتفاق اون ها صحیحه و در بهبود کدهای ما نقش داره.
    امیدوارم بتونیم بیشتر با هم مکاتبه و گفتگو داشته باشیم تا بیشتر از نظراتت بهره مند بشم.
    به خالق مهر می سپارمت.
    کیارش…

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه