آموزش وردپرس
موضوعات داغ

15 دستور مفید در .htaccess برای وردپرس

محتوای فایل .htaccess برای وردپرس

کانفیگ صحیح فایل .htaccess برای ارتقاء امنیت سایت وردپرسی شما و نیز کاهش آسیب پذیری آن حیاتی است. به طور معمول هدف اصلی از ایجاد یک فایل .htaccess سفارشی، ارتقاء امنیت و در نتیجه ممانعت از هک وب سایت است اما همچنین میتواند یک روش عالی برای مدیریت ریدایرکت ها و نیز مدیریت وظایف مرتبط با کش باشد.

.htaccess در واقع یک فایل پیکربندی است که برای وب سرور Apache استفاده می شود. اکثر سایت های وردپرسی بر روی وب سرور Apache راه اندازی می شود. اگر چه بخش کوچکی نیز از وبسرور Nginx  و یا Litespeed استفاده می کنند. که البته LiteSpeed نیز از .htaccess پشتیبانی می کند.

در این مقاله مجموعه ای از دستورات بسیار مفید و کاربردی را برای .htaccess می یابید که اکثرا به ارتقاء امنیت وبسایت شما کمک می کند.

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

در صورتی که شما از آن دسته از افراد هستید که نگران ایجاد تغییر به صورت دستی در .htaccess هستند، استفاده از پلاگین BulletProof Security را که یکی از قدیمی ترین و همچنین قابل اعتمادترین پلاگین های امنیتی رایگان موجود برای وردپرس است را به شما پیشنهاد می کنیم.

ساخت فایل .htaccess با محتویات پیشفرض برای وردپرس

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

در ادامه شما میتوانید محتویات پیشفرض فایل .htaccess را برای وردپرس ببینید:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

خط اول با # کامنت شده است. توجه کنید هیچ چیزی را بین # BEGIN WordPress و # END WordPress ویرایش نکنید و کد مورد نظر خود را زیر این دستورات پیشفرض قرار دهید.

تمام دستوراتی که در ادامه می اید باید در فایل .htaccess موجود در ریشه سایت شما قرار گیرد.

1- منع کردن Deny دسترسی به تمام فایلهای .htaccess موجود

دستور زیر دسترسی به تمام فایل های .htaccess موجود در وردپرس شما را منع Deny می کند. با  این روش شما مانع دیده شده فایل پیکربندی وب سرور توسط دیگران می شوید.

# Denies access to all .htaccess files
<Files ~ "^.*\.([Hh][Tt][Aa])">
Order Allow,Deny
Deny from all
Satisfy all
</Files>

 

2- محافظت از فایل کانفیگ وردپرس

فایل wp-config.php دربردارنده تمام اطلاعات پیکربندی وردپرس شماست و همچنین محتوی نام کاربری و پسورد دیتابیس شما نیز هست.شما می توانید دسترسی همه را به این فایل قطع کنید و یا فقط به مدیر مجوز دسترسی بدهید.

اگر # را از ابتدای # Allow from xx.xx.xx.xxx در کدی زیر بردارید و ip مدیر را جایگزین xx.xx.xx.xxx نمایید، تنها مدیر امکان دسترسی به این فایل را خواهد داشت.

# Protects wp-config
<Files wp-config.php>
Order Allow,Deny
# Allow from xx.xx.xx.xxx
# Allow from yy.yy.yy.yyy
Deny from all
</Files>

3- ممانعت از حملات DDOS به XML-RPC

وردپرس به طور پیشفرض از XML-RPC پشتیبانی می کند. که در واقع یک اینترفیس است که ارسال مطالب از راه دور را ممکن می سازد.در هرحال در عین حال که یک امکان خوب است یکی از بزرگترین آسیب پذیری های وردپرس نیز به شما می آید که می تواند زمینه ای برای حملات DDOS باشد.

اگر شما تمایلی به استفاده از این قابلیت ندارید کافی است آنرا با دستورات زیر غیرفعال کنید.درست مثل دستور قبلی به همان روش می توانید دسترسی را برای مدیر باز بگذارید.

