کانفیگ صحیح فایل .htaccess برای ارتقاء امنیت سایت وردپرسی شما و نیز کاهش آسیب پذیری آن حیاتی است. به طور معمول هدف اصلی از ایجاد یک فایل .htaccess سفارشی، ارتقاء امنیت و در نتیجه ممانعت از هک وب سایت است اما همچنین میتواند یک روش عالی برای مدیریت ریدایرکت ها و نیز مدیریت وظایف مرتبط با کش باشد.
.htaccess در واقع یک فایل پیکربندی است که برای وب سرور Apache استفاده می شود. اکثر سایت های وردپرسی بر روی وب سرور Apache راه اندازی می شود. اگر چه بخش کوچکی نیز از وبسرور Nginx و یا Litespeed استفاده می کنند. که البته LiteSpeed نیز از .htaccess پشتیبانی می کند.
در این مقاله مجموعه ای از دستورات بسیار مفید و کاربردی را برای .htaccess می یابید که اکثرا به ارتقاء امنیت وبسایت شما کمک می کند.
فراموش نکنید قبل از هر تغییری در فایل .htaccess یک بکاپ از آن تهیه کنید تا در صورتی بروز هر مشکلی بتوانید به راحتی به نسخه بکاپ بازگردید.
در صورتی که شما از آن دسته از افراد هستید که نگران ایجاد تغییر به صورت دستی در .htaccess هستند، استفاده از پلاگین BulletProof Security را که یکی از قدیمی ترین و همچنین قابل اعتمادترین پلاگین های امنیتی رایگان موجود برای وردپرس است را به شما پیشنهاد می کنیم.
.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 موجود در ریشه سایت شما قرار گیرد.
۱- منع کردن Deny دسترسی به تمام فایلهای .htaccess موجود
دستور زیر دسترسی به تمام فایل های .htaccess موجود در وردپرس شما را منع Deny می کند. با این روش شما مانع دیده شده فایل پیکربندی وب سرور توسط دیگران می شوید.
# Denies access to all .htaccess files <Files ~ "^.*.([Hh][Tt][Aa])"> Order Allow,Deny Deny from all Satisfy all |
فایل 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 |
وردپرس به طور پیشفرض از 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> |
محدود کردن دسترسی به بخش مدیریت وردپرس تنها برای مدیران سایت می تواند ایده خوبی برای ارتقاء امنیت وردپرس باشد.
# 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 |
فراموش نکنید رول Allow با ip مدیر قرار دهید در غیر این صورت دسترسی به بخش مدیریت کاملا بسته خواهد شد.
اکثر وبسایت های وردپرسی لیست شدن دایرکتوری را غیرفعال نکرده اند، این بدان معنی است که هر کسی میتواند دایرکتوری ها و فایلهای آنها را مرور کند! باید گفت این یک باگ امنیتی بسیار خطرناک است.
در تصویر زیر می بینید، محتویات یک فولدر وردپرس چطور نمایش داده می شود:
directory listingخوشبختانه شما تنها به اضافه کردن یک خط نیاز دارید تا این امکان را غیرفعال کنید، این کد باعث می شود هر کسی قصد مرور محتویات فولدرها را داشته باشد با خطای ۴۰۳ مواجه شود.
# Prevents directory listing Options -Indexes |
اگر پیوندهای یکتای وردپرس فعال باشد، به آسانی میتوان نام کاربری کاربران مدیر سایت را با مرور آرشیو مطالب نویسندگان سایت کشف کرد! یافتن نام کاربری مدیران سایت (که شامل مدیرکل سایت نیز میشود) اولین مرحله برای حملات brute force می باشد.
از کد زیر برای ممانعت از مرور و یافتن نام کاربری مدیران سایت استفاده کنید:
# Prevents username enumeration RewriteCond %{QUERY_STRING} author=d RewriteRule ^ /? [L,R=301] |
ممکن است شما بخواهید دسترسی به سایت را از یک ip خاص مسدود کنید و در نتیجه با مسدود کردن ip ربات ها و اسپم هایی که شناسایی کرده اید دسترسی آنها را نیز به سایت قطع نمایید.
دستورات زیر به این منظور به کار می روند:
# Blocks spammers and bots <Limit GET POST> Order Allow,Deny Deny from xx.xx.xx.xxx Deny from yy.yy.yy.yyy Allow from all |
گرچه تهدید امنیتی نیست، اما 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] |
این می تواند خطرناک باشد اگر فردی فایل های قالب و یا پلاگین های شما را مستقیما فراخوانی کند، چه این فراخوانی به طور تصادفی اتفاق بیوفتد و یا توسط یک حمله مخرب انجام شود.
کدهای زیر می تواند در این مورد به شما کمک کنند:
# 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] |
شما به راحتی می توانید تغییر مسیر لینکها را توسط .htaccess مدیریت کنید. ابتدا باید مسیر قدیمی را وارد کنید و سپس مسیر جدیدی که مایلید کاربر به آن هدایت شود.
# Permanent redirects Redirect 301 /oldurl1/ http://yoursite.com/newurl1 Redirect 301 /oldurl2/ http://yoursite.com/newurl2 |
شما باید ابتدا یک صفحه تعمیرات مثلا با نام 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> |
فولدر /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> |
دستورات زیر می تواند جلوی برخی از حملات معمول تزریق کد 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> |
همانطور که در ابتدای این مقاله هم گفتیم، هدف اصلی از شخصی سازی فایل .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> |
همیچنین می توانید از .htaccess برای تنظیم صفحات خطای دلخواه برای وردپرس نیز استفاده کنید. برای پیاده سازی این روش، شما در ایتدا نیاز دارید تا صفحات خطا را ایجاد کنید. (custom-403.html, custom-404.html در این مثال) و آن ها را در ریشه وردپرس خود آپلود نمایید.
شما میتوانید صفحه دلخواه خود را برای تمامی خطای معمول http یعنی (۴XX and 5XX status codes) ایجاد کنید.
# Sets up custom error pages ErrorDocument 403 /custom-403.html ErrorDocument 404 /custom-404.html |
امیدوارم این مطلب به شما در ارتقای امنیت وبسایت و پیکربندی بهتر .htaccess کمک کند.
در صورتی که سوالی در مورد این مطلب دارید و یا مایلید چیزی به این مقاله اضافه کنید خوشحال می شویم در بخش نظرات آنها را مطرح نمایید.
همیار وردپرس...برچسب : نویسنده : جمشید رضایی بازدید : 147