PDA

نسخه کامل مشاهده نسخه کامل : آموزش برنامه نویسیPHP



Mohammad King
21-10-2009, 15:44
سلام

این تاپیک را زدم که داده های خودم را به شما هم نشون بدم.

خب اگر دوستان دیگری هم هستند که از php چیزی بلدن بیا در این تاپیک نشون بدن.

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

موفق باشید

Mohammad King
21-10-2009, 15:45
امنیت در Php

برای شروع از مبحث درست عرض یابی نشدن متد های GET و POST شروع میکنم

برای مثال به قطعه کد زیر نگاه کنید که برای لوگین طراحی شده :



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخوب همون طور که میبینید هیچ مشکلی نیست و فقط با دونستن کلمه ی عبور میتونید وارد بشید و پیغام شما وارد شدید رو ببینید

کلمه عبور = (nic واقعی خودم یا همون asadhacker )

خوب اگه به کد نگاه کنید میبینید که کلمه عبور کاملا" هش شده و نمیشه پیچوندتش ولی اگه یکم دقت کنید متوجه میشید زمانی که پسورد درست وارد بشه اونوقت متغیر login مقدار یک میگیره و شرط برقرار میشه و لوگین کامل میشه ! خوب برای دور زدن این کد تنها کاری که ما باید بکنیم اینه که بیایم به متغیر login مقدار یک بدیم !

به قطعه کد زیر نگاه کنید :




برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخوب با استفاده از این Exploit شما میتونید بدون داشتن پسورد وارد بشید ! یعنی شما اگه پسورد رو اشتباه وارد کنید توی برنامه کنترل میشه توی این خط :



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدکه اگه اشتباه بود متغیر لوگین مقدار دهی نمیشه ولی بعد تو خط هفتم از فایل Exploit میبینید که مقدار 1 رو برای متغیر login ارسال میکنه و برابر 1 میشه و دیگه باقی
ماجرا ...

برای روشن تر شدن این موضوع بیایم به درخواست های http که از سمت فایل exploit ارسال میشه یه نگاهی بندازیم ! :



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبه خط آخر یه نگاهی بندازید ! به متغیر login و password مقدار دهی شده !


نکته برای تازه کار ها : توی فایل Exploit قسمت اکشن که نوشته شده login.php شما باید آدرس فایل راه دور رو به طور کامل وارد کنید از اول [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] یا [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] تا آخر


حالا سوالی که پیش میاد اینه که اگه به فایل login.php دقت کنید متوجه میشید که ما برای اینکه بتونیم مقداری که از فرم Html به سمت php ارسال شده استفاده کنیم باید از $_POST استفاده کنیم که در خط 16 ما با استفاده از $_POST مقدار ارسالی از فرم html رو توی متغیر پسورد قرار دادیم ! ولی ما مقدار متغییر لوگین رو برابر $_POST قرار ندادیم که هر داده ای که از فرم های خارجی بیاد به این متغییر مقدار بده ! پس چطور این اتفاق افتاد ؟؟؟ !

خوب جواب این سوال توی همین متن نوشته شده


در مورد روش جلو گیری هم راه های زیادی وجود داره که میشه از جلسه ها یا کوکی ها استفاده کرد

Mohammad King
21-10-2009, 15:49
خصوصیات یك سرور خوب برای شما كه php كار هستید

خصوصیات یك سرور خوب برای شما كه PHP كار هستید

