Archief - .htaccess condition check

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

woony

Legacy Member
Ik zit met een vervelend probleempje en ik kan precies de oplossing niet vinden ...

Op een van mijn sites heb ik een .htaccess file.
die zorgt er voor dat alles die niet in mijn rewritecond 1 voorkomt, gebruikt wordt als een searchstring.

RewriteCond $1 !^(over|gamma|bouwtekeningen|infotips|merken|links|berekeningen|artikels|contact|detail|top10|index\.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ template.php?p=gamma&keyword=$1 [L,QSA]

en anders
stuur ik ze naar de juiste pagina

RewriteCond $1 !^(index\.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ template.php?p=$1 [L,QSA]

Dit werkt perfect,
nu het probleem.
Alle zoektermen die starten met een woord die in de eerste voorkomt stuurt hij ze ook door.

dus
bv.
Goedkoop schroefmachine in ons gamma online kopen en veel meer!
of
Goedkoop schroefmachine in ons gamma online kopen en veel meer!

hoe moet ik checken dat hij dus niet een 'like' doet maar wel effectief '=' mijn google zoektocht laat mij in de steek.

Als ik de ^ weglaat, werkt het ook niet...
Alvast bedankt...

adrianhates

Legacy Member
geen tijd om u direct te helpen ( binne uur examen ) , maar zorg ervoor dat uw php fouten enkel via uw IP getoond worden!
kdacht dat ge zoiets moet gebruiken als "(negative) lookaheads" met regex. In uw regex kunde aanduiden dat uw string een match in een andere string moet zijn of een gehele match.

iets simpelere workaround: kan je de andere zoektermen misschien niet naar een andere pagina herschrijven? Het probleem opsplitsen dus

of het probleem in PHP oplossen? :)

bealzebub

Legacy Member
Code:
RewriteCond $1 !^(over|gamma|bouwtekeningen|infotips|merken|links |berekeningen|artikels|contact|detail|top10|index\ .php)

Niet veel tijd om effectief te gaan testen, maar die condition is een regex match. Je wil dus een exacte match krijgen door een $ op het einde toe te voegen:

Code:
RewriteCond $1 !^(over|gamma|bouwtekeningen|infotips|merken|links |berekeningen|artikels|contact|detail|top10|index\ .php)$

Door dat dollarteken achteraan te zetten duidt je aan dat de match van begin (^) tot einde ($) moet gebeuren. Er mag dus niets meer achter je "contact" staan. Zet je die dollar er niet, dan is "contactdozen" ook een regex match, aangezien het begint (^) met contact en er voor erachter geen voorwaarde staat, der mag dus na "contact" nog tekst staan.

adrianhates

Legacy Member
meih, khad het verkeerd begrepen precies..
wat bealzebub zegt klopt helemaal

dat terzijde: lookahead en lookbehind zijn dingen dat blijkbaar ook niet in alle regex toepassingen even ondersteund zijn (javascript internet explorer etc etc )

dJeez

Legacy Member
@TS: Mag ik u er toch even op wijzen dat uw(?) code - de code op die site die je linkt - zo onveilig als de pest is. Je include momenteel scripts op basis van data in de url *zonder* enige vorm van controle. Dat is vragen om problemen.

Door 1 specifieke URL is die site direct down te trekken (check je logs misschien eens). Leer aub eerst om veilig en correct om te gaan met het web, alvorens zoiets online te zetten dat vraagt om misbruikt te worden.

Verplicht leesvoer :
The Open Web Application Security Project

woony

Legacy Member
bedankt voor de oplossing.

$ teken was dus de oplossing.

@djeez, ik ben mij daar volledig van bewust.. heb bij deze al een aanpassing gedaan.
file name wordt gecheckt als die bestaat op mn server.

is dit voldoende qua security? Ik heb er mij zelf eigenlijk nooit veel mee bezig gehouden.. :/
-- meh werken een paar dingen niet meer.
Ik zal het vanavond deftig aanpassen...
gelieve mijn boel dus niet te hacken in die tijd dank :)

dJeez

Legacy Member
Het is alvast beter dan geen enkele controle. Ik wou je overigens enkel op de security issues wijzen, ik ga mij echt niet bezighouden met hacks (ik heb betere dingen te doen dan dat :p). De enige reden waarom ik het even heb getest (en hier gemeld) was dat er errors werden gedumpt op je pagina's (ook een big no-no voor productiesystemen, je moet errors loggen op productie).

Leuk om te zien dat je er mee bezig bent, da's dan (binnenkort) toch al 1 onveilige site minder :p.

woony

Legacy Member
Ik denk dat het nu wel goed zit.
Ik check een array van mn pages , en dan een andere check want anders werkten enkele functies niet meer.
een whitelist check infeite.

ja toch bedankt voor de tip, ik hou mij er veel te weinig mee bezig...
php errors staan bij deze ook af :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan