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

+۱۵ ترفند امنیتی برای بالا بردن امنیت برنامه PHP شما – قسمت اول

PHP زبان برنامه نویسی  برای نوشتن برنامه های تحت وب است که برای عموم به نمایش درمیاید. از اساسی ترین ملزومات برنامه های این چنینی نگهداشتن امنیت اطلاعات آن و جلوگیری از دسترسی غیر مجاز است.

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

۱- از تگهای کوتاه برای PHP دوری کنید:
اگر تگهای کوتاه در سرور شما خاموش باشد، تمامی کد شما به صورتی که هست به مرورگر کاربر ارسال میشود و کاربر میتواند کد PHP شما را مشاهده کند:

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

۲- اعتبار سنجی تمام داده های وارد شده توسط کاربر:
تمام داده هایی که کاربر توسط POST یا GET ارسال میکند باید فیلتر شود تا به صورت قابل قبول برای منطق برنامه باشد.
– بررسی نوع داده ارسال شده
– بررسی محدوده اعداد ارسال شده
– بررسی طول متن داده ارسال شده
– بررسی ایمیل، URL و تاریخ ارسال شده توسط کاربر
– اطمینان از نبودن کاراکترهای غیر مجاز در داده ارسال شده

تعدادی تابع برای فیلتر کردن و اعتبار سنجی داده ها در زیر لیست شده است:

۳- پاکسازی یک عبارت پرس و جو:
از وارد کردن مستقیم داده هایی که از یک منبع خارجی گرفته شده است در یک عبارت پرس و جو خودداری کنید.
یک آسیبپذیری کوچک در SQL برنامه، میتواند کل سیستم را در اختیار یک هکر قرار دهد. ابزاری مانند sqlmap در عرض چند دقیقه میتواند این کار را انجام دهد. حتی اگر فقط تنها یک صفحه توسط تزریق sql آسیب پذیر باشد، کل سیستم به خطر می افتد. برای مثال:

اگر id در برنامه شما داخل یک query بدون اینکه پاکسازی شده باشد، استفاده شود، یک دروازه بزرگ برای استفاده هکرها توسط ابزاری مثل sqlmap محسوب میشود. بنابر این در مورد عبارات پرس و جو (SQL Query) دقت کنید و مطمئن شوید همه چیز امن است.

این یک مثال از کد آسیب پذیر با این روش است:

پارامتر id باید قبل ورود به عبارت پرس و جو توسط توابع مناسب مانند ()mysqli_real_escape_string مورد پاکسازی قرار گیرد.

۴- XSS (اسکریپت نویسی متقاطع):
XSS و یا به صورت کامل Cross Site Scripting به حملاتی گفته میشود که هکر قطعه کدی را به برنامه تزریق میکند که در سمت کاربر ( client-side) اجرا شود.

کد بالا ورودی را که دریافت میکند به صورت مستقیم در خروجی چاپ میکند.

فرض کنید url زیر فراخوانی شود:

تگ اسکریپت (<script>) در خروجی چاپ میشود و کد داخل تگ اسکریپت اجرا میشود.

نسخه های اخیر گوگل کروم از اجرای این کدها جلوگیری میکنند و پیام: “Refused to execute a JavaScript script. Source code of script found within request.” را نمایش میدهند.
این دسته از تزریقهای کد میتواند در سرقت اطلاعلت کوکی کاربران کمک بزرگی به هکرها نماید. ابتدا هکر اسکریپت کامل خود را به صورت زیر تزریق مینماید:

الان xss.js حاوی کدی است که از طریق متغیر document.cookie میتواند اطلاعات کوکی را به وبسایت هکر منتقل کند:

این فقط یک مثال ساده از نحوه کار این نوع حملات بود. از صفحه http://ha.ckers.org/xss.html برای آشنایی با انواع تکنیکهای هک، بازدیدکنید.

سرقت کوکی تنها کاری نیست که میتوان با استفاده از XSS انجام داد. میتوان برای اجرای یک url در وبسایت مورد نظر به کار رود:

این صفحه delete_content.php را اجرا خواهد کرد بدون اینکه کاربر از کاری که در حال انجام است آگاه باشد. ابتدا هکر یک url آلوده آماده میکند و سپس زمانی که کاربر هدف یا قربانی بر روی آن کلیک میکند حمله XSS انجام میشود.

حال چگونه این مشکل رو برطرف کنیم؟ ساده است. کافی تمامی کاراکترهایی که از کاربر دریافت کرده اید و میخواهد آن را چاپ کنید با استفاده از htmlentities پاکسازی کنید.

حالا هر چیزی که از term$ برای چاپ کردن بیرون بیاد، فاقد هرگونه کد html هست.
کدهایی مانند strip_tags و htmlspecialchars نیز میتوانند عملیات پاکسازی را انجام دهند.

استفاده از  session.cookie_httponly
این تنظیم php.ini دسترسی به کوکی ها را از طریق جاوا اسکریپت غیرفعال میکند و از اینرو باعث حفاظت خودکار در مقابل حملات XSS میشود. این یک راه حل کامل نیست و بستگی به مرورگر کاربر دارد که با این گزینه سازگاری دارد یا خیر.

۵- سعی کنید همیشه کد php خود را با فرمت php. ذخیره کنید:
برای مثال config.inc به صورت زیر است:

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


قسمت اول | قسمت دوم | قسمت سوم


نظر شما چیه؟

۱ دیدگاه

متاسفانه امکان ارسال دیدگاه وجود ندارد!