.htaccess, is dit wel veilig?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
RewriteEngine on // zet rewrite engine aan
RewriteCond %{REQUEST_FILENAME} !-f // controleer of url niet naar een bestand verwijst
RewriteCond %{REQUEST_FILENAME} !-d // controleer of url niet naar een directory verwijst
RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA] // stuur alles wat niet naar een bestand of directory verwijst door naar index.php
RewriteCond %{REQUEST_FILENAME} !-f // controleer of url niet naar een bestand verwijst
RewriteCond %{REQUEST_FILENAME} !-d // controleer of url niet naar een directory verwijst
RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA] // stuur alles wat niet naar een bestand of directory verwijst door naar index.php
Nu is mijn vraag de volgende. Je wil dat css bestanden, jpg's, wmv's enz niet worden doorgestuurd naar index.php. Dit wordt bewerkstelligd door deze regel in het htaccess bestand: RewriteCond %{REQUEST_FILENAME} !-f
Echter, ik vraag me af of dit wel velig is. Volgens mij kun je nu toch ook gewoon php bestanden aanroepen? Dit zijn immers ook gewoon bestanden. Als je dus de naam en locatie van een bestand weet, kun je dit bestand volgens mij rechtstreeks aanroepen. Correct?
Indien bovengenoemde waar is , dan zou een alternatief zijn om alleen bestanden die NIET een bepaalde bestandsextensie hebben door te sturen naar index.php. Dan krijg je zoiets als:
RewriteRule !\.(bmp|css|csv|doc|jpg|js|zip|enz|enz|enz)$ index.php
Deze oplossing is (denk ik) veiliger. Echter, om er voor te zorgen dat alle afbeeldingen, filmpjes, documenten etc niet naar index.php worden gestuurd, zul je alle extensies moeten toevoegen in deze rewrite regel wat ik vrij omslachtig vind aamgezien dit er misschien wel 30 of meer zijn. Stel dat er bovendien een nieuw bestandstype uitkomt dan zou je dat telkens weer moeten toevoegen.
Wie weet een betere oplossing waardoor web(html, html, php, phtml enz) documenten naar index worden gestuurd en alle overige bestanden (jpg, css, doc, zip enz) niet?
Dan is de vraag hoe erg is het als iemand je index.php los aanroept?
Ja maar zo'n htaccess bestand is overkoepelend dus je zou (indien dit bestand op de betreffende locatie bestaat) ook config/config.ini kunnen aanroepen.
Je config zet je buiten je webroot. Doe je dit niet, ben je een ei en vraag je erom.
Voorbeeld
/application/... <- de classes etc
/config/config.ini
/public_html/index.php
/public_html/.htaccess
public_html is mijn webroot, zo kunnen ze niet bij mijn config
Door het buiten de webroot te plaatsen voorkom je ook dat het te lezen is als bijvoorbeeld php tijdelijk niet werkt. (Ik heb wel eens gezien dat blijkbaar PHP overnieuw gecompiled werd en je daardoor ineens de code kon lezen)
Gewijzigd op 05/01/2011 11:55:01 door TJVB tvb
Tuurlijk zet je je config buiten je webroot... ik geef dit dus alleen even als voorbeeld. Ik wil gewoon niet dat iemand een webdocument kan aanroepen.
Aanroepbaar zijn:
-css
-javascript
-afbeeldingen
-index.php (waar alle verdere requesten naartoe gestuurd worden)
Stel mijn index.php bestand zoekt in de private map naar een bepaald bestand. Stel dat dit bestand niet gevonden wordt, dan moet een 'not found' pagina worden getoond. Deze pagina moet nooit getoond worden, behalve als tijdens het installeren op de server iets fout gaat. Maar als je wil zou je dus die pagina kunnen aanroepen. Daarom wil ik dus voorkomen dat je uberhaupt een webpagina kan aanroepen.
Dan kun je dat toch als eis van je installatie zeggen dat dit bestand verwijderd moet worden?
Ja maar dat wil ik niet. De vraag is nu dus hoe ik op de beste manier een htaccess bestand kan maken zodat jpg's, wmv's enz NIET worden doorgestuurd naar index.php en de rest wel.
Je wilt dat een bestand eerst wel aan te roepen is (tijdens je installatie) en daarna niet meer. Nu kun je automatisch je .htaccess aanpassen of automatisch dat bestand verwijderen.
Of je moet één van beide handmatig doen.
Je hebt al weergegeven hoe je bestanden uitsluit van je regel. Je kunt op dezelfde manier juist besluiten alleen requesten naar .php bestanden naar je index te sturen.
Het kan zijn dat ik je geheel verkeerd begrijp en dan hoor ik graag wat ik verkeerd begrijp.
www.mijnsite.nl/kantoorartikelen/nietmachines
Intern wordt deze url dan geroute naar een controller en action. Daarom moet deze url dus doorgestuurd worden naar index.php
Alleen bepaalde bestanden als jpg wmv etc. mogen rechtstreeks worden aangeroepen. Maar nu ik erover nadenk is dit RewriteRule !\.(bmp|css|csv|doc|jpg|js|zip|enz|enz|enz)$ index.php dan toch de enige optie???? Alleen niet zo onderhoudsvriendelijk... en al die extensies moeten gecontroleerd worden :(
Je zet je style, images e.d. allemaal op een subdomein. Heeft ook als voordeel dat je laadtijd korter is :-)
Echter ik weet niet hoe ik dat in m'n htaccess krijg:
RewriteCond %{REQUEST_FILENAME} !-f
// De regel hierboven en hieronder moeten met elkaar worden verbonden door middel van een OR. Iemand een idee hoe?
RewriteCond %{REQUEST_FILENAME} .(ini|htm|html|php|phtml|txt)$
Alles is een bestand Ozzie, denk eens logisch na.. Waarom zet je het niet simpel op een subdomein? Scheelt je een hoop werk en de laadtijd van je website wordt verkort..
Chris Horeweg op 05/01/2011 14:40:51:
Alles is een bestand Ozzie, denk eens logisch na.. Waarom zet je het niet simpel op een subdomein? Scheelt je een hoop werk en de laadtijd van je website wordt verkort..
Offtopic:
Wordt je laadtijd korter als je al je statische content (images, stylesheets en javascript-bestanden) op een subdomein plaatst?
Chris Horeweg op 05/01/2011 14:40:51:
Alles is een bestand Ozzie, denk eens logisch na
Wat een onzin. www.mijnsite.nl/kantoorartikelen/nietmachines is echt geen bestand hoor.
Ozzie PHP op 05/01/2011 14:51:33:
Wat een onzin. www.mijnsite.nl/kantoorartikelen/nietmachines is echt geen bestand hoor.
Chris Horeweg op 05/01/2011 14:40:51:
Alles is een bestand Ozzie, denk eens logisch na
Wat een onzin. www.mijnsite.nl/kantoorartikelen/nietmachines is echt geen bestand hoor.
De bovenstaande URL verwijst toch in principe naar (bijv.): http://www.mijnsite.nl/index.php?pagina=producten&hoofdcategorie=kantoorartikelen&subcategorie=nietmachines Dan wordt dus 'producten.php' aangeroepen en dat is een bestand. Of denk ik nu verkeerd?
Gewijzigd op 05/01/2011 14:54:37 door Kevin de Groot
Kevin de Groot op 05/01/2011 14:51:25:
Offtopic:
Wordt je laadtijd korter als je al je statische content (images, stylesheets en javascript-bestanden) op een subdomein plaatst?
Wordt je laadtijd korter als je al je statische content (images, stylesheets en javascript-bestanden) op een subdomein plaatst?
Als de cookies etc goed instelt worden die niet meegestuurd naar naar het subomein wat data scheelt, dit verschil is maar heel klein.
Browsers beperken het aantal requesten wat tegelijkertijd naar 1 domein gaan. Een subdomein wordt als een nieuw domein gezien waardoor er meer requesten tegelijkertijd kunnen zijn voor je pagina.
Wat info: http://tweakers.net/plan/491/content-afbeeldingen-voortaan-via-ic-punt-tweakimg-punt-net.html
Gewijzigd op 05/01/2011 14:56:32 door TJVB tvb
TJVB tvb op 05/01/2011 14:54:45:
Als de cookies etc goed instelt worden die niet meegestuurd naar naar het subomein wat data scheelt, dit verschil is maar heel klein.
Browsers beperken het aantal requesten wat tegelijkertijd naar 1 domein gaan. Een subdomein wordt als een nieuw domein gezien waardoor er meer requesten tegelijkertijd kunnen zijn voor je pagina.
Kevin de Groot op 05/01/2011 14:51:25:
Offtopic:
Wordt je laadtijd korter als je al je statische content (images, stylesheets en javascript-bestanden) op een subdomein plaatst?
Wordt je laadtijd korter als je al je statische content (images, stylesheets en javascript-bestanden) op een subdomein plaatst?
Als de cookies etc goed instelt worden die niet meegestuurd naar naar het subomein wat data scheelt, dit verschil is maar heel klein.
Browsers beperken het aantal requesten wat tegelijkertijd naar 1 domein gaan. Een subdomein wordt als een nieuw domein gezien waardoor er meer requesten tegelijkertijd kunnen zijn voor je pagina.
Top! Bedankt voor de uitleg. Als het veel tijd zou schelen zou het een overweging voor me zijn om dat te doen, maar gezien het verschil dus maar klein zou zijn is dit het voor mij niet waard.
Kevin de Groot op 05/01/2011 14:54:00:
De bovenstaande URL verwijst toch in principe naar (bijv.): http://www.mijnsite.nl/index.php?pagina=producten&hoofdcategorie=kantoorartikelen&subcategorie=nietmachines Dan wordt dus 'producten.php' aangeroepen en dat is een bestand. Of denk ik nu verkeerd?
De parameters verwijzen naar een action in een controller. Dat is een bestand wat geinclude wordt en niet wordt aangeroepen via de browser url.