# Protects XML-RPC, prevents DDoS attack
<FilesMatch "^(xmlrpc\.php)">
Order Deny,Allow
# Allow from xx.xx.xx.xxx
# Allow from yy.yy.yy.yyy
Deny from all
</FilesMatch>

 

4- بخش مدیریت وردپرس را امن کنید

محدود کردن دسترسی به بخش مدیریت وردپرس تنها برای مدیران سایت می تواند ایده خوبی برای ارتقاء امنیت وردپرس باشد.

# Protects admin area by IP
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "WordPress Admin Access Control"
AuthType Basic
<LIMIT GET>
Order Deny,Allow
Deny from all
Allow from xx.xx.xx.xxx
Allow from yy.yy.yy.yyy
</LIMIT>

فراموش نکنید رول Allow با ip مدیر قرار دهید در غیر این صورت دسترسی به بخش مدیریت کاملا بسته خواهد شد.

5- جلوگیری از لیست شدن محتویات دایرکتوری

اکثر وبسایت های وردپرسی لیست شدن دایرکتوری را غیرفعال نکرده اند، این بدان معنی است که هر کسی میتواند دایرکتوری ها و فایلهای آنها را مرور کند! باید گفت این یک باگ امنیتی بسیار خطرناک است.

در تصویر زیر می بینید، محتویات یک فولدر وردپرس چطور نمایش داده می شود:

directory listing
directory listing

خوشبختانه شما تنها به اضافه کردن یک خط نیاز دارید تا این امکان را غیرفعال کنید، این کد باعث می شود هر کسی قصد مرور محتویات فولدرها را داشته باشد با خطای 403 مواجه شود.

# Prevents directory listing
Options -Indexes

6- ممانعت از شمارش کاربران مدیر

اگر پیوندهای یکتای وردپرس فعال باشد، به آسانی میتوان نام کاربری کاربران مدیر سایت را با مرور آرشیو مطالب نویسندگان سایت کشف کرد! یافتن نام کاربری مدیران سایت (که شامل مدیرکل سایت نیز میشود) اولین مرحله برای حملات brute force می باشد.

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

# Prevents username  enumeration
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]

7-مسدود کردن ربات ها و اسپم ها

ممکن است شما بخواهید دسترسی به سایت را از یک ip خاص مسدود کنید و در نتیجه با مسدود کردن ip ربات ها و اسپم هایی که شناسایی کرده اید دسترسی آنها را نیز به سایت قطع نمایید.

دستورات زیر به این منظور به کار می روند:

# Blocks spammers and bots
<Limit GET POST>
Order Allow,Deny
Deny from xx.xx.xx.xxx
Deny from yy.yy.yy.yyy
</Limit>
Allow from all

8- ممانعت از hotlinking تصاویر سایت شما

گرچه تهدید امنیتی نیست، اما hotlinking تصاویر یک امر آزاردهنده است. افراد نه تنها از تصاویر سایت شما بدون کسب مجوز استفاده می کنند بلکه به حساب شما این کار را انجام می دهند!

با این چند کد ساده شما می توانید از hotlinking تصاویر بر روی سایتتان ممانعت کنید:

# Prevents image hotlinking
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite2.com [NC]
RewriteRule \.(jpe?g?|png|gif|ico|pdf|flv|swf|gz)$ - [NC,F,L]

9- محدود کردن دسترسی مستقیم به فایلهای php قالب و پلاگین های وردپرس

این می تواند خطرناک باشد اگر فردی فایل های قالب و یا پلاگین های شما را مستقیما فراخوانی کند، چه این فراخوانی به طور تصادفی اتفاق بیوفتد و یا توسط یک حمله مخرب انجام شود.

کدهای زیر می تواند در این مورد به شما کمک کنند:

# Restricts access to PHP files from plugin and theme directories
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]

10- تنظیم تغییر مسیر دایمی

شما به راحتی می توانید تغییر مسیر لینکها را توسط .htaccess مدیریت کنید. ابتدا باید مسیر قدیمی را وارد کنید و سپس مسیر جدیدی که مایلید کاربر به آن هدایت شود.

# Permanent redirects
Redirect 301 /oldurl1/ http://yoursite.com/newurl1
Redirect 301 /oldurl2/ http://yoursite.com/newurl2

 

11- بازدیدکنندگان را به صفحه maintenance (درحال تعمیر) هدایت کنید

شما باید ابتدا یک صفحه تعمیرات مثلا با نام maintenance.html  ایجاد کنید و سپس با دستورات زیر بازدید کننده سایت را به صفحه تعمیرات هدایت کنید.

# Redirects to maintenance page
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.html [R=503,L]
</IfModule>

 

12- مسدود کردن تماس دسترسی ها به WP includes

فولدر /wp-includes/ فایل های هسته وردپرس را در بردارد که سیستم مدیریت محتوا برای کار کردن به آنها احتیاج دارد. در واقع این محتویات، قالب یا پلاگین و یا محتوایی نیست که لازم باشد کاربر به آن دسترسی داشته باشد. پس برای کسب امنیت در سطح بالاتر تمام دسترسیها به این فولدر را می بندیم.

# Blocks all wp-includes folders and files
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

 

13- مسدود کردن حملات تزریق کد (Cross Site Scripting) – XSS

دستورات زیر می تواند جلوی برخی از حملات معمول تزریق کد XSS را بگیرد:

# Blocks some XSS attacks
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F,L]
</IfModule>

14- فعال کردن کش مرورگر

همانطور که در ابتدای این مقاله هم گفتیم، هدف اصلی از شخصی سازی فایل .htaccess ارتقاء امنیت سایت است اما در کنار آن می توان برای مدیریت تنظیمات کش نیز از آن بهره برد. کدی که در ادامه خواهد آمد کش مرورگر بازدید کننده را فعال خواهد کرد و مرورگر کاربر را وادار می کند تا فایلهای ثابت را یک بار دانلود و ذخیره نماید و در نتیجه لازم نباشد هر بار این فایل ها دانلود شود.

# Enables browser caching
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 2 days"
</IfModule>

 

15- تنظیم صفحات خطای شخصی سازی شده

همیچنین می توانید از .htaccess برای تنظیم صفحات خطای دلخواه برای وردپرس نیز استفاده کنید. برای پیاده سازی این روش، شما در ایتدا نیاز دارید تا صفحات خطا را ایجاد کنید. (custom-403.html, custom-404.html در این مثال) و آن ها را در ریشه وردپرس خود آپلود نمایید.

شما میتوانید صفحه دلخواه خود را برای تمامی خطای معمول http یعنی (4XX and 5XX status codes) ایجاد کنید.

# Sets up custom error pages
ErrorDocument 403 /custom-403.html
ErrorDocument 404 /custom-404.html

امیدوارم این مطلب به شما در ارتقای امنیت وبسایت و پیکربندی بهتر .htaccess کمک کند.

در صورتی که سوالی در مورد این مطلب دارید و یا مایلید چیزی به این مقاله اضافه کنید خوشحال می شویم در بخش نظرات آنها را مطرح نمایید.

< آخرین آموزش‌های پایگاه دانش تسنیم را در تلگرام دنبال کنید >

نوشته های مشابه

‫9 دیدگاه ها

  1. سلام
    برای پچ کردن clickjacking من از گیت هاب یه تگ دیدم به ادرس :
    https://gist.github.com/rbl00/7993166
    که یه تگ بود :
    #
    # Header set X-Frame-Options “DENY”
    #
    # Header unset X-Frame-Options
    #
    #
    گذاشتمش توی .htaccess اما باز پچ نشد
    ممنون میشم راهنمایی کنید در مورد این باگ و نحوه پچ کردنش !!

  2. خیلی تشکر بابت آموزش ها
    خیلی کاربردی و مهم بودن
    آموزش جامع و کاملی بود و عالی توضیح دادین

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا