ترفند های امنیت در php | فصل اول

PHP تقریباً در هر سیستم مدیریت محتوای (CMS) منبع باز استفاده می شود. متأسفانه، برنامه نویسی ایمن در  php که رعایت نمی شود؛ به هکرها یک فرصت فوق العاده برای نفوذ می دهد. لذا ترفند های امنیت در php وجود دارند که در این مقاله قابل ذکر است…

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

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

حتی سایتهای تجاری و بزرگی مانند Facebook و Google از PHP استفاده می کنند که به وضوح محبوبیت گسترده آن را می توان احساس کرد.

با این همه واقعا چگونه می توان امنیت سایت های PHP را تا حد قابل قبولی افزایش داد؟

قبلا حول مقاله ای در آکادمی به بررسی امنیت در سایت های php و راهکار های امنیتی آن پرداختیم.

همچنین در دوره های متفاوت و پروژه محور در اکادمی به ایمن سازی محبوب ترین cms های php پرداختیم.

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

کد نویسی ایمن یک عادت است که هر برنامه نویس PHP باید آن را در خود ایجاد کند.

ترفند های امنیت در php : اسیب پذیری XSS (Cross Site Scripting)

علت اصلی بروز این آسیب پذیری اعتماد به ورودی کاربر است.

XSS می تواند توسط نفوذگر برای دستکاری کاربران از طریق JavaScript استفاده شود. حملات می توانند از صفحات فیشینگ تا پیش فرض سایت متغیر باشند!

برای جلوگیری از آسیب پذیری XSS ، هنگام کد نویسی از تابع PHP htmlspecialchars () استفاده کنید. علاوه بر این ، ENT_QUOTES پرچم این تابع می تواند با هر دو ، نقل قول های منفرد و دو برابر وارد شده توسط کاربر ، مقابله کند.

$search = htmlspecialchars($search, ENT_QUOTES, 'UTF-8'); echo 'Search results for '.$search;

همچنین ، برای جلوگیری از استفاده  قطعات URI به هیچ وجه از XSS مبتنی بر DOM استفاده نکنید. علاوه بر این ، از دستورات زیر استفاده نکنید:

  • innerHTML
  • outerHTML
  • document.write

ترفند های امنیت در php : باگ SQL Injection

تزریق کد های SQL به دیتابیس، نمونه دیگری از اعتماد به ورودی کاربر در PHP است.

این اسیب پذیری می تواند عواقب مخربی برای پایگاه داده سایت شما داشته باشد و منجر به دسترسی یک هکر به دیتابیس شود.

در بعضی موارد، مهاجم فقط می تواند اطلاعات حساس را از جداول مانند گذرواژه‌ها بخواند. در حالی که در موارد دیگر، ممکن است مهاجم حتی پایگاه داده را دستکاری کرده و reverse shells را روی سرور بارگذاری کند.

اکنون می توانید از همان عبارت آماده شده برای درج های مکرر استفاده کنید ، یعنی برای اضافه کردن چندین ردیف به جدول ، از کد زیر استفاده کنید :

// inserting one row $txtNam = 'one'; $txtAdd = 'India'; $txtCit = 'Delhi'; $stmt->execute(); // insert another row with different values $txtNam = 'two'; $txtAdd = 'USA'; $txtCit = 'California'; $stmt->execute(); //... and so on!

همچنین ، مطمئن شوید که محتوای حساس پایگاه داده مانند رمز عبور را رمزگذاری کنید. تابع password_hash () از PHP برای رمزگذاری داده ها استفاده می شود. و تابع password_verify () مقدار داده شده با هشی که در جدول ذخیره شده است، مطابقت می دهد .

PHP Security: Preventing Cross-Site Request Forgery

آسیب پذیری CSRF درPHP به طور بالقوه می تواند به کاربران اجازه دهد تا از سطح کاربری و امکاناتش در سایت فراتر بروند.

این موارد شامل حذف یک صفحه یا به روزرسانی رمز عبور کاربر بدون رضایت کاربر نهایی است. برای محافظت از کاربران در برابر حملات CSRF ، از توکن های امنیتی استفاده کنید. این توکن ها برای هر کاربر منحصر به فرد است.

$randomtoken = md5(uniqid(rand(), true));

$randomtoken = base64_encode( openssl_random_pseudo_bytes(32));

پس از ایجاد توکن امنیتی ، مطمئن شوید که مقدار این توکن را به متغیرهای Session اضافه کنید.

همچنین، اطمینان حاصل کنید که هر فرم حاوی یک توکن امنیتی است. درست مانند فریم ورک لاراول !

همچنین می توانید برای ایجاد توکن های امنیتی حفاظت از CSRF ، از کلاس ها و کتابخانه های متن باز استفاده کنید.

ترفند های امنیت در php : اسیب پذیری Session Hijacking

ربودن جلسه (Session hijacking) اجازه می دهد تا یک نفوذگر هویت کاربران تأیید شده را به دست بگیرد.

چندین حمله مانند XSS و Network eavesdropping وجود دارد که به یک مهاجم اجازه می دهد اطلاعات Session ها را سرقت کند.

در مرحله اول ، اطمینان حاصل کنید که ini_set () در ابتدای هر اسکریپت قرار دارد. کد های زیر را به فایل php.ini اضافه کنید :

ini_set( 'session.use_only_cookies', TRUE ); ini_set( 'session.use_trans_sid', FALSE );

در اولین خط کد ، session.use_only_cookies از نشت اطلاعات توسط شناسه Session در PHP جلوگیری می کند.

این ویژگی PHP را مجبور می کند تا شناسه Session را با استفاده از کوکی مدیریت کند و بدین ترتیب $ _GET [‘PHPSESSID’] را غیرفعال می کند.

همچنین خط دوم session.use_trans_sid را خاموش می کند و بدین ترتیب از نشت شناسه جلسه در کلیه URI ها جلوگیری می شود.

اما ، در اینجا قابل توجه است که کاربران هنوز هم ممکن است در برابر حملات DNS و پروکسی آسیب پذیر باشند. همچنین لازم است یک زمان کوکی اضافه کنید و یک شناسه تصادفی منحصر به فرد برای هر جلسه تولید کنید. زمان بندی را می توان با تنظیم :

setcookie("myCookie", $value, time() + 3600);

؛ این کد می گوید کوکی ظرف یک ساعت در مرورگر منقضی شود. از طرف دیگر ، می توانید به محض بسته شدن مرورگر ، کوکی را تنظیم کنید. همچنین ، از استفاده کوکی ها برای ذخیره داده های سریالی (serialized ) خودداری کنید. همانطور که می تواند توسط مهاجمان استفاده شود تا متغیرها را به محدوده شما اضافه کنند. به یاد داشته باشید که از تابع session_regenerate_id () از PHP برای بازآفرینی شناسه جلسه کاربر جدید در هر زمان که کاربر خارج شود یا وضعیت را تغییر دهد استفاده کنید.

ترفند های امنیت در php : اسیب پذیری File Inclusion Attacks

حملات از راه دور فایل شامل (RFI) و محلی پوشاندن پرونده (LFI) در برنامه های وب PHP گسترده است ، که تهدیدی برای امنیت PHP است.

علت اصلی این حملات ، عدم فیلتر ورودی و استفاده نا امن از توابع فراخوانی (مانند تابع include()) در PHP است.

بنابراین ، در برنامه مسیری برای اجرای کد مخرب ایجاد می کند. این بعداً بر اساس ورودی هکر بارگیری و اجرا می شود که می تواند یک کوکی مخرب یا یک پارامتر درخواست آسیب پذیر باشد. بیشتر اوقات ، از حملات LFI و RFI برای خنثی سازی سایت ها استفاده می شود ، اما می توان از آنها برای لایه برداری داده ها و حملات DOS نیز استفاده کرد.

