آسیب‌پذیری‌های رایج

تزریق اسکریپت بین سایتی (Cross-Site-Scripting / XSS)

اشکالات XSS شایع‌ترین مشکلات در اکوسیستم افزونه‌های جوملا هستند.

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

 
<div class="comment">
    <h3><?php echo $comment->subject; ?></h3>
    
    <?php echo $comment->text; ?>
</div>

ظاهر ساده به نظر می‌رسد، درست است؟ اما فرض کنید کاربر به جای "من سایت شما را دوست دارم" از

 `<script>executeEvilJs()</script>` 

به عنوان موضوع استفاده کند. با قالب بالا، جاوااسکریپتی که کاربر ارسال کرده اجرا خواهد شد و کد مخرب در مرورگر همه کسانی که آن نظر را می‌بینند، اجرا می‌شود — این یک آسیب‌پذیری XSS است.

راه پیشگیری

فیلتر و اعتبارسنجی ورودی‌های کاربر

در مثال بالا موضوع ارائه شده باید فیلتر و/یا اعتبارسنجی شود تا فقط حروف مجاز را بپذیرد و از ورود کاراکترهایی که برای ساخت تگ HTML لازمند مثل < و > جلوگیری کند. اگر ورودی کاربر می‌تواند حاوی کد HTML باشد، باید مطمئن شد که فقط کدهای امن اجازه داده شوند. برای جزئیات بیشتر به بخش مدیریت ورودی مراجعه کنید.

فراردهی خروجی

مگر اینکه واقعاً نیاز به کد HTML تولید شده توسط کاربر داشته باشید (مثل زمانی که ویرایشگر WYSIWYG فعال است)، توصیه بسیار قوی می‌شود که هر قطعه از محتوای تولید شده توسط کاربر را فراردهی کنید. فراردهی کدهای HTML را به متن ساده تبدیل می‌کند، مثلا تبدیل به

 
 < به &lt;.

در جوملا برای فراردهی محتوای کاربر در نمای کامپوننت از `$this->escape($evilString)` استفاده کنید و در بخشی خارج از نمای کامپوننت از `htmlspecialchars($evilString, ENT_QUOTES, 'UTF-8')` استفاده نمایید.

تزریق SQL / SQLi

حمله تزریق SQL یک نوع آسیب‌پذیری است که مهاجم قادر است با وارد کردن محتوای تحت کنترل خود، یک دستور SQL را تغییر دهد.

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

بارگذاری فایل‌های بدون محدودیت

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

- با بارگذاری یک نوع فایل خطرناک (مثلاً یک فایل PHP) ممکن است مهاجم بتواند کد اجرا کند

- مهاجم ممکن است بتواند مسیر ذخیره فایل را کنترل کند و فایل‌ها را در دایرکتوری‌های ممنوعه ذخیره کند

- بارگذاری فایل‌های بزرگ توسط مهاجم ممکن است به سرعت فضای وب سرور را پر کند و باعث حمله محروم‌سازی سرویس (DoS) شود

بنابراین بارگذاری فایل‌ها باید با دقت زیادی پیاده‌سازی شود. روش `canUpload` از کلاس `Joomla\CMS\Helper\MediaHelper` می‌تواند به شما در این زمینه کمک کند.

تزریق درخواست بین سایتی / CSRF

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

راه پیشگیری

برای اطلاعات بیشتر به بخش "محافظت در برابر CSRF" در این راهنما مراجعه کنید.