info@academyit.net 02144284207
  1. صفحه نخست
  2. مقالات
  3. امنیت سایت های php

امنیت سایت های php

 

زبان PHP یک زبان اسکریپتی است که مورد استفاده به عنوان زبان عمومی‌ و همچنین طراحی وب است. طبق تحقیقاتی که انجام شده، گزارشات نشان داده که مشهورترین و محبوب ترین زبان در بین برنامه نویسان زبان PHP است. یکی از مباحث مهم در زبان PHP، محافظت در برابر هکرها و حملات سایت ها و برنامه هایی است که با این زبان نوشته و طراحی شده اند؛ در ادامه به برخی نکات برای جلوگیری از حملات در زبان php اشاره خواهیم کرد؛

 

 

 

 

زبان PHP

 

کلمه php از عبارت Hypertext PreProcessor آمده که به معنای پیش پردازنده فرامتن است. زبان php  از لحاظ ساختاری بسیار شبیه به زبان C است و در نسخه هایی که جدیدا منتشر شده به زبان جاوا شبیه است. کدهای زبان php برخلاف زبان های HTML و جاوااسکریپت، در سرور وب هاست اجرا می‌شود. ( کدهای HTML و جاوااسکریپت با استفاده از مرورگر کاربر قابل اجراست )

 

برنامه های ساخته شده با زبان PHP

 

از نرم افزارهای معروفی که با زبان php  ساخته شده می‌توان به جوملا ، WikiMedia و یا Mambo اشاره کرد. در دنیای وب نیز بسیاری از سایت ها بر اساس زبان php نوشته شده است. زبان php دستورات ساده ای را فراهم کرده که می‌توان در انواع پایگاه داده از آنها استفاده کرد مانند؛ : MySQL، اوراکل، IBM DB۲ ،Microsoft SQL Server ،PostgreSQL و SQLite و این یکی از ویژگی های مهم زبان php  است. یکی از دلایل معروفیت این زبان، قابلیت اجراشدن با بیشتر کارگزارهای معروف  و همینطور روی بیشتر سیستم عامل ها مانند لینوکس، یونیکس، ویندوز و Mac OSX را دارد.

 

مزیت های زبان PHP

 

  • Php یک زبان opensource و رایگان است به همین دلیل یکی از مزیت های این زبان این است که هاست هایی که قابلیت اجرای میزبانی php را دارند نسبت به هاست های .NET  بسیار مقرون به صرفه تر هستند.
  • از مزیت های دیگر زبان php این است که در پلتفرم های معروفی مانند Windows , Linux و iOs اجرا می‌شود و این خیلی خوب است.
  • زبان php زبان ساده و یادگیری آن پیچیده نیست.

 

 

 

امنیت در زبان php

 

استفاده از رمزنگاری پرقدرت

یکی از الگوریتم های محبوبی که امروزه توسط برنامه نویسان php  استفاده می‌شود، الگوریتم MD5 است که در زیر به تابع آن اشاره شده؛

$hash = md5($password);

برای رمزنگاری قدرتمند خیلی نمی‌توان به تابع md5 اعتماد کرد. کاربران برای اعمال رمزنگاری بیشتر از رمزهای 5 الی 6 کاراکتری استفاده می‌کنند که این رمز با توجه به ساده بودن و پیچیدگی خاصی نداشتن با استفاده از یک حمله brute-force(  جستجوی فراگیر) به سادگی رمزگشایی می‌شود و در برخی موارد هم نیازی به حمله brute-force نمی‌باشد؛ این را هم در نظر داشته باشید که فقط با داشتن یک رمز پیچیده نمی‌توانید به امنیت رمز خود اعتماد کنید به همین دلیل برنامه نویسان برای حل مشکلات امنیت رمز از تکنیک نمک زدن به پسورد استفاده می‌کنند؛ در این روش یک عبارت نامفهوم به صورت تصادفی تولید شده و قبل از رمزنگاری به پسورد اضافه می‌شود. در روش اضافه کردن نمک به پسورد در واقع طول آن زیاد شده و پسورد پیچیده شده و از حالت سادگی در می آید و در زمان حمله جستجوی فراگیر، زمان لازم برای پیدا کردن رمز مورد نظر به شدت افزایش پیدا کرده و حتی غیر قابل انجام است.

 $salt = 'SUPER_SALTY';

 $hash = md5($password . $salt);

