Indiańskie sztuczki czyli Apache Tweaks
Wiele razy konfigurując Apache'a, przy tworzeniu kolejnych stron czy serwisów szukałem w sieci tych samych informacji. Aż zdecydowałem zrobić swój notatnik sztuczek związanych z Apache'm...

Wiele razy konfigurując Apache'a, przy tworzeniu kolejnych stron czy serwisów szukałem w sieci tych samych informacji. Np. jak zabezpieczyć strone w budowie na hasło czy zwiększyć wartość maksymalnego uploadu na serwer. Aż zdecydowałem zrobić swój notatnik sztuczek związanych z Apache'm i rozszerzyć te moje zapiski o więcej niż lamerskie podpowiedzi na hinduskich blogach...
Wpis ten będzie aktualizowany z biegiem czasu, gdy napotkam i sprawdzę coś nowego zwiazanego z Apache'm
Zapraszam do lektury - może czymś zaskoczę - w temacie dośc utartym.
Włączenie lokalnych plików .htaccess
Allow / Deny
W celu zablokowania dostępu do danego katalogu na serwerze z poziomu przegladarki, nalezy w pliku .htaccess (w tym katalogu) umieścić poniższy wpis:
order deny,allow
deny from all
allow from none
Gdy chcemy aby tylko z konkretnych lokalizacji był dostęp należy tożsamo umieścić:
order allow,deny
allow from 1.1.1.1
deny from all
Gdy chcemy "zbanować" jakieś lokalizacje należy:
order deny,allow
deny from 1.1.1.1
allow from all
Tworzenie hasła przy pomocy htpass
htpass -c -s ./file_with_pass_hash user_name
gdzie:
-c - tworzenie pliku passfile. Jeżeli już istnieje, zostanie nadpisany przez nowotworzony.
-s - używamy szyfrowania SHA w celu hashowania hasła.
może również być:
-B - używamy szyfrowania Bcrypt w celu hashowania hasła. To wydaje się najbezpieczniejsze obecnie w htpass.
Aby usunąć wpis hasła danego uzytkownika z pliku passfile:
htpass -D user_name
Więcej komend i opisów w podręczniku użytkownika komendy htpass:
https://httpd.apache.org/docs/2.4/programs/htpasswd.html
Ustawienie passfile z htpass w Apache'owym .htaccess
W pliku .htaccess, w lokacji, którą chcemy chronić należy umieścić:
AuthUserFile /absolete/path/to/file_with_pass_hash
AuthName My Web Site
require valid-user
Ograniczenia dostępu na hasło
- Dostęp dla wszystkich na hasło, a tylko dla zadanych IPków bez hasła:
<IfModule mod_auth.c>
AuthName "Username and password required"
AuthUserFile /absolete/path/to/file_with_pass_hash
AuthType Basic
Require valid-user
Order Deny,Allow
Deny from all
Allow from 1.1.1.1
Allow from 1.1.1.2
Satisfy Any
</IfModule>
- Dostęp dla wszystkich bez hasła, a tylko dla zadanych IPków na hasło:
<IfModule mod_auth.c>
AuthName "Username and password required"
AuthUserFile /absolete/path/to/file_with_pass_hash
AuthType Basic
Require valid-user
Order Allow,Deny
Allow from all
Deny from 1.1.1.1
Deny from 1.1.1.2
Satisfy Any
</IfModule>
- Dostęp do danego pliku na hasło:
<IfModule mod_auth.c>
<Files "protected.html">
AuthName "Username and password required"
AuthUserFile /absolete/path/to/file_with_pass_hash
Require valid-user
AuthType Basic
</Files>
</IfModule>
- Dostęp do plików o danych rozszerzeniach na hasło:
<IfModule mod_auth.c>
<FilesMatch "\.(inc|txt|log|dat|zip|rar)$">
AuthName "Username and password required"
AuthUserFile /absolete/path/to/file_with_pass_hash
Require valid-user
AuthType Basic
</FilesMatch>
</IfModule>
Przekierowania przy pomocy .htaccess
- Przekierowanie z pliku file.html do nowej lokalizacji:
Redirect 301 file.html http://yourdomain.com/new/file.html
- Przekierowanie całego katalogu:
RedirectMatch 301 /blog(.*) http://yourdomain.com/$1
- Przekieroanie HTTP na HTTPS:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Przekierowania Rewrite przy pomocy .htaccess
- Przekierowanie product.php?id=12 na product-12.html:
RewriteEngine on
RewriteRule ^product-([0-9]+)\.html$ product.php?id=$1
- Przekirowanie product.php?id=12 na product/ipod-nano/12.html
RewriteEngine on
RewriteRule ^product/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ product.php?id=$2
- Przekierowanie bez sufixu www na url z sufixem www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^viralpatel\.net$
RewriteRule (.*) http://www.viralpatel.net/$1 [R=301,L]
- Przekierowanie yoursite.com/user.php?username=xyz na yoursite.com/xyz
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?username=$1
- Przekierowanie domeny na nowy subfolder wewnątrz public_html
RewriteEngine On
RewriteCond %{HTTP_HOST} ^test\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteCond %{REQUEST_URI} !^/new/
RewriteRule (.*) /new/$1
Wyłączenie listowania katalogów
Options -Indexes
lub
IndexIgnore *
Odmowa dostępu dla statycznych plików (obrazków, css, itd...) jeżeli pole referrer nie jest lokalne lub puste:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
RewriteCond %{HTTP_REFERER} !^http://www.askapache.com.*$ [NC]
RewriteRule \.(ico|pdf|flv|jpg|jpeg|mp3|mpg|mp4|mov|wav|wmv|png|gif|swf|css|js)$ - [F,NS,L]
Limity w .htaccess
php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200
, gdzie
upload_max_filesize - maksymalna wielkość pliku uploadowanego
post_max_size - maksymalna wielkość przedmiotu wysyłanego POSTem
max_execution_time - maksymalny czas wykonywania w sekundach podczas sciągania plików
max_input_time - maksymalny czas wykonywania w sekundach podczas ładowania plików
Zmiana lokalnie strony kodowej
AddDefaultCharset UTF-8
DefaultLanguage pl-PL
Zabronienie zapisywania 'Zapisz jako' z poziomu przeglądarki
addType application/octet-stream .avi .mpg .mov .pdf .xls .mp4
Blokowanie requestów do strony w zależności od złych wartości User-Agent
SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT
Zatrzymywania złego hotlinkowania obrazków z Twojej strony:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !google. [NC]
RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
RewriteCond %{HTTP_REFERER} !msn. [NC]
RewriteCond %{HTTP_REFERER} !yahoo. [NC]
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]
<IfModule mod_autoindex.c>
IndexOptions FancyIndexing IconHeight=16 IconWidth=16
</ifModule>