Autor Zpráva
SkyVessel
Profil
    session_start();
    $zprava = false;
  if (isset($_POST['login'])) {     // Přihlášení --------------------------------

......

<h3>Přihlásit se</h3>
<form action="login.php" jmeno="frm_login" method="post"> 
<table border="0" cellpadding="5" align="center">
    <tr>
     <td align="right">Jméno: </td>
     <td align="left"><input class="pole" jmeno="jmeno" type="text" maxlength="20" value="<?php if(isset($_POST['jmeno'])) echo $_POST['jmeno'];?>"></td>
    </tr>
    <tr>
     <td align="right">Heslo: </td>
     <td align="left"><input class="pole" jmeno="pass" type="password" maxlength="20"></td>
    </tr>
    <tr>
     <td>&nbsp;</td>
     <td align="left"><input jmeno="login" type="submit" value="Přihlásit"></td>
    </tr>
</table>
</form>


Po kliknutí na přihlásit se stránka refreshne, ale form se neodešle (když dám hned pod "if isset post login" echo s hláškou, tak se nevypíše). Mám někde ve formu chybu??
A ještě k bezpečnosti: když dám do form action "echo $_SERVER['PHP_SELF']", tak když si zobrazím zdroják, tak tam mám celou cestu v subdoméně - "/subdom/private/login.php" - nedá se to nějak zneužít?? Mám radši používat jen login.php?
Enko
Profil *
Doplň si na začátek toto:
ini_set('error_reporting','E_ALL'); 
ini_set('display_errors', '1');
tím si zapneš zobrazování chyb(nech to tam jenom při testování)

Hoď nám sem celý ten kód za if(isset())...

A v action
<form action=""... nech klidně jen prázdnou hodnotu, formulář se pošle sám na sebe
Keeehi
Profil
SkyVessel:
Mám někde ve formu chybu?
Máš
jmeno="..."
měl bys tam mít name

nedá se to nějak zneužít?
Je vidět kus adresářové struktury. Víceméně je to bez bezpečnostního rizika. Prázdný action funguje ale úplně stejně a je to hlavně pohodlnější.
SkyVessel
Profil
Keeehi:
fuk... jasně že jo. Taková blbost - se ani nedivím, že sem si toho nevšiml... Jsem nahrazoval nazvy a potřetí už se mi to celé nechtělo projíždět, tak jsem dal "yes all" a zrovna jsem nahrazoval taky name za jmeno a nenapadlo mě to, protože ty předtím byly v poho =/

Díky, už to jede... Prostě jen nemohl rozchodit ty kraviny =oD

Enko:
to mi vypíše i chyby, i pokud je potlačuji zavináčem? $user = @mysql_fetch_array ($vysledek, MYSQL_NUM); atd...
Keeehi
Profil
SkyVessel:
to mi vypíše i chyby, i pokud je potlačuji zavináčem?
A to je tak těžký si to vyzkoušet? V 99,9% případů není nutné chyby potlačovat, naopak je správné je řešit.
Ugo
Profil
SkyVessel:
jestli se nepletu, tak konkrétně mysql_fetch_array chybu nevyhodí jestliže projde příkaz, takže chybu bys měl řešit už před tim. Resp. mít napsané query tak aby v něm nebyla chyba :)

Keeehi:
já zavináče celkem chápu, nejednou sem dostal nápad udělat script kterej by na každej řádek nějakýho toho macka dal :-D Ale při představě jak dlouho by se takovej skript moh provádět ...
SkyVessel
Profil
Keeehi:
A to je tak těžký si to vyzkoušet? V 99,9% případů není nutné chyby potlačovat, naopak je správné je řešit.
Ano, máš pravdu, moje chyba - příště nejdřív zkusím, jen se mi nechtělo ten skript mrvit, aby něco vyhodil =).

Ale s tím potlačováním chyb - hodil jsem tam první funkci, co mě napadla (mám to u všech) ale třeba taková @mysql_connect - mám to ošetřeno svými hláškami a to, že je problém na serveru neznamená, že mi to musí stránku zaspamovat kravinami (pro návštěvníky samozřejmě)...
Keeehi
Profil
1) měl by jsi to mít napsané tak, aby se žádná chyba nikdy nemohla objevit
2) na produkčním servru se potlačí vypsání všech chyb nastavením display_errors = Off v konfiguraci PHP. To kdyby se náhodou přece jen nějaká chyba vyskytla.

toto řešení má několik výhod:
1) úplně stejný script bez nutnosti jakéhokoli zásahu na lokálním servru chyby vypisuje, na ostrém všechny potlačuje.
2) nemusí se vkládat @ před každou funkci. Bylo by to hnusné a stejně by se určitě na něco zapomnělo.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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