جلوگیری از حملات XSS با تنظیمات htaccess
با استفاده از فایل htaccess میتوانید حملات XSS را شناسایی و مسدود کنید. در این مقاله روشهای موثر برای افزایش امنیت وبسایت بررسی شده است، حملات XSS یا....
لیست مطالب
حملات XSS یا Cross-Site Scripting یکی از رایجترین تهدیدات امنیتی وبسایتها است که به مهاجمان اجازه میدهد کدهای مخرب جاوااسکریپت را در صفحات وب تزریق کنند. این حملات میتوانند باعث سرقت اطلاعات کاربران، تغییر رفتار سایت و حتی اجرای کدهای مخرب شوند. استفاده از .htaccess
یکی از روشهای موثر برای مقابله با این تهدید است. در این مقاله، نحوه تنظیم .htaccess
برای جلوگیری از حملات XSS و تقویت امنیت وبسایت را بررسی میکنیم.
فایل .htaccess
چیست و چگونه کار میکند؟
.htaccess
یک فایل پیکربندی در وبسرور Apache است که امکان کنترل رفتار سرور را در سطح دایرکتوری فراهم میکند. از این فایل میتوان برای موارد زیر استفاده کرد:
- مدیریت درخواستها و بازنویسی URL
- اعمال تنظیمات امنیتی مانند جلوگیری از حملات XSS
- محدود کردن دسترسی به فایلها و منابع
در سطح وبسرور، .htaccess
میتواند درخواستهای مشکوک را شناسایی کرده و آنها را مسدود کند.
حملات XSS چیست و چگونه عمل میکند؟
در حملات XSS، مهاجم کدهای مخرب (اغلب جاوااسکریپت) را در ورودیهای وبسایت تزریق میکند. این کدها ممکن است در مرورگر کاربران اجرا شوند و منجر به:
- سرقت کوکیها و اطلاعات حساس
- تغییر ظاهر و محتوای صفحات وب
- هدایت کاربران به سایتهای مخرب
جلوگیری از حملات XSS با استفاده از .htaccess
1. مسدود کردن کاراکترهای خطرناک در URL
در حملات XSS، معمولاً از کاراکترهایی مانند <
, >
, (
, )
, و "
استفاده میشود. برای مسدود کردن این کاراکترها:
# -------------------------------------------------------------------
# Programmer : Ebrahim Shafiei (EbraSha)
# Email : [email protected]
# -------------------------------------------------------------------
<IfModule mod_rewrite.c>
RewriteEngine On
# Block dangerous characters for XSS
RewriteCond %{QUERY_STRING} (<|>|\"|\'|\(|\)|\;) [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>
توضیح:
- این قوانین از تزریق کاراکترهای خطرناک در URL جلوگیری میکنند.
[NC]
حساسیت به حروف بزرگ و کوچک را غیرفعال میکند.[F,L]
درخواست را مسدود و پردازش قوانین بعدی را متوقف میکند.
2. جلوگیری از تزریق اسکریپتها در ورودیها
برای مسدود کردن الگوهایی که حاوی کدهای جاوااسکریپت هستند، میتوانید از قوانین زیر استفاده کنید:
# -------------------------------------------------------------------
# Programmer : Ebrahim Shafiei (EbraSha)
# Email : [email protected]
# -------------------------------------------------------------------
<IfModule mod_rewrite.c>
RewriteEngine On
# Block XSS script patterns
RewriteCond %{QUERY_STRING} (<script|alert|onerror|onload|eval|javascript:) [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>
توضیح:
- این قوانین درخواستهایی که شامل کلمات کلیدی جاوااسکریپت مانند
<script>
،alert
یاonerror
هستند را مسدود میکند.
3. تنظیم Headerهای امنیتی
با استفاده از .htaccess
میتوانید Headerهای امنیتی برای جلوگیری از اجرای اسکریپتهای مخرب در مرورگر کاربران تنظیم کنید.
الف) فعال کردن CSP (Content Security Policy)
CSP مانع اجرای کدهای مخرب میشود:
# -------------------------------------------------------------------
# Programmer : Ebrahim Shafiei (EbraSha)
# Email : [email protected]
# -------------------------------------------------------------------
<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self'; script-src 'self';"
</IfModule>
ب) غیرفعال کردن Sniffing محتوا
برای جلوگیری از تفسیر فایلهای ناامن توسط مرورگر:
# -------------------------------------------------------------------
# Programmer : Ebrahim Shafiei (EbraSha)
# Email : [email protected]
# -------------------------------------------------------------------
<IfModule mod_headers.c>
Header set X-Content-Type-Options "nosniff"
</IfModule>
ج) فعال کردن XSS Protection
برای فعال کردن حفاظت مرورگر در برابر XSS:
# -------------------------------------------------------------------
# Programmer : Ebrahim Shafiei (EbraSha)
# Email : [email protected]
# -------------------------------------------------------------------
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>
4. جلوگیری از آپلود فایلهای مخرب
یکی از روشهای رایج برای اجرای حملات XSS، آپلود فایلهایی است که شامل کدهای مخرب هستند. این فایلها معمولاً در قالب فایلهای HTML، جاوااسکریپت (JS)، SVG، یا XML ارائه میشوند. برای محدود کردن اجرای این فایلها، میتوانید از قوانین زیر در .htaccess
استفاده کنید:
# -------------------------------------------------------------------
# Programmer : Ebrahim Shafiei (EbraSha)
# Email : [email protected]
# -------------------------------------------------------------------
<FilesMatch "\.(php|html|js|svg|xml)$">
Order Allow,Deny
Deny from all
</FilesMatch>
توضیح قوانین:
- این دستور دسترسی به فایلهایی با پسوندهای مشخص مانند
.php
,.html
,.js
,.svg
, و.xml
را مسدود میکند. - آپلود چنین فایلهایی ممکن است برای کاربران غیرمجاز قابل اجرا نباشد.
چرا این روش بهتنهایی برای آپلود فایل مخرب کافی نیست؟
این روش در جلوگیری از آپلود و اجرای فایلهای مخرب تا حدی موثر است، اما قابل دور زدن است. مهاجمان میتوانند با روشهای زیر این محدودیتها را دور بزنند:
-
تغییر پسوند فایل:
- مهاجم ممکن است فایل مخرب خود را با یک پسوند غیرمجاز، مانند
.txt
یا.jpg
، ذخیره کرده و پس از آپلود در سرور، آن را تغییر نام دهد. - برای مثال: تغییر یک فایل جاوااسکریپت از
malicious.js
بهmalicious.txt
.
- مهاجم ممکن است فایل مخرب خود را با یک پسوند غیرمجاز، مانند
-
مخفیسازی کد مخرب در فایلهای مجاز:
- مهاجمان میتوانند کدهای مخرب را در فایلهای تصویری (مثل
.jpg
یا.png
) یا فایلهای متنی معمولی مخفی کنند. اگر سرور یا برنامه شما این فایلها را پردازش کند، کد مخرب ممکن است اجرا شود.
- مهاجمان میتوانند کدهای مخرب را در فایلهای تصویری (مثل
-
آپلود فایلهای غیرمستقیم:
- مهاجم میتواند فایلی با محتوای غیرمجاز را به شکل یک فایل بیخطر آپلود کرده و سپس در سرور درخواست پردازش یا اجرای آن را بدهد.
چگونه این مشکل را حل کنیم؟
-
اعتبارسنجی سمت سرور:
- نوع فایلها را بر اساس محتوای آنها (Mime Type) بررسی کنید، نه فقط بر اساس پسوند.
- استفاده از کتابخانههایی مانند MIME Content-Type برای اطمینان از نوع فایل توصیه میشود.
-
محدود کردن دسترسی به مسیرهای آپلود:
- پوشهای که فایلها در آن آپلود میشوند، باید به طور کامل از دسترسی عمومی جدا شود.
- تنها یک اسکریپت مشخص باید اجازه پردازش یا خواندن فایلها را داشته باشد.
-
رمزنگاری و فیلتر کردن محتوای فایل:
- فایلهای آپلود شده را پیش از پردازش رمزنگاری یا به شکل ایمن اسکن کنید تا کدهای مخرب شناسایی شوند.
-
غیرفعال کردن اجرای فایلهای آپلود شده:
- با تغییر تنظیمات سرور، از اجرای مستقیم فایلها در مسیر آپلود جلوگیری کنید. به عنوان مثال:
# -------------------------------------------------------------------
# Programmer : Ebrahim Shafiei (EbraSha)
# Email : [email protected]
# -------------------------------------------------------------------
<Directory "/path/to/uploads">
Options -ExecCGI
AllowOverride None
</Directory>
استفاده از ابزارهای امنیتی:
- ابزارهایی مانند Web Application Firewall (WAF) میتوانند الگوهای مشکوک را شناسایی کرده و حملات پیچیده را مسدود کنند.
چرا این روش ها برای جلوگیری از XSS کافی نیست؟
استفاده از .htaccess
برای جلوگیری از حملات XSS یک لایه حفاظتی اولیه است، اما نباید به تنهایی به آن تکیه کنید. دلایل عبارتند از:
- تمرکز بر الگوهای مشخص: قوانین
.htaccess
ممکن است حملات جدید با الگوهای متفاوت را شناسایی نکنند. - محدودیت در POST دادهها: این فایل فقط درخواستهای URL و Headerها را بررسی میکند و تزریق XSS در دادههای POST یا ورودیهای دیگر ممکن است از آن عبور کنند.
- نیاز به امنیت سمت سرور و اپلیکیشن: باید از اعتبارسنجی قوی ورودیها، فیلتر دادهها، و توابع ایمن برنامهنویسی استفاده کنید.
نکات تکمیلی برای جلوگیری از XSS
- اعتبارسنجی ورودیها: هرگز ورودی کاربران را مستقیماً به صفحات وب یا پایگاه داده ارسال نکنید.
- Escape کردن خروجیها: تمام دادههای پویا که در صفحات نمایش داده میشوند را Escape کنید.
- استفاده از کتابخانههای امنیتی: مانند OWASP AntiSamy برای مدیریت دادههای ورودی.
- نوشتن اپلیکیشن ها با فریم ورک ها ایمن و مناسب پروژه شما
اگر به دنبال افزایش امنیت وبسایت خود در برابر حملات SQL Injection هستید، مطالعه مقالهای که به صورت جامع به جلوگیری از این حملات با استفاده از .htaccess
پرداخته است، پیشنهاد میشود. در این مقاله به شما آموزش داده میشود که چگونه الگوهای تزریق SQL را شناسایی کرده و مسدود کنید. برای اطلاعات بیشتر به این لینک چگونه با htaccess جلوی SQL Injection را بگیریم؟ مراجعه کنید.
قبل از استفاده از این مقاله حتماً مقاله "استثناء گذاری در قوانین htaccess بدون افت امنیت وب سایت" را مطالعه کنید.
دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)