در حال بارگزاری ...

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

php
توسط مریم مهربان
آخرین به روز رسانی شنبه 16 آذر 1398

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

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

PHP در سال 1994 توسط آقای راسماس (Rasmus)، با هدف ایجاد یک زبان برنامه نویسی سمت سرور و اسکریپت نویسی لایه جلویی وب طراحی شد. اما امروزه این زبان به ابزار مهمی برای توسعه وسیع وب سایت تبدیل شده است. در ابتدا، PHP مخفف عبارت «صفحه خانگی شخصی» بود، اما امروز آن را مخفف «پیش پردازنده ابرمتن شخصی» می‌دانند.

امروزه، توسعه دهندگان راه حل‌های مدیریت محتوای بسیار محبوبی را بر پایه PHP ایجاد کردند که به عنوان نمونه می‌توان به وردپرس، دروپال، مجنتو و غیره اشاره کرد. وب‌ سایت‌های مبتنی بر سیستم‌های مدیریت محتوا نیز در صورت تنظیمات امنیتی، می‌توانند امنیت بالایی را تامین کنند.

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

نکات امنیتی در PHP

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

پیکربندی نامناسب TLS/SSL

TLS/SSL، استانداردهای امنیتی هستند که ضمانت می‌کنند دو موجودیت می‌توانند با استفاده از ویژگی‌های کلیدهای عمومی و خصوصی ارتباطی امن با یکدیگر داشته باشند.

این استانداردها ارتباطات میان دو فرد را رمزگذاری می‌کنند. همچنین، یک یا هر دو طرفین می‌توانند برای جلوگیری از حمله مردی در میانه (MITM)، گواهینامه‌های SSL طرف مقابل را راستی آزمایی کنند. در حمله فردی در طول ارتباطات، هویت یکی از طرفین را جعل می‌کند. البته، رمزگذاری‌ها نیازمند گواهینامه‌های SSL هستند. در غیر این صورت، مهاجم می‌تواند تمامی پیام‌های میان کلاینت و سرور را رمزگشایی کند.

ارتباطات SSL/TLS هویت دو طرف را راستی آزمایی می‌کنند. SSL این ضمانت را می‌دهد که ارتباطات HTTPS، با روشی بسیار امن انجام می‌شود. این استاندارد همچنین متون XML و رپرهای curl را هم به طور کامل کنترل می‌کند.

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

امنیت در مقابل حملات تزریق XML

تزریق XML، شامل حملات مختلفی مانند XXE (تزریق موجودیت خارجی XML) و XEE (توسعه موجودیت XML) می‌شود.

 تزریق موجودیت خارجی XML

حملات XXE، زمانی اتفاق می‌افتد که ورودی فایل‌های XML حاوی ارجاعی به یک موجودیت خارجی باشد و این موجودیت خارجی توسط تجزیه کننده فایل XML که تنظیمات امنیتی ضعیفی دارد، پردازش شود و در نتیجه مهاجم را به هدف خود برساند. مهاجم برای انجام این حمله می‌تواند با خواندن فایل XML هدف و ارسال مقادیر بدخواه خود از طریق درخواست‌های HTTP، فراخوانی رپر filter در PHP یا دنباله‌های گنجاندن فایل در پارامترهای ورودی لینک‌ها به هدف خود برسد. این آسیب پذیری به صورت بالقوه می‌تواند باعث افشای اطلاعاتی مانند محتوای فایل، مولفه‌های کنترل دسترسی یا حملات انکار سرویس شود.

گسترش موجودیت XML

حملات XEE، شامل سوءاستفاده از قدرت تجزیه کننده فایل XML برای گسترش موجودیت‌های فعلی است، به گونه‌ای که باعث سرریز حافظه (و برای نمونه حمله انکار سرویس توزیعی) شود. به طور عمده، تجریه کننده‌های SimpleXML ،DOM و XMLReader به دلیل وابستگی به libxml2 مورد حمله قرار می‌گیرند.

امنیت PHP در برابر حملات اسکریپت نویسی Cross-Site

حملات اسکریپت نویسی Cross-Site یا XSS، یکی از مهم‌ترین حملاتی است که بر روی برنامه‌های کاربردی PHP و تمام کتابخانه‌ها انحام می‌شود. این مساله عمدتا به دلیل نبود دو مورد زیر اتفاق می‌افتد.

حملات XSS به دلیل نبود اعتبارسنجی کافی ورودی

در ابتدا، تابع filter_var()، لینک‌ها را اعتبارسنجی می‌کرد. اما در نظر نگرفتن هر نکته ظریفی در مساله اعتبارسنجی می‌تواند منجر به شکست این مکانیزم دفاعی شود. نحوه استفاده از این تابع به صورت زیر است:

filter_var($_GET['http_url'], FILTER_VALIDATE_URL);

فرار از خروجی یا پاکسازی حملات

تابع rawurlencode() در PHP می‌تواند برای تزریق امن داده به لینک‌ها (مانند ویژگی href) مورد استفاده قرار بگیرد. علاوه بر این، این تابع برای کشف دستکاری‌هایی که ممکن است منجر به اقدامات مخرب شود، کل لینک را اعتبارسنجی می‌کند.  تابع htmlspecialchars() تنها تابع فرار از کاراکترهای بدخواه در ورودی‌های کاربر است.

حملات تزریق دنباله در لینک (حملات گنجاندن فایل محلی / از راه دور)

در صورتی که ویژگی allow_url_include در وب سرور فعال باشد، برخی توابع مانند include_once ، includeو require_once  لینک‌های از راه دور را به عنوان ورودی می‌پذیرند. با توجه به اینکه مهاجم می‌تواند از همین امکان سوءاستفاده کند، لذا توسعه دهندگان وب باید در استفاده از این ویژگی با دقت عمل کنند.

مطالعه مقالات بیشتر در لیداوب:

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

 

دیدگاه ها

دیدگاه ها : 0


متاسفانه فقط اعضای سایت قادر به ثبت دیدگاه هستند

رایگان

اشتراک گذاری در
ثبت امتیاز
5 (1 رای)

   لطفا صبر کنید ...