من در چند روز اخیر برای نصب یك برنامه بر روی وب سایت خودم مشكلات زیادی با شركت ارائه دهنده خدمات هاستینگم پیدا كردم و به این نتیجه رسیدم كه ای كاش قبل از بستن قرارداد با این شركت شرایط آنها را به دقت بررسی می كردم، بعد مقاله ای خواندم در مورد این كه چگونه یك شركت ارائه دهنده خدمات هاستینگ خوب بر اساس نیازهایمان پیدا كنیم، من هم بد ندیدم این مقاله رو ترجمه كنم و در اختیار شما قرار بدم.
PHP و به طور عام LAMP كه تركیبی از Linux, Apache, MySQL و PHP/Perl/Python در سطح بسیار گسترده ای توسط شركتهای هاستینگ و با قیمتهای مناسب ارائه می شود، شما خیلی آسون می تونید با چیزی كمتر از ماهیانه 3 هزار تومان سرویسی رو در اختیار بگیرید كه 90 درصد احتیاجات شما رو برطرف كنه، اما مسلما در تمام سرویسهای ارائه شده امكانات PHP ای كه در اختیار شما قرار می گیرند یكسان نیستند و تا حد بسیار زیادی به تنظیمات فایل php.ini و همچنین extension های نصب شده بستگی دارد پس یك انتخاب خوب می تونه شما رو از شر دردسرهای احتمالی در آینده نجات بده!
علاوه بر توجه به این موارد دونستن اینكه آیا admin شما به تمام سوالات و مشكلات شما پاسخ می ده و یا اینكه ازآیا سواد كافی برخورداره هم بسیار مهم هستند و شما می تونید این اطلاعات رو از مشتریان قبلی سرویس دهنده به دست بیارید، خوب حالا به موارد عمومی ای كه شما باید هنگام خرید دقت كنید می پردازم:

تركیبی از PHP و Apache 1.3
از دیدگاه كارایی و مطمئن بودن این زوج بهترین تركیب را به دست می دهند، از سرویسهایی كه از Apache 2.x استفاده می كنند بپرهیزید، با توجه به تمام كارایی و قدرت Apache 2 این نسخه هنوز برای كار با PHP به طور كامل آماده نشده، همچنین ازمدیر سایت بخواهید كه توزیع لینوكس نصب شده بر روی هاست رو به شما اطلاع دهد، هر چی بیشتر بدونید كه با چه نرم افزارهایی سروكار دارید بهتره

آیا اجازه دسترسی SSH به سرور در اختیار شما قرار می گیرد؟
SSH یك ارتباط امن به سرور رو برای شما فراهم می كند كه با استفاده از اون می تونید كارهای مختلفی رو با استفاده از command line لینوكس و یا SCP ( كپی امن) انجام بدید، از هر هاستی كه به شما اجازه دسترسی از طریق telnet رو میده پرهیز كنید، برای كاربران ویندوز Putty[1] می تونه یك محیط command line عالی رو روی SSH به وجود بیاره، همچنین WinSCP[2] مكانیزم امنی رو برای انتقال فایلها روی SSH فراهم می كنه، اصلا از FTP استفاده نكنید چون به اندازه telnet ناامنه!

هاست یك Reseller است یا اینكه خودشون سرور رو نگه داری می كنن؟
این مهمه كه شركت ارائه دهنده خدمات یك reseller است یا نه، اگر reseller باشد درست است كه در موارد پیش پا افتاده و یا گاها اندكی پیچیده فقط و فقط با راهنمایی می توانند شما رو كمك كنند اما در واقع سطح دسترسی اونا در همون حد شماست و نه بیشتر!

میزان Overload سرور
بعضی از شركتها خیلی بیشتر از تعداد ماكزیمی كه نسیت به سیستم در اختارشون می تونن سرویس ارائه بدن، account می دن و این یعنی پایین اومدن كارآیی، بهترین مقیاس اجرای دستور uptime است ( اینجاست كه حق دسترسی به SSH معنی پیدا می كنه )، این دستور به شما مقدار میانگین Load سرویس رو میگه؛ در حالت ایده آل سرویس هرگز نباید میانگین load بالای 1 دقیقه داشته باشد، ولی هر وقت كه مشاهده كردید این زمان با بالای 5 دقیقه رسیده است، منتظر ایجاد وقفه در اجرای برنامه های PHP خود باشید

سیاست شركت برای command line ها چیست؟
مسلما دستور MYSQLDump روشی مطمئن برای Backup گیری فراهم می كنه، ولی بعضی از شركتها دستورهایی كه بیشتر از یك زمان مشخص اجرای اونها طول بكشه رو به طور خودكار kill می كنن

و در نهایت ببینید كه آیا شركت اجازه دسترسی به corn كه یك ابزار UNIX برای مدیریت كارهای batch است رو در اختیار شما قرار می ده

حالا به مواردی می پردازیم كه مربوط به PHP هستند:

آیا شما می توانید خروجی تابع phpinfo را مشاهده كنید؟
ممكن است بعضی از هاستها ادعا كنند كه این یك شكاف امنیتی است اما هاستهای حرفه ای می دانند كه امنیت همراه با ابهام [Security by obscurity] هرگز نمی تواند جایگزین امنیت واقعی شود، اطلاعاتی كه توسط phpinfo در اختیار شما قرار داده می شه هیچ مشكلی رو برای هاستی كه با استفاده از لینوكس، آپاچی و قایروالها به خوبی تنظیم شده ایجاد نمی كنه.

آیا PHP به صورت یك ماژول نصب شده است؟
از لحاظ كارآیی این نوع نصب به مراتب بهتر از CGI است.

آیا تنظیم Allowoverride در Apache به درستی تنظیم شده است؟
این تنظیم، این قابلیت رو به شما می ده كه با استفاده از فایل .htaccess تنظیمات php.ini رو تحت تاثیر قرار بدین.

آیا Safe Mode غیر فعال شده است؟
safe_mode در فایل php.ini از لحاظ تئوری كاربران را از اجرای دستورات و یا توابع مشخصی كه با بحث امنیت در ارتباط هستند منع می كند، در واقع safe_mode چیزی نیست جز یك دردسر بزرگ وقتی كه بخواهید با PHP كارهای جدی انجام بدهید!

سیاست شركت در قبال اطلاع رسانی به شما هنگام ایجاد تغییرات چیست؟
كم نیستند شركتهایی كه به یكباره تنظیمات php.ini را تغییر می دهند و مثلا register_globals رو مرتبا روشن و خاموش می كنن.

از PHP Extensions نصب شده آگاهی بیابید.
از هاست بخواهید كه اكستنشنهای نصب شده را به شما اطلاع دهد و توجه داشته باشید كه اكستنشن XSLT حتما نصب شده باشد و همچنین اطمینان حاصل كنید كه این اكستنشنها همیشه در دسترس خواهند بود.

و در نهایت میزان اطلاعات شركت رو نسبت به PHP بسنجید، مسلما شما از اونها توقع ندارید كه برنامه های كامل با استفاده از PHP بنویسن اما اگر اونها تا حدودی با PHP آشنا باشند نیازهای شما را بهتر درك می كنند

[1]
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
[2]
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Mohammad King
21-10-2009, 15:50
آموزش کامل نصب PHP بر روي Windows
مقدمات نصب PHP (مشترک در تمامی حالات)
آخرین نسخهء PHP را از سایت رسمی PHP به آدرس
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید می گیریم. (توجه کنید که نسخهء installer را نگیرید.)
فایل فشرده را باز کرده و در شاخهء دلخواه (در اینجا c:\php) می ریزیم.
به شاخهء c:\php رفته و شاخه ای با نام tmp و شاخه ای با نام uptmp بسازید. (این نام ها اختیاری هستند)
فایل php.ini-recommended که در شاخهء c:\php وجود دارد را با notepade باز کرده، register_globals را پیدا کرده و مقدار جلوی آن را on کنید. سپس متغیر upload_tmp_dir را پیدا کرده و مقدار c:\php\uptmp را در جلوی آن قرار دهید و متغیر session.save_path را نیز پیدا کرده و مقدار c:\php\tmp را جلوی آن بنویسید.

نصب PHP 4 روی IIS به صورت CGI
فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:\php\extensions تغییر دهید و سپس متغیر cgi.force_redirect را پیدا کرده، ";" جلوی آن را حذف کنید و مقدار آن را برابر با صفر قرار دهید.
فایل php.ini-recommended را به php.ini تغییر نام داده و در شاخهء ویندوز خود بریزید.
در IIS خود به برگهء Home Directory رفته و سپس روی دکمهء configuration کلیک کنید. در قسمت App Mapping مقادیر زیر را وارد کنید:



Executable : C:phpphp.exe
Extension : .php


سرور را دوباره راه اندازی کنید.

نصب PHP 5 روی IIS به صورت CGI
فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:\php\ext تغییر دهید، سپس علامت ";" را از جلوی خط extension=php_mysql.dll بردارید و سپس متغیر cgi.force_redirect را پیدا کرده، ";" جلوی آن را حذف کنید و مقدار آن را برابر با صفر قرار دهید.
فایل libmysql.dll که در شاخهء c:\php وجود دارد را در شاخهء ویندوز خود کپی کنید.
فایل php.ini-recommended را به php.ini تغییر نام داده و در شاخهء ویندوز خود بریزید.

