403 Forbidden

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Eskel
Člen | 5
+
0
-

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ý.

  1. Pokud dám do odesílaného textu apostrofy a uvozovky, formulář se bez problému odešle.
  2. Pokud tam dám tagy, formulář se odešle.
  3. 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
+
0
-

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 :)

nAS
Člen | 277
+
0
-

Já bych zkusil na server nahrát example CD-collection, aby se vyloučila chyba ve tvém kódu. Pokud ani to nepojede, zkus nahrát čistě PHPkový formulář, zda ten dokáže odeslat tyto údaje. Osobně to vidím na nějaké divné nastavení Apache.

Eskel
Člen | 5
+
0
-

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
+
0
-

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.