محدود کردن دسترسی به سایت با فایل .htaccess

فایل .htaccess

همیشه یکی از دغدغه های مدیران سایت‌ها این است که چطور می‌توانند جلوی دسترسی برخی از بازدیدکنندگان به سایت‌شان را بگیرند. این کار با کنترل روی نرم افزاری که کارش دریافت درخواست‌های بازدیدکنندگان و پردازش و آماده سازی و تحویل محتوا و صفحات سایت به بازدید کنندگان است، به راحتی امکان‌پذیر است. این نرم افزار همان وب سرور (Web Server) است که می تواند Apache و یا Nginx و یا LiteSpeed باشد. هر کدام از این وب سرورها دارای روشی برای کنترل دسترسی بازدید کنندگان سایت است.

اگر وب سرور سایت شما Apache یا LiteSpeed است، فایلی که اینجا نقش مهمی را برای اعمال تنظیمات دلخواه بازی می‌کند، .htaccess است. این فایل به نام سند پیکربندی در هنگام اجرای وب سرور معروف است. یعنی بدون اینکه نیاز باشد تا تغییرات اصلی وب سرور را تغییر دهیم، تنها با ویرایش این سند روی هر پوشه یا مسیر سیستم فایل هاست، سفارشی سازی های دلخواه خود را فقط در همان مسیر اعمال می‌کنیم.

حالا اگر ما خواسته باشیم تا دسترسی همه یا برخی از بازدیدکنندگان سایت را با در نظر گرفتن قیود خاصی محدود کنیم، این فایل به کمک ما خواهد آمد و در ادامهٔ ماجرا برخی از کدهای پر استفاده .htaccess برای محدود کردن دسترسی بازدید کنندگان را در اختیار شما همراهان وبنولوگ قرار می‌دهیم.

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

بستن دسترسی به کل سایت

اگر خواستید دسترسی کل بازدید کنندگان سایت‌تان را ببندید، باید از کد زیر درون فایل .htaccess استفاده کنید. با اعمال این کد کل بازدیدهای سایت خطای 403 دریافت می‌کنند.

Require all denied

بستن دسترسی به فایل های خاص

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

<FilesMatch "\.(inc)$">
  Require all denied
</FilesMatch>

به جای پسند inc هر چیزی که خواسته باشید را می‌توانید در خط اول کد بالا قرار دهید.

اما از آن جایی که همانطور که گفته شد، فایل‌های مخفی روی لینوکس با نقطه شروع می‌شوند و اگر خواسته باشیم ما این فایل‌ها را از دسترس خارج کنیم، باید از کد زیر استفاده شود:

RedirectMatch 403 /\..*$

این قبیل فایل‌ها معمولا شامل اطلاعات مهمی هستند. بنابراین بهتر است که آنها را همیشه با خطای 403 از دسترس خارج کنید.

بستن دسترسی به پوشه های خاص

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

RewriteEngine On
RewriteRule (^|/)abcxyz(/|$) - [F]

به جای abcxyz می‌بایستی نام پوشه را جایگزین نمایید.

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

Options -Indexes

بستن دسترسی در زمان های خاصی از شبانه روز

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

RewriteEngine On
# If the hour is 16 (4 PM)
RewriteCond %{TIME_HOUR} ^16$
# Then deny all access
RewriteRule ^.*$ - [F,L]

این کدها دسترسی را برای ساعت ۴:۰۰ تا ۴:۵۹ عصر می بندد. اگر خواسته باشید چندین ساعت را مشخص کنید، می‌بایستی به روش زیر اقدام کنید.

RewriteEngine On
# Multiple hour blocks
# If the hour is 4 PM or 5 PM or 8 AM
RewriteCond %{TIME_HOUR} ^16|17|08$
# Then deny all access
RewriteRule ^.*$ - [F,L]

بستن دسترسی روی IP

اگر خواسته باشید دسترسی یک آی پی روی سایت را بندید از کد زیر استفاده کنید، که باید آی پی آن را تعویض کنید.

<RequireAll>
  Require all granted
  Require not ip 123.265.200.122
</RequireAll>

اگر یک بلوک آی پی را قصد داشته باشید مسدود کنید، باید آخرین قسمت آی پی را باید خالی بگذارید.

<RequireAll>
Require all granted
Require not ip 123.265.200.
</RequireAll>

اگر برعکس مورد بالا، خواسته باشید تمامی دسترسی‌ها به غیر از آنهایی که مشخص کردید بسته شوند، باید از کد زیر استفاده کنید. که به جای <YOUR_IP_ADDRESS> باید

<RequireAny>
  Require all denied
  Require ip <YOUR_IP_ADDRESS>
</RequireAny>

بستن دسترسی از یک دامنه خاص

باز هم اگر خواسته باشید از یک دامنه دسترسی به سایت‌تان را ببندید، کد آن از این قرار است که به جای example.com باید دامنه مد نظر تان را جایگذاری کنید.

<RequireAll>
  Require all granted
  Require not host example.com
</RequireAll>

به غیر از این کدها برای بستن دسترسی کل یا برخی از بازدیدکنندگان به قسمت‌هایی از سایت، موارد دیگری هم هستند که اگر کسی خواسته باشد در این ضمینه حرفه‌ای شود، حتما بایستی مستندات وب سرور آپاچی را مطالعه کند تا با نحوهٔ کار دستورات پیکربندی آن که معمولا درون سند .htaccess قرار می‌گیرند، آشنا شود.

ژوئن 7, 2025 Webnolog بدون دیدگاه

0 دیدگاه

دیدگاه تان را ارسال کنید.

ایمیل شما منتشر نخواهد شد!