امنیت

محافظت از دایرکتوری با فایل htaccess و افزایش امنیت وبسایت

  • 11 د لوستلو لپاره دقیقې
  • د Hostragons ټیم
محافظت از دایرکتوری با فایل htaccess و افزایش امنیت وبسایت

رمزگذاری فایل htaccess در هاستینگ‌های مبتنی بر Apache یا LiteSpeed به معنای محافظت از یک پوشه با نام کاربری و رمز عبور، جلوگیری از خوانده شدن خود فایل htaccess از بیرون، اجباری کردن HTTPS و محدود کردن دسترسی‌های مخرب است. رایج‌ترین روش، استفاده از Basic Auth برای حفاظت پوشه و ذخیره رمزهای عبور در فایل htpasswd است. اما نکته کلیدی اینجاست: Basic Auth به تنهایی داده را رمزگذاری نمی‌کند و برای امنیت واقعی باید حتماً همراه با گواهی SSL روی HTTPS اجرا شود. SSL Certificate Secure Web Hosting

امنیت وبسایت‌ها اغلب با فایروال‌های بزرگ، نرم‌افزارهای پیچیده یا افزونه‌های گران‌قیمت گره خورده است. در حالی که یک فایل htaccess درست پیکربندی‌شده، به‌خصوص در هاست اشتراکی، وردپرس، برنامه‌های PHP سفارشی و سایت‌های کوچک، یکی از اولین لایه‌های دفاعی به شمار می‌رود. با این فایل می‌توانید پوشه‌های حیاتی مثل پنل مدیریت را با رمز محافظت کنید، ترافیک HTTP را به HTTPS هدایت کنید، لیست شدن پوشه‌ها را ببندید، دسترسی به فایل‌های خاص را مسدود کنید، هات‌لینک را کاهش دهید و هدرهای امنیتی پایه را فعال کنید.

در این راهنما به‌صورت گام‌به‌گام رمزگذاری فایل htaccess را بررسی می‌کنیم، دستورات امنیتی پرکاربرد را توضیح می‌دهیم و نمونه‌هایی آماده کپی و استفاده ارائه می‌کنیم. دستورات برای محیط‌هایی مناسب است که از Apache mod_rewrite، mod_auth_basic و mod_headers پشتیبانی می‌کنند. سرورهای LiteSpeed هم به دلیل سازگاری بالا با Apache، بیشتر دستورات را بدون تغییر اجرا می‌کنند. پیش از اعمال روی سایت اصلی حتماً از فایل بک‌آپ بگیرید و ترجیحاً روی ساب‌دامین آزمایشی تست کنید. Domain Management Website Backup

فایل htaccess چیست و چرا برای امنیت مهم است؟

فایل htaccess یک فایل پیکربندی محلی است که به وب‌سرور می‌گوید با پوشه و زیرپوشه‌های آن چگونه رفتار کند. وقتی در ریشه سایت قرار بگیرد، معمولاً کل سایت را تحت تأثیر قرار می‌دهد؛ مثلاً فایل htaccess داخل پوشه public_html قوانین مربوط به ریشه اصلی دامنه را کنترل می‌کند. اگر داخل زیرپوشه قرار گیرد، فقط همان پوشه و مسیرهای زیرش را پوشش می‌دهد.

چون این فایل کنترل دسترسی در سطح سرور را ممکن می‌سازد، می‌توان بسیاری از درخواست‌ها را پیش از رسیدن به کد برنامه متوقف کرد. مثلاً اگر پوشه ادمین را با رمز محافظت کنید، مهاجم پیش از رسیدن به وردپرس یا پنل PHP با احراز هویت سرور مواجه می‌شود. این روش حملات brute force را کم می‌کند و بهره‌برداری از حفره‌های لایه برنامه را سخت‌تر می‌سازد.

مزایای امنیتی فایل htaccess عبارتند از:

  • تعریف قوانین دسترسی بدون تغییر کد برنامه
  • محافظت از پوشه‌های خاص با نام کاربری و رمز عبور
  • هدایت خودکار درخواست‌های HTTP به HTTPS
  • محدود کردن لیست شدن پوشه‌ها، دسترسی به فایل‌های حساس و هات‌لینک
  • بهبود رفتار مرورگر با هدرهای امنیتی
  • اعمال محدودیت بر اساس IP، پسوند فایل یا متد درخواست

با این حال htaccess به تنهایی تمام امنیت را تأمین نمی‌کند. بهترین نتیجه وقتی حاصل می‌شود که همراه با نرم‌افزار به‌روز، سیاست رمز قوی، بک‌آپ منظم، زیرساخت هاستینگ مطمئن، WAF، اسکن بدافزار و گواهی SSL استفاده شود. Hosting Security WordPress Security

منطق رمزگذاری فایل htaccess: Basic Auth و htpasswd

عبارت «رمزگذاری فایل htaccess» معمولاً دو معنی دارد: یکی درخواست نام کاربری و رمز هنگام ورود به پوشه، دیگری جلوگیری از نمایش خود فایل htaccess به کاربران. مورد اول با Basic Auth و مورد دوم با قوانین محدود کردن دسترسی فایل انجام می‌شود.

در ساختار Basic Auth، فایل htaccess قانون احراز هویت را نگه می‌دارد و فایل htpasswd نام کاربری و هش رمز عبور را ذخیره می‌کند. رمز عبور نباید به صورت متن ساده باشد. سیستم‌های مدرن از هش bcrypt، Apache MD5 یا SHA استفاده می‌کنند. امن‌ترین راه، استفاده از ابزار «پوشه محافظت‌شده با رمز» در کنترل‌پنل هاستینگ است؛ چون این ابزارها معمولاً فایل htpasswd را در مکان درست قرار می‌دهند و هش را به‌صورت خودکار انجام می‌دهند.

نمونه قانون محافظت با رمز عبور به این شکل است:

AuthType Basic

AuthName Korunan Alan

AuthUserFile /home/kullanici/.htpasswd

Require valid-user

این چهار خط به معنی تنظیم نوع احراز هویت روی Basic، تعیین نام ناحیه در مرورگر، مشخص کردن مسیر فیزیکی فایل htpasswd و اجازه دسترسی فقط به کاربران معتبر است. رایج‌ترین اشتباه نوشتن آدرس وب در خط AuthUserFile است. مقدار درست یک آدرس اینترنتی نیست، بلکه مسیر فیزیکی فایل روی سرور است.

فایل htpasswd را کجا نگه داریم؟

فایل htpasswd را ترجیحاً بیرون از public_html قرار دهید تا حتی در صورت اشتباه پیکربندی سرور هم مستقیماً از وب قابل فراخوانی نباشد. مثلاً اگر سایت در مسیر /home/hesapadi/public_html کار می‌کند، فایل htpasswd را در /home/hesapadi/.htpasswd بگذارید.

مجوز فایل برای htpasswd معمولاً ۶۴۰ یا ۶۴۴ و برای htaccess معمولاً ۶۴۴ مناسب است. مجوزهایی مثل ۷۷۷ که همه می‌توانند بنویسند، خطر امنیتی ایجاد می‌کنند و نباید استفاده شوند.

گام‌به‌گام محافظت از دایرکتوری با htaccess

این مراحل برای کسانی مناسب است که می‌خواهند پوشه‌هایی مثل admin، panel، test، staging، گزارش یا فایل‌های مشتری را محافظت کنند. پیش از شروع حتماً از فایل htaccess موجود بک‌آپ بگیرید.

۱. پوشه مورد نظر را مشخص کنید

ابتدا دقیقاً مشخص کنید کدام دایرکتوری را می‌خواهید رمزگذاری کنید. اگر فقط می‌خواهید siteadi.com/admin محافظت شود، فایل htaccess را داخل پوشه admin بگذارید. اگر می‌خواهید کل سایت را موقتاً ببندید، قانون را در htaccess ریشه قرار دهید.

۲. کاربر htpasswd را بسازید

اگر کنترل‌پنل هاستینگ ابزار «پوشه محافظت‌شده با رمز» دارد، ساده‌ترین روش همان است. در غیر این صورت با دسترسی SSH می‌توان از دستور htpasswd استفاده کرد. مثال: htpasswd -c /home/kullanici/.htpasswd admin. این دستور کاربر admin را می‌سازد و رمز را در فایل ذخیره می‌کند. برای افزودن کاربر جدید، پارامتر -c را حذف کنید.

۳. قانون htaccess را اضافه کنید

در فایل htaccess داخل پوشه مورد نظر این خطوط را بنویسید:

AuthType Basic

AuthName Yonetim Paneli

AuthUserFile /home/kullanici/.htpasswd

Require valid-user

پس از ذخیره، پوشه را در مرورگر باز کنید. اگر صفحه درخواست نام کاربری و رمز ظاهر شد، عملیات موفق بوده است.

۴. بدون HTTPS استفاده نکنید

Basic Auth اطلاعات را با Base64 منتقل می‌کند که رمزگذاری قوی محسوب نمی‌شود. اگر ترافیک روی HTTP باشد، شنودگر می‌تواند نام کاربری و رمز را بخواند. بنابراین قانون رمزگذاری htaccess را همیشه همراه با اجباری کردن HTTPS اجرا کنید. SSL Installation HTTPS Redirection

اجباری کردن HTTPS و هدایت www

یکی از پایه‌ای‌ترین اقدامات امنیتی، هدایت تمام ترافیک به HTTPS است. پس از فعال‌سازی SSL می‌توانید قانون زیر را به htaccess ریشه اضافه کنید:

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

این قانون درخواست‌های HTTP را به همان دامنه و مسیر اما روی HTTPS منتقل می‌کند. کد ۳۰۱ از نظر سئو نیز سیگنال درستی می‌فرستد. اگر سایت پشت CDN یا پروکسی باشد، ممکن است نیاز به قانون خاص‌تری باشد.

برای هدایت از www به بدون www هم می‌توانید از الگوی زیر استفاده کنید:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.ornekdomain\.com$ [NC]

RewriteRule ^(.*)$ https://ornekdomain.com/$1 [L,R=301]

نام دامنه را با دامنه خودتان جایگزین کنید و مراقب باشید زنجیره هدایت طولانی ایجاد نشود. Domain Forwarding SEO Compatible Redirects

دستورات پایه‌ای htaccess برای افزایش امنیت سایت

جدول زیر دستورات امنیتی پرکاربرد htaccess را خلاصه کرده است. پیش از افزودن هر دستور، ساختار فعلی را بررسی کنید تا با قوانین وردپرس یا لاراول تداخل نداشته باشد.

دستورات پایه‌ای htaccess برای افزایش امنیت سایت
هدفنمونه دستورزمان استفادهنکته مهم
رمزگذاری دایرکتوریAuthType Basic, Require valid-userپوشه‌های ادمین، استیجینگ، گزارشحتماً با HTTPS استفاده شود
اجباری کردن HTTPSRewriteCond %{HTTPS} offامن کردن تمام ترافیک سایتدر صورت وجود CDN قانون خاص نیاز است
بستن لیست شدن پوشهOptions -Indexesپوشه‌های بدون فایل ایندکسمحتوای پوشه را پنهان می‌کند
محافظت از htaccessRequire all deniedجلوگیری از خوانده شدن فایل‌های پیکربندیبسته به نسخه Apache تغییر می‌کند
جلوگیری از هات‌لینکRewriteCond %{HTTP_REFERER}کاهش مصرف پهنای باند تصاویرCDN و پیش‌نمایش شبکه‌های اجتماعی را تست کنید
هدرهای امنیتیHeader set X-Frame-Options SAMEORIGINکاهش حملات مبتنی بر مرورگرmod_headers باید فعال باشد

بستن لیست شدن پوشه‌ها

