جلوگیری از حملات XSS با تنظیمات htaccess

با استفاده از فایل htaccess می‌توانید حملات XSS را شناسایی و مسدود کنید. در این مقاله روش‌های موثر برای افزایش امنیت وب‌سایت بررسی شده است، حملات XSS یا....

انتشار: , زمان مطالعه: 7 دقیقه
جلوگیری از حملات XSS با تنظیمات htaccess
دسته بندی: امنیت سایبری تعداد بازدید: 103

حملات 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 را مسدود می‌کند.
  • آپلود چنین فایل‌هایی ممکن است برای کاربران غیرمجاز قابل اجرا نباشد.

چرا این روش به‌تنهایی برای آپلود فایل مخرب کافی نیست؟

این روش در جلوگیری از آپلود و اجرای فایل‌های مخرب تا حدی موثر است، اما قابل دور زدن است. مهاجمان می‌توانند با روش‌های زیر این محدودیت‌ها را دور بزنند:

  1. تغییر پسوند فایل:

    • مهاجم ممکن است فایل مخرب خود را با یک پسوند غیرمجاز، مانند .txt یا .jpg، ذخیره کرده و پس از آپلود در سرور، آن را تغییر نام دهد.
    • برای مثال: تغییر یک فایل جاوااسکریپت از malicious.js به malicious.txt.
  2. مخفی‌سازی کد مخرب در فایل‌های مجاز:

    • مهاجمان می‌توانند کدهای مخرب را در فایل‌های تصویری (مثل .jpg یا .png) یا فایل‌های متنی معمولی مخفی کنند. اگر سرور یا برنامه شما این فایل‌ها را پردازش کند، کد مخرب ممکن است اجرا شود.
  3. آپلود فایل‌های غیرمستقیم:

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

چگونه این مشکل را حل کنیم؟

  1. اعتبارسنجی سمت سرور:

    • نوع فایل‌ها را بر اساس محتوای آنها (Mime Type) بررسی کنید، نه فقط بر اساس پسوند.
    • استفاده از کتابخانه‌هایی مانند MIME Content-Type برای اطمینان از نوع فایل توصیه می‌شود.
  2. محدود کردن دسترسی به مسیرهای آپلود:

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

    • فایل‌های آپلود شده را پیش از پردازش رمزنگاری یا به شکل ایمن اسکن کنید تا کدهای مخرب شناسایی شوند.
  4. غیرفعال کردن اجرای فایل‌های آپلود شده:

    • با تغییر تنظیمات سرور، از اجرای مستقیم فایل‌ها در مسیر آپلود جلوگیری کنید. به عنوان مثال:
# -------------------------------------------------------------------
# Programmer       : Ebrahim Shafiei (EbraSha)
# Email            : [email protected]
# -------------------------------------------------------------------
<Directory "/path/to/uploads">
    Options -ExecCGI
    AllowOverride None
</Directory>

استفاده از ابزارهای امنیتی:

  • ابزارهایی مانند Web Application Firewall (WAF) می‌توانند الگوهای مشکوک را شناسایی کرده و حملات پیچیده را مسدود کنند.

چرا این روش ها برای جلوگیری از XSS کافی نیست؟

استفاده از .htaccess برای جلوگیری از حملات XSS یک لایه حفاظتی اولیه است، اما نباید به تنهایی به آن تکیه کنید. دلایل عبارتند از:

  1. تمرکز بر الگوهای مشخص: قوانین .htaccess ممکن است حملات جدید با الگوهای متفاوت را شناسایی نکنند.
  2. محدودیت در POST داده‌ها: این فایل فقط درخواست‌های URL و Headerها را بررسی می‌کند و تزریق XSS در داده‌های POST یا ورودی‌های دیگر ممکن است از آن عبور کنند.
  3. نیاز به امنیت سمت سرور و اپلیکیشن: باید از اعتبارسنجی قوی ورودی‌ها، فیلتر داده‌ها، و توابع ایمن برنامه‌نویسی استفاده کنید.

نکات تکمیلی برای جلوگیری از XSS

  1. اعتبارسنجی ورودی‌ها: هرگز ورودی کاربران را مستقیماً به صفحات وب یا پایگاه داده ارسال نکنید.
  2. Escape کردن خروجی‌ها: تمام داده‌های پویا که در صفحات نمایش داده می‌شوند را Escape کنید.
  3. استفاده از کتابخانه‌های امنیتی: مانند OWASP AntiSamy برای مدیریت داده‌های ورودی.
  4. نوشتن اپلیکیشن ها با فریم ورک ها ایمن و مناسب پروژه شما

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

قبل از استفاده از این مقاله حتماً مقاله "استثناء گذاری در قوانین htaccess بدون افت امنیت وب‌ سایت" را مطالعه کنید.


دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)