در IIS خود به برگهء Home Directory رفته و سپس روی دکمهء configuration کلیک کنید. در قسمت App Mapping مقادیر زیر را وارد کنید:



Executable : C:phpphp-cgi.exe
Extension : .php



سرور را دوباره راه اندازی کنید.

نصب PHP 4 روی IIS به صورت ISAPI
فايل‌هاى c:\php\php4ts.dll و c:\php\sapi\php4isapi.dll و c:\php\dlls\*.dll را در شاخه system ویندوز خود ذخيره كنيد.
فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:\php\extensions تغییر دهید و سپس متغیر cgi.force_redirect را پیدا کرده، ";" جلوی آن را حذف کنید و مقدار آن را برابر با صفر قرار دهید.
فایل php.ini-recommended را به php.ini تغییر نام داده و در شاخهء ویندوز خود بریزید.

در IIS خود به برگهء Home Directory رفته و سپس روی دکمهء configuration کلیک کنید. در قسمت App Mapping مقادیر زیر را وارد کنید:



Executable : C:{WIN_DIR}systemphp4isapi.dll
Extension : .php



سپس به برگهء ISAPI رفته و مقادیر زیر را وارد کنید:



Filter Name : php
Executable : C:{WIN_DIR}systemphp4isapi.dll



سرور را دوباره راه اندازی کنید.

نصب PHP 5 روی IIS به صورت ISAPI
فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:\php\ext تغییر دهید، سپس علامت ";" را از جلوی خط extension=php_mysql.dll بردارید و سپس متغیر cgi.force_redirect را پیدا کرده، ";" جلوی آن را حذف کنید و مقدار آن را برابر با صفر قرار دهید.
فایل php.ini-recommended را به php.ini تغییر نام داده و در شاخهء ویندوز خود بریزید.
فایل های php5isapi.dll و php5ts.dll که در شاخهء c:\php وجود دارد را در شاخهء system ویندوز خود کپی کنید.
فایل libmysql.dll که در شاخهء c:\php وجود دارد را در شاخهء ویندوز خود کپی کنید.

در IIS خود به برگهء Home Directory رفته و سپس روی دکمهء configuration کلیک کنید. در قسمت App Mapping مقادیر زیر را وارد کنید:



Executable : C:{WIN_DIR}systemphp5isapi.dll
Extension : .php



سپس به برگهء ISAPI رفته و مقادیر زیر را وارد کنید:



Filter Name : php
Executable : C:{WIN_DIR}systemphp5isapi.dll



سرور را دوباره راه اندازی کنید.

نصب PHP 4 روی Apache به صورت CGI
فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:\php\extensions تغییر بدهید و سپس نام فایل را به php.ini تغییر داده و به شاخهء نصب Apache منتقل کنید.
در شاخه ‌ای که Apache را نصب کرده‌اید، زیرشاخه‌ای به نام \conf وجود دارد که در آن می‌ توانید فایل [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] که مربوط به پیکربندی این برنامه است را بیابید. با یک notepad می‌ توانید این پرونده را باز کرده و تغییرات زیر را اعمال کنید.
در بخشی که ScriptAlias ها معرفی شده‌اند، سطر زیر را وارد می‌کنیم:



ScriptAlias /php/ "c:/php/"



به قسمت AddType application رفته و سطر زیر را می نویسیم:



AddType application/x-[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] .php



در بخش Action application هم این خط اضافه می ‌شود:



Action application/x-[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] "/php/php.exe"



در جلوی مقدار DirectoryIndex مقادیر دلخواه برای index شدن رو قرار می دهیم، خط شما چیزی مشابه زیر خواهد شد:



DirectoryIndex index.html index.htm index.html.var index.php



سرور را دوباره راه اندازی کنید.

نصب PHP 5 روی Apache به صورت CGI
فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:\php\ext تغییر بدهید، سپس علامت ";" را از جلوی خط extension=php_mysql.dll بردارید و نام فایل را به php.ini تغییر داده و به شاخهء نصب Apache منتقل کنید.
فایل libmysql.dll که در شاخهء c:\php وجود دارد را در شاخهء ویندوز خود کپی کنید.

در شاخه ‌ای که Apache را نصب کرده‌اید، زیرشاخه‌ای به نام \conf وجود دارد که در آن می‌ توانید فایل [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] که مربوط به پیکربندی این برنامه است را بیابید. با یک notepad می‌ توانید این پرونده را باز کرده و تغییرات زیر را اعمال کنید.
در بخشی که ScriptAlias ها معرفی شده‌اند، سطر زیر را وارد می‌کنیم:



ScriptAlias /php/ "c:/php/"



به قسمت AddType application رفته و سطر زیر را می نویسیم:



AddType application/x-[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] .php



در بخش Action application هم این خط اضافه می ‌شود:



Action application/x-[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] "/php/php-cgi.exe"



در جلوی مقدار DirectoryIndex مقادیر دلخواه برای index شدن رو قرار می دهیم، خط شما چیزی مشابه زیر خواهد شد:



DirectoryIndex index.html index.htm index.html.var index.php



سرور را دوباره راه اندازی کنید.

نصب PHP 4 روی Apache2 به صورت Module
فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:\php\extensions تغییر بدهید و سپس نام فایل را به php.ini تغییر داده و به شاخهء نصب Apache منتقل کنید.
فايل‌هاى c:\php\php4ts.dll و c:\php\sapi\php4isapi.dll را در شاخه modules در شاخهء نصب Apache ذخيره كنيد.
در شاخه ‌ای که Apache را نصب کرده‌اید، زیرشاخه‌ای به نام \conf وجود دارد که در آن می‌ توانید فایل [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] که مربوط به پیکربندی این برنامه است را بیابید. با یک notepad می‌ توانید این پرونده را باز کرده و تغییرات زیر را اعمال کنید.

در بخشی که LoadModule ها معرفی شده‌اند، سطر زیر را وارد می‌کنیم:



LoadModule php4_module modules/php4apache2.dll



به قسمت AddType application رفته و سطر زیر را می نویسیم:



AddType application/x-[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] .php



در جلوی مقدار DirectoryIndex مقادیر دلخواه برای index شدن رو قرار می دهیم، خط شما چیزی مشابه زیر خواهد شد:



DirectoryIndex index.html index.htm index.html.var index.php



سرور را دوباره راه اندازی کنید.

نصب PHP 5 روی Apache2 به صورت Module
فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:\php\ext تغییر بدهید و سپس نام فایل را به php.ini تغییر داده و به شاخهء نصب Apache منتقل کنید.
فايل‌هاى c:\php\php5ts.dll و c:\php\php5isapi.dll را در شاخه modules در شاخهء نصب Apache ذخيره كنيد.
در شاخه ‌ای که Apache را نصب کرده‌اید، زیرشاخه‌ای به نام \conf وجود دارد که در آن می‌ توانید فایل [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] که مربوط به پیکربندی این برنامه است را بیابید. با یک notepad می‌ توانید این پرونده را باز کرده و تغییرات زیر را اعمال کنید.

در بخشی که LoadModule ها معرفی شده‌اند، سطر زیر را وارد می‌کنیم:



LoadModule php5_module modules/php5apache2.dll



به قسمت AddType application رفته و سطر زیر را می نویسیم:



AddType application/x-[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] .php



در جلوی مقدار DirectoryIndex مقادیر دلخواه برای index شدن رو قرار می دهیم، خط شما چیزی مشابه زیر خواهد شد:



DirectoryIndex index.html index.htm index.html.var index.php



سرور را دوباره راه اندازی کنید.

امید متقی راد
OXYGEN Web Solutions

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

پانویس:
1- توصیهء اکید من در این زمان، استفاده از "نصب PHP 5 روی Apache2 به صورت Module" می باشد.
2- Apache را می توانید از سایت رسمی این نرم افزار به آدرس
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید دریافت کنید.
3- تمامی نصب ها مخصوص ویندوز می باشند.
4- احتمال وجود اشکال یا نقص در توضیحات وجود دارد.
5- دخل و تصرف در این مطلب وانتشار آن، مجاز نمی باشد. (انتشار بدون هیچگونه تصرفی مجاز است)
6- احتمال تکمیل شدن این مقاله وجود دارد، آخرین نسخه را می توانید از اوایل آگوست 2004 به بعد، از سایت
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید دریافت کنید.

Mohammad King
21-10-2009, 15:50
گفته های بعدی را هم خوام داد

موفق باشید