اگر پوشه‌ای فایل index.html یا index.php نداشته باشد، سرور ممکن است لیست فایل‌ها را نشان دهد. این موضوع برای فایل‌های بک‌آپ، تصاویر و گزارش‌های موقتی خطرناک است. با دستور ساده زیر لیست شدن پوشه بسته می‌شود:

Options -Indexes

پس از این دستور، کاربران نمی‌توانند محتویات پوشه را ببینند و معمولاً با خطای ۴۰۳ مواجه می‌شوند.

جلوگیری از دسترسی به فایل‌های حساس

فایل htaccess نباید از وب قابل مشاهده باشد. علاوه بر حفاظت پیش‌فرض Apache می‌توانید قانون زیر را اضافه کنید:

<Files .htaccess>

Require all denied

</Files>

همین‌طور فایل‌هایی مثل .env، composer.json، config.php.bak و backup.sql را هم ببندید. به‌خصوص در لاراول و سیمفونی، لو رفتن فایل .env می‌تواند منجر به دسترسی کامل به سیستم شود.

برای بستن چند پسوند حساس به‌صورت یکجا از این الگو استفاده کنید:

<FilesMatch ^(\.env|composer\.(json|lock)|package\.json|yarn\.lock|.*\.sql|.*\.bak)$>

Require all denied

</FilesMatch>

جلوگیری از اجرای PHP در پوشه‌های خاص

پوشه‌های آپلود یکی از اهداف اصلی مهاجمان هستند. با قرار دادن htaccess داخل پوشه آپلود و استفاده از قانون زیر، اجرای PHP را در آن پوشه غیرفعال کنید:

<FilesMatch \.php$>

Require all denied

</FilesMatch>

این قانون در وردپرس برای wp-content/uploads بسیار رایج است، ولی برخی افزونه‌ها ممکن است نیاز به تست داشته باشند.

جلوگیری از هات‌لینک

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

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^https?://(www\.)?ornekdomain\.com [NC]

RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F,NC]

اگر از CDN یا شبکه‌های اجتماعی استفاده می‌کنید، دامنه‌های مجاز را به لیست سفید اضافه کنید. CDN Usage Website Performance

محدود کردن دسترسی بر اساس IP

برای محدود کردن دسترسی پنل مدیریت به IP خاص از دستور زیر استفاده کنید:

Require ip 203.0.113.10

اگر IP شما پویا است، بهتر است این محدودیت را همراه با رمز عبور به کار ببرید. برای بلاک کردن IP مخرب هم می‌توانید از ساختار RequireAll استفاده کنید.

هدرهای امنیتی: حفاظت در سطح مرورگر

با فعال بودن mod_headers می‌توانید هدرهای امنیتی زیر را اضافه کنید:

Header always set X-Content-Type-Options nosniff

Header always set X-Frame-Options SAMEORIGIN

Header always set Referrer-Policy strict-origin-when-cross-origin

Header always set Permissions-Policy geolocation=(), microphone=(), camera=()

این هدرها از حدس نوع فایل توسط مرورگر، جاسازی iframe و دسترسی به دوربین و میکروفون جلوگیری می‌کنند. برای Content-Security-Policy ابتدا در حالت گزارش تست کنید و سپس به‌تدریج فعال کنید.

چک‌لیست پیش از اعمال

چک‌لیست پیش از اعمال

تغییرات htaccess سریع اثر می‌گذارند، پس پیش از افزودن دستورات، موارد زیر را بررسی کنید:

  • از فایل htaccess فعلی بک‌آپ بگیرید
  • اطمینان حاصل کنید SSL فعال و درست نصب شده است
  • قوانین را یکی‌یکی اضافه و تست کنید
  • خطاهای ۵۰۰، ۴۰۳ و ۴۰۴ را در لاگ سرور چک کنید
  • قوانین بازنویسی وردپرس یا لاراول را حذف نکنید
  • با CDN و افزونه‌های کش تداخل را بررسی کنید

بهتر است دستورات را مرحله‌به‌مرحله اعمال کنید تا در صورت بروز مشکل بتوانید سریع منبع را پیدا کنید.

اشتباهات رایج و راه‌حل‌ها

خطای ۵۰۰ Internal Server Error

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

صفحه رمز مدام برمی‌گردد

اگر با وجود رمز صحیح صفحه دوباره ظاهر می‌شود، مسیر AuthUserFile اشتباه است یا مجوز فایل htpasswd نادرست است.

هدایت HTTPS در حلقه بی‌پایان

در پشت CDN یا پروکسی، ممکن است سرور همچنان HTTP ببیند. در این حالت از هدر X-Forwarded-Proto استفاده کنید و تنظیمات SSL در CDN را روی Full Strict قرار دهید.

امنیت htaccess در وردپرس

در وردپرس، قوانین بین BEGIN WordPress و END WordPress را دست نزنید. قوانین امنیتی را معمولاً بالای این بلوک یا زیر آن اضافه کنید. محافظت از wp-admin با htaccess، غیرفعال کردن PHP در پوشه آپلود و محدود کردن xmlrpc.php از جمله اقدامات مؤثر هستند. WordPress Hosting WordPress acceleration

نکات حرفه‌ای برای امنیت htaccess

مدیران سیستم باتجربه تعادل بین امنیت و قابلیت نگهداری را در نظر می‌گیرند. قوانین خیلی سختگیرانه ممکن است در بلندمدت هزینه نگهداری را بالا ببرد. هر قانون را با تاریخ و دلیل ثبت کنید و هر سه ماه یک‌بار قوانین قدیمی را بازبینی کنید.

نتیجه‌گیری: یک فایل کوچک، یک لایه امنیتی بزرگ

رمزگذاری فایل htaccess و دستورات افزایش امنیت، وقتی درست به کار گرفته شوند، اولین خط دفاعی وبسایت را تقویت می‌کنند. محافظت از پوشه‌ها با رمز، اجباری کردن HTTPS، بستن لیست پوشه‌ها، مسدود کردن فایل‌های حساس و فعال‌سازی هدرهای امنیتی، اقداماتی عملی و مؤثر برای اکثر سایت‌ها هستند. با این حال htaccess به‌تنهایی کافی نیست و باید همراه با هاستینگ مطمئن، گواهی SSL و بک‌آپ منظم استفاده شود. Web Hosting Packages Buy Domain SSL Certificates

سوالات متداول

آیا رمزگذاری htaccess واقعاً فایل‌ها را رمز می‌کند؟

خیر. این عبارت معمولاً به معنای محافظت از دایرکتوری با نام کاربری و رمز عبور است و برای انتقال امن داده‌ها همچنان به SSL و HTTPS نیاز دارید.

نگهداری htpasswd داخل public_html امن است؟

توصیه نمی‌شود. بهتر است فایل htpasswd را خارج از ریشه وب و در مسیری غیرقابل دسترسی از اینترنت قرار دهید.

پس از تغییر htaccess خطای ۵۰۰ گرفتم، چه کنم؟

آخرین خطوط اضافه‌شده را حذف کنید یا به فایل بک‌آپ برگردید و لاگ خطای سرور را بررسی کنید.

محافظت از wp-admin با htaccess درست است؟

بله، لایه امنیتی اضافی ایجاد می‌کند، اما برخی افزونه‌ها به admin-ajax.php نیاز دارند، پس بعد از اعمال حتماً بخش‌های مختلف سایت را تست کنید.

هدایت HTTPS از نظر سئو مشکل‌ساز است؟

اگر ۳۰۱ درست اعمال شود و زنجیره هدایت ایجاد نشود، نه تنها مشکلی ندارد بلکه ساختار URL را امن و یکپارچه می‌کند.

دا مقاله شریکه کړئ:

د Hostragons ټیم

زموږ د متخصص ټیم لخوا د کوربه توب، سرورونو او ډومین نومونو په اړه تازه لارښوونې. راځئ چې په ګډه ستاسو د پروژې لپاره سم حل ومومو.

له موږ سره اړیکه ونیسئ