سعی شود در کنار استفاده از الگوریتم های نمک پاشی، از الگوریتم های رمزنگاری طولانی تری مانند؛ sha1 , sha2  و … استفاده شود که زمان مورد نیاز برای حملات جستجوی فراگیر را افزایش می‌دهد.

تابع دیگری برای رمزنگاری وجود دارد که آن تابع crypt است؛

 //string crypt ( string $str [, string $salt ] )

 crypt('FoadTahmasebi', '$2a$07$usesomesillystringforsalt$')

 $user->password = sha1(md5($password);

 

 

 

 

محافظت در مقابل درخواست های جعلی

 

CSRF که مخفف Cross Site Request Forgery و به معنی این است که از سایت های دیگر درخواست های جعلی فرستاده می‌شود؛ این مشکل یکی از آسیب های نامشخص است که به عنوان یک مشکل در نظر گرفته نمی‌شود. در واقع در این مشکل، سرور قادر نیست به درستی تشخیص دهد که آیا کاربر خودش لینک url را فراخوانی کرده یا نه؛ به همین دلیل باید از تکنیک یا مکانیسم خاصی استفاده شود یعنی زمانی که کاربر عملیات مهمی را روی پایگاه داده انجام می‌دهد باید از کاربر تاییدیه گرفته شود یا سرویسی فعال شود که هر درخواست کلیکی شناسایی شود به همین جهت از فرم ها استفاده می‌شود چون می‌توانند فیلدهای مخفی با یک عبارت تصادفی را در session نگه دارند و برای تشخیص و شناسایی به کار برده شوند. کد مربوط به آن؛

 session_start();

 $token = md5(uniqid(rand(), TRUE));

 $_SESSION['token'] = $token;

 ?>

 

 
 
 
 
 

 

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

برای هر کاربر بک نشست

سایت هایی که دارای اطلاعات محرمانه هستند و اطلاعات سری رد و بدل می‌کنند مانند فروشگاه ها، برای اینکه مطمئن شوند که یک کاربر از دو محل وارد برنامه نشده باشد، اگر کاربری از محل دوم به برنامه وارد شود، کاربری که در محل اول است به شکل خودکار از برنامه خروچ پیدا می‌کند. ذخیره کردن اطلاعات نشست در پایگاه داده و پیاده سازی آن کار سختی نیست و فقط باید در هر ورود در پایگاه داده، اطلاعات مربوط به ورود قبلی کاربر را حذف کرد.

نگهداری فایل ها و منابع مهم خارج از دایرکتوری WEB_ROOT

در زمانی که برنامه روی هاست اجرا می‌شود در حالت عادی، محل نگهداری فایل ها در پوشه زیر است؛

 /var/www/

 OR

 /home/username/www/

همه اطلاعات مربوط به دسترسی داشتن به url درپوشه www ذخیره و نگهداری می‌شود و مابقی در پوشه خارج از آن انتقال داده می‌شود تا قابلیت دسترسی برای عموم را نداشته باشد مانند فایل هایی که در بردارنده برقراری اطلاعات هستند و یا دیگر فایل ها؛

فایل های زبان PHP که توسط مرورگر فراخوانی می‌شود در مسیر زیر ذخیره می‌شود؛

 /var/www/

 و بقیه فایلها در:

 /var/outside/

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

 

غیر فعال کردن گزینه display_errors در فایل php.ini

 

خطاها پیش از اینکه اسکریپت به صورت کامل اجرا شود، اتفاق می‌ افتند و تحت فرمان هیچ دستوری نیستند؛ به همین دلیل در زمان ایجاد خطا، اطلاعات به صورت کامل نمایش داده می‌شود و نباید آنها را در محیط انتشار نمایش داد.

برای دایرکتوری ها سطوح دسترسی مناسبی تعیین شود

سطح دسترسی هر دایرکتوری با توجه به نیاز خواندن و نوشتن یک فابل باید به دستی انتخاب شود؛ البته باید برای هر عملی باید دایرکتوری جداگانه ای تعریف شود و سطح آن نیز مشخص شود به طور مثال دایرکتوری های مهمی مانند فایل های هسته ای یا فایل های کتابخانه ای باید مطمئن شوید که قابل نوشتن نباشد.

 

محدود کردن داده ها به فایل index.php

 

در زبان PHP مدرن، تنها نقطه برای ورود و اتصال به کل سایت، فایل index.php می‌باشد که سرور وب شما به دایرکتوری آن اختصاص داده می‌شود. فایل های پیکربندی شده نباید در وبسایت قرار داده شود زیرا سرور آنها را به صورت عمومی نشان می‌دهد و تنها پرونده هایی شامل جاوا اسکریپت، CSS و تصویری باید در این فایل قرار بگیرد.

برای ذخیره کردن گذرواژه از رمز عبور استفاده کنید

هیچ گاه از متن ساده برای ذخیره و نگه داری پسورد استفاده نکنید. الگوریتم هایی وجود دارد که برای تبدیل گذرواژه، از الگوی درهم سازی استفاده می‌کنند. یکی از راه های موفقیت آمیز، استفاده از تابع hash  در زبان PHP است.

 

رمزنگاری همه ارتباطات

در زبان PHP ارتباط با خدمات و مکانیسم های ذخیره سازی باید برقرار شود که این نوع اتصالات باید رمزنگاری شده باشند. در صوت استفاده نکردن از اتصالات امن، امکان انتشار داده ها روی شبکه وجود دارد. Tls از راه های تایید نشان اینترنتی است که ارسال داده ها را با امنیت روبه رو خواهد کرد.

 

نمونه باگ و راه حل آن

گاهی اوقات در برنامه نویسی ضعف هایی وجود دارد که باعث به وجود آوردن مشکلات امنیتی شده و منجر به نفوذ می‌شود بنابر این برنامه نویسان باید باگ ها را شناخته و راه حل آن را اجرا نمایند.

 

باگ  xss

بگ XSS مخفف عبارت Cross site Scripting است و برای تناقض نداشتن با Css، به آن XSS می‌گویند. در این مشکل، حمله ای که هکر برنامه ریزی کرده با استفاده از کد مخربی است که دربردارنده کدهای جاوا اسکریپت بوده و با تزریق آن به سایت و باز کردن آن توسط کاربر، هکر به چیزی که می‌خواهد می‌رسد و دلیل آن فیلتر نشدن برخی ورودی هاست.

به طور مثال سایت های بسیاری وجود دارد که در آن کاربران نظراتخود را به ثبت می‌رسانند؛ حال اگر کاربری در قسمت نظرات، نظری را وارد کند که شامل کد جاوا اسکریپت است و یا اینکه هکر با استفاده از ترفندی، نظر کاربر را جلب کند و صفحه را باز کند که در این صورت، هکر با استفاده از دستور get، دستور مورد نظر را اجرا می‌کند.

نمونه کد ی که از باگ xss آسیب پذیر است؛

echo $_GET["user"] ;

?>

با وارد کردن هر عبارتی در در ایندکس یوزر متد گت در کد بالا، منجر به اجرا شدن باگ می‌شود.

راه حل؛

ورودی ها را باید از خطرات پاکسازی کرد که در این صورت تز تابع htmlspecialchars استفاده می‌شود که به شکل زیر است؛

echo htmlspecicalchars($_GET['user']);

 

دوست عزیز امیدوارم این مطلب برای شما مفید بوده باشه اگه با خوندن این مقاله به این مبحث

 

علاقه مند شدی میتونی از طریق لینک زیر تو دوره آموزش امنیت سایت های php شرکت کنی.

 

 دوره امنیت در وب سایت های PHP

 

 

 

مطلب‌های مرتبط

 


امیدوارم مواردی که توی این مقاله مورد بررسی قرار دادیم تونسته باشه به شما دوست عزیزم کمک کنه که در طراحی وب سایت یک قدم جلوتر برید و کارهایی بهتر و حرفه ای تری رو انجام بدید و اما اگر شما دوست عزیز مشتاق یادگیری طراحی سایت هستید و در این رابطه نیاز به آموزش دارید میتونید با مطالبی که در صفحه آموزش طراحی سایت نوشتیم مسیر درستی رو انتخاب کنید، با استفاده از آموزش طراحی سایت حرفه ای آکادمی آی تی میتونید به صورت ویدئویی و کاملا کاربردی از صفر آموزش رو آغاز کنید.

ارسال نظر

= 1 + 4

هنوز نظری برای این مقاله ثبت نشده است ...