بنابراین ، به توسعه دهندگان توصیه می شود که از توابع فراخوانی PHP مانند include, include_once, require, require_once, etc. به صورت ایمن استفاده کنند ، زیرا هکر می تواند هر آدرسی را بارگذاری نماید.

بهترین روش برای از بین بردن آسیب پذیری های LFI و RFI این است که اجازه ندهید فایل از راه دور شامل تعیین URL به جای مسیر پرونده محلی باشد. با این حال ، این گزینه به طور پیش فرض غیرفعال است. به سادگی پرچم زیر را در فایل .htaccess خود خاموش کنید تا حملات RFI را از بین ببرید :

allow_url_include=Off

Use Secure Socket Layer(SSL)

استفاده از SSL ارتباط بین سایت و کاربران را رمزگذاری می کند. این بدان معنی است که کاربران در برابر حملات eavesdropping محافظت می شوند.

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

# Redirect HTTP to HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

تنظیم مجوز برای فایل ها

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

<?php $fn = './test.txt'; chmod($fn, 0644);

در اینجا ، chmod سطح دسترسی را ۶۴۴ تعریف می کند. رقم ۰ قبل از ۶۴۴ نشان می دهد PHP برای تفسیر این موضوع به عنوان اکتال شماره. رقم ۶ به معنای آن است که کاربر می تواند بخواند و همچنین بنویسد. در حالی که بقیه دو رقمی که به عنوان ۴۴ نوشته شده نشان می دهد که کاربر گروه و سایر افراد فقط می توانند فایل را بخوانند.

ترفند های امنیت در php : غیر فعالسازی توابع خطرناک php

برای حفظ امنیت در PHP باید از برخی توابع PHP غیرفعال شوند. این توابع خطرناک در ابتدا برای اهداف قانونی طراحی شده بودند که اکنون توسط نفوذگران مورد سوء استفاده قرار می گیرند. این توابع همچنین می توانند دسترسی root هکر را فراهم کنند ، بنابراین استفاده از توابع زیر را غیرفعال نمایید :

assert(), shell_exec(), system(), passthru(), show_source(), highlight_file(), proc_open(), and pcntl_exec()

توابع خطرناک PHP را می توان به راحتی مسدود کرد.  فایل php.ini را باز کنید و disable_functions را پیدا کنید ، سپس دستور زیر را جایگزین آن کنید:

disable_functions = “apache_child_terminate, apache_setenv, define_syslog_variables, escapeshellarg, escapeshellcmd, eval, exec, fp, fput, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, mysql_pconnect, openlog, passthru, php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode”

این دستور تقریباً تمام توابع خطرناک PHP را مسدود می کند. فراموش نکنید که سرور و سرویس مربوطه را restart کنید تا این تغییرات را ببینید.

ترفند های امنیت در php : در پشتی یا Backdoor

هکر پس از نفوذ به سایت php برای برای حفظ دسترسی خود ، به محض به خطر افتادن سرور ، فایل های PHP را تغییر داده و درب پشتی (Backdoor) را تزریق می کنند.

این درهای پشتی در واقع یک کد مخرب است که می تواند در آینده دسترسی نامحدودی برای هکر در آینده ایجاد کند و بدین ترتیب حتی اگر سایت را پس از نفوذ ایمن کنید ، باز دسترسی هکر باقی خواهد ماند!

اموزش نحوه ی کار بک دور ها در دوره ی هکر قانونمند (CEH) مفصل بیان شده است.

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

یکی از راه حل های امنیتی استفاده از آسترا (Astra) برای تشخیص خودکار بدافزار و از بین بردن در پشتی است. فایروال آسترا هرگونه بک دور را  از بین می برد در حالی که موتور کاوشگر آن اطمینان حاصل می کند که هیچگونه  در پشتی باقی نمانده .

ترفند های امنیت در php | فصل دوم

https://iran123.org/downloads/ceh/

تحلیل باگ و امنیت در PHP | انالیز باگ

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *