Autor Zpráva
DomXXX
Profil *
Ahojte,

mám takovouto strukturu aplikace:
./www_root
     |--->css
            |--->css.css
     |--->img
            |--->logo.png
            |--->*.png
     |--->scripts
     |--->.htacces
     |--->index.php
     |--->admin_index.php
     |--->user_index.php

Jak můžu zakázat přístup do css, img, scripts adresářů + jejich obsahu a zakázat přímé spuštění admin_index.php, user_index.php?

Momentálně můj .htacces vypadá takto:

SetEnv APP_ENV PRODUCTION

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.+/$
RewriteRule ^(.+)$ $1/ [R=301,L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

Mimochodem, netuším k čemu je zde
<Files .*>
      Order Deny,Allow    
      Deny From All
</Files>
Řekl bych, že toto na nic vliv nemá...
Díky předem.
Tori
Profil
DomXXX:

<Files .*> 
Order Deny,Allow 
Deny From All 
</Files>
- tohle blokuje přístup ke všem souborům (ve všech složkách), které začínají tečkou. Pro víc informací viz manuál.

Jak můžu zakázat přístup do css, img, scripts adresářů
Do každého dáte soubor .htaccess s obsahem
Order Deny,Allow 
Deny From All
- bez té části <Files>, protože chcete zakázat všechny soubory v adresáři.

JAk můžu zakázat přímé spuštění admin_index.php, user_index.php
Tohle bych asi udělala v PHP. Na začátku těch skriptů bych testovala, jestli existuje nějaká konstanta, kterou definujete v index.php, a pokud neexistuje (= nejsou includované do index.php) tak přesměrovat na index.php.
DomXXX
Profil *
Díky :-)

nenapadlo mě, že .* znamená blokaci souborů začínajících tečkou, myslel jsem si, že to jsou všechny soubory, ovšem nechápal jsem, jak je možný, že to nefunguje ;-)

Takže udělat to centrálně v .htaccess kterej je v ./www_root toto nelze?
Pokud ne, není lepší přidat do adresářů index.php a patřičným kódem? Nebo nastavení .htaccess dědí i posložky? Myslím si, že ne...

To přímé spuštění jsem nakonec vyřešil trošku jinak, a to tak, že jsem admin a user index sloučil do jednoho indexu... byly v podstatě identické, nevím proč mě to nenapadlo dřív... taková prkotina ;-)
Tori
Profil
DomXXX:
Jak můžu zakázat přístup do css, img, scripts adresářů + jejich obsahu
Jak jste to přesně myslel? Aby se
1) při zadání adresa-webu/css/ nezobrazoval seznam souborů v adresáři, anebo
2) aby skutečně ke všem stylopisům, skriptům a obrázkům měly přístup pouze PHP skripty?

To co jsem radila (s Deny from All) řeší druhou možnost. První případ by se napsal tak, že do www_root/.htaccess doplníte řádek Options -Indexes, nastavení se dědí v podadresářích.
Nastavení ve <Files> se rovněž aplikuje na všechny podadresáře (koukněte na ten odkázaný manuál). Trochu to plete - u RewriteRule zadáváte tečku v kontextu reguláru (tedy "jakýkoli znak"), ale u <Files> podobně jako v příkazové řádce (tedy "tečka").

Podle řádků 16-17 a 22-23 by se měly normálně zobrazit existující soubory (např. /img/logo.png). Nevím co to udělá, kdyby v adresáři img byl .htaccess se zablokováním přístupu. Vyzkoušejte. :)
DomXXX
Profil *
Myslel jsem právě možnost 2)

kód
<Files .*> 
Order Deny,Allow 
Deny From All 
</Files>

jsem již pochopil, neuvědomil jsem si (respektive nevěděl, i když to bylo u komentáře), že .* jsou na Linuxu skryté soubory... (v případě .htaccess na Win. je vrácen error 403.

Problém s Deny from All je ten, že mi zakazuje přístup i samotným PHP skriptům, pokud nedělám něco blbě...
Tori
Profil
DomXXX:
Problém s Deny from All je ten, že mi zakazuje přístup i samotným PHP skriptům
To je divné, nemělo by to tak být, tenhle způsob se běžně používá. Nepřistupujete k těm [nedostupným] skriptům přes URL místo cestu ve filesystému?
Joker
Profil
DomXXX:
Problém s Deny from All je ten, že mi zakazuje přístup i samotným PHP skriptům
PHP skript ty soubory načíst může (třeba přes fopen).

Akorát já se vsadím, že ve skutečnosti ty soubory neotevíráte v PHP, ale dáváte odkazy na ně do stránky (přes <link> a <img> třeba).
No a protože zobrazení třeba obrázku na stránce vyžaduje nejdřív přístup k souboru s obrázkem a jeho stažení do počítače návštěvníka, logicky to nefunguje.
Davex
Profil
DomXXX:
Problém s Deny from All je ten, že mi zakazuje přístup i samotným PHP skriptům
Chtěl jsi zakázat přístup ke všem souborům v adresářích, takže musíš dát soubory .htaccess se zákazem jen do adresářů a ne do kořene.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: