403 Forbidden
- Eskel
- Člen | 5
Po mnoha hodinách bojů jsem vyčerpal všechny možnosti a nezbývá mi než se k vám obrátit o pomoc.
Mám jednoduchý formulář, jedna textarea, jedno submit tlačítko. Rozhodl jsem se vyzkoušet jak si poradí s nebezpečnými znaky a html tagy. Výsledek je podivný.
- Pokud dám do odesílaného textu apostrofy a uvozovky, formulář se bez problému odešle.
- Pokud tam dám tagy, formulář se odešle.
- Pokud tam dám obojí – tagy i apostrofy – vyhodí mi error 403 Forbidden.
Toto chování je ale na pouze serveru, v produkčním módu. Na localhostu
(se stejnou verzí php – 5.2.11) projde i třetí varianta. Překvapuje mě
to hned na několika úrovních. Jednak bych rád abych mohl formulářové pole
proti těmto vstupům ošetřit úplně (strip tags, htmlentities atd), dále
bych rád aby je uživatel nemohl ani odeslat, tedy aby pro ně existovalo
validační pravidlo kontrolované javascriptem.
Další překvapení je že laděnka/debug i log mlčí, přestože je obojí
zapnuté i pro produkční prostředí.
Vypadá to na chybu v předání signálu, nebo něco na ten způsob. Nicméně nemám tu žádné informace kromě:
Forbidden
You don't have permission to access /Kontakt/ on this server.
Jsem přesvědčený že routy jsou v pořádku, podle routing debuggeru,
i toho že ta stránka/view je za normálních okolností přístupná.
Problém nastává ve chvíli kdy se posílá POST a to ještě v nejasné
závislosti na jeho obsahu.
Bohužel nevím jak alespoň logovat/zobrazit obsah toho co se odesílá, na
stránku která „neexistuje“. Ani firebug nepomáhá.
URL: ./Kontakt/?do=contactForm-submit
Trocha kódu:
Používám MVC/P model, takže mám továrničku na AppForm a na něm tyto handlery
<?php
$form->onSubmit[] = array($this, 'FormSubmitHandler');
$form->onInvalidSubmit[] = array($this, 'FormErrorHandler');
?>
FormErrorHandler mám prázdný, redirect v FormSubmitHandleru jsem
zakomentoval. Requirements checker v pořádku, htaccess soubory v souladu se
všemi ukázkovými z distribuce. Omlouvám se jestli je to málo informací,
další klidně dodám.
Potřeboval bych ale nějak nasměrovat, už mi naprosto došly nápady a
informace.
Předtím jsem řešil asi dvě hodiny podobný problém s errorem 404, kde byl
filesystem na serveru narozdíl od localhostu case sensitive. Očekávám
nějakou podobně zákeřnou botu.
Budu moct vděčný za každou radu.
Editoval Eskel (15. 2. 2010 4:24)
- Ondřej Mirtes
- Člen | 1536
Jaká verze PHP je na produkčním serveru? Viděl bych to na nějaký PHP bug, když ti to na dev mašině funguje :)
- Eskel
- Člen | 5
Ondřej Mirtes: Na serveru je 5.2.12, na localhostu mám 5.2.11. Používám wamp, který verzi 5.2.12 nemá v nabídce. Nechce se mi věřit že je to v rozdílu desetinky verze.
nAS: Díky, to je skvělý nápad. Problém je, že na hostingu není driver
pro php_sqlite, jen php_pdo_sqlite.
Tady je phpinfo serveru: odkaz
Dá se to nějak snadno obejít?
- David Grudl
- Nette Core | 8228
sqlite by s tím snad neměl nijak souviset. Píšeš něco se odesílá na stránku která „neexistuje“ – to je potom pozdě hledat chybu v PHP & Nette, problém bude v HTTP serveru.