Güvenlik ve Optimizasyon için .HTACCESS Modifikasyonları


Yazımız en son 2 Haziran 2014 tarihinde güncellenmiş ve 837 defa okunmuş.

Sitemizdeki güvenliği ve hızı .htaccess dosyamızla optimize etmek mümkün.

Bu dosya, Apache, LiteSpeed gibi Linux sunucularda çeşitli uygulamalarla ilgili ayarlar yapmamızı sağlayan dosyadır. Örneğin Google, sitenizin puanlaması için tarayıcı önbelleklemesini açmanızı ister. Peki bu ne anlama gelir?

Tarayıcı önbelleklemesi, siteniz ziyaret edildiğinde bazı dosya tiplerini belirli süreler boyunca değişmeyecek kabul ederek önbelleğe alır. Aynı kişi tekrar ziyarete geldiğinde, önbelleğe alınmış dosyalar aniden açılıp yüklenir, böylece tekrar yüklenmesi ve görüntülenmesi için zaman harcanmaz. Bu hem sunucunuzu korur, hem de kullanıcılarınızı memnun eder. Peki nasıl yapılır?

/public_html/ dizini (www de olur, aynı şey) içerisinde .htaccess dosyamızı metin editörüyle (notepad++ öneririm) açalım ve aşağıdaki kodları en sona ekleyelim;

#Belleğe alınmış dosyalar için son düzenleme kontrolünü iptal et
Header unset ETag
FileETag None

#html ve htm dosyalarını 1 gün süreyle önbelleğe al
<FilesMatch ".(html|htm)$">
Header set Cache-Control "max-age=1800"
</FilesMatch>

#CSS, JavaScript ve Metin dosyalarını 1 hafta süreyle önbelleğe al
<FilesMatch ".(js|css|txt)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>

#Flash dosyaları ve resimleri 1 ay süreyle önbelleğe al
<FilesMatch ".(flv|swf|ico|gif|jpg|jpeg|png)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

#PHP vb. betik dosyalarını önbelleğe alma
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>

#Vary Accept-Encoding header satırını ekler
<IfModule mod_headers.c>
<FilesMatch ".(js|css|xml|gz)$">
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>

Klasörlerdeki Dosya Listelemeyi İptal Etmek için

Normalde sitenizdeki bir klasörün adresini tarayıcıda açtığınızda karşınıza o klasördeki dosyalar gelir. Ancak bu güvenliğinizi tehlikeye düşürebilecek bir durum oluşturabilir. Bunu engellemek için aşağıdaki kodu .htaaccess dosyanızın en başına eklemenizi tavsiye ediyorum. Böylece klasörlere boş bir index.htm dosyası koymaya gerek de kalmamaktadır.

Options -Indexes

Eski hale getirmek için satırı silin ya da – sembolünü + ile değiştirin.

Bir Klasörün İçerisinde Script (Betik) Dosyası Çalışmasını Engellemek için

Sadece aşağıdaki kodu, .htaccess uzantılı bir dosyaya kaydedin ve bu dosyayı, hangi klasör ve altındaki klasörlerde PHP, HTML ya da benzeri bir dosya çalışmasın istiyorsanız o klasöre yükleyin. Örneğin WordPress siteleri için wp-content klasörü içerisindeki uploads klasörü bu iş için uygun bir klasördür. Böylece uploads klasörünü kullanan bir eklentideki açıktan yararlanıp, bu klasöre bir php dosyası gönderilip, sitede cirit atılmasını engellemiş olursunuz.

AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI

Sitemize Proxy v.b girişleri engellemek istiyorsak, şu satırları .htaccess dosyamıza ekleyelim;

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:VIA}                 !^$ [OR]
RewriteCond %{HTTP:FORWARDED}          !^$ [OR]
RewriteCond %{HTTP:USERAGENT_VIA}       !^$ [OR]
RewriteCond %{HTTP:X_FORWARDED_FOR}     !^$ [OR]
RewriteCond %{HTTP:PROXY_CONNECTION}    !^$ [OR]
RewriteCond %{HTTP:XPROXY_CONNECTION}   !^$ [OR]
RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} !^$ [OR]
RewriteCond %{HTTP:XROXY_CONNECTION}    !^$ [OR]
RewriteCond %{HTTP:X-FORWARDED-FOR}     !^$ [OR]
RewriteCond %{HTTP:HTTP_CLIENT_IP}      !^$ [OR]
RewriteCond %{HTTP:FORWARDED-FOR}       !^$ [OR]
RewriteCond %{HTTP:X-FORWARDED}         !^$
RewriteRule ^(.*)$ – [F]
</IfModule>

Peki sitemizde PHP tabanlı bir proxy engelleyici istiyorsak? Eğer WordPress veya benzeri bir CMS (içerik yönetim sistemi destekli site) kullanıyorsak, temamızın header.php dosyasına aşağıdaki satırı ekleyelim. Eğer CMS kullanmıyorsak header.php dosyanıza veya index.php dosyanıza en üste gelecek şekilde aşağıdaki satırları ekleyebilirsiniz.

<?php if(@fsockopen($_SERVER['REMOTE_ADDR'], 80, $errstr, $errno, 1))
die("Sitemize proxy v.b bağlantılarla giriş yapamazsınız."); ?>

Bir sonraki yazıda görüşmek üzere..

Fatih M. BAŞARAN