Autor Zpráva
Vopiatos
Profil
Mam zde registraci kterou jsem stáhl z netu ale zda se mi trochu nefunkční sice vše funguje
ale když stránku pro registrované třeba neco.php kterou chci zobrazit jen pro vyvolené,

zkopiruju adresu: 127.0.0.1/neco.php tak se zobrazi přitom by neměla

měla by vypadat asi takto: 127.0.0.1/neco.php?id=1&code=4a2c9b17324f56d229120ea3af0741b7

aby se zobrazila jen registrovaným.
Kde je prosím chyba.
Nebo že by to dělali cokies.

index.php
<?
include("config.php");
$spojeni=mysql_connect($MySQL_server,$MySQL_user,$MySQL_user_password);
$spojenidb=mysql_select_db($MySQL_db);
if (!$spojeni)
{
echo"Nepodarilo se navazat spojeni se serverem.";
exit;
}

$prihlasen="";
if($co=="logout"){
MySQL_Query("UPDATE $MySQL_tabulka SET ip='' WHERE id='$id';");
$code="";
$error="<b>Nyní jste byl odhlášen.</b><br>Pokud budete chtít dále pokračovat v režimu pro registrované, musíte se znova přihlásit<br><br>";
}
if($nick!=""){
$bb = MySQL_Query("SELECT * FROM $MySQL_tabulka  WHERE nick='$nick';");
echo MySQL_Error();
$aa=MySQL_Fetch_Array($bb);

if(($aa[heslo]==$heslo) and ($heslo!="")){
$IP=$REMOTE_ADDR;
MySQL_Query("UPDATE $MySQL_tabulka  SET ip='$IP' WHERE nick='$nick';");
$time=time();
MySQL_Query("UPDATE $MySQL_tabulka  SET posledni_akce='$time' WHERE nick='$nick';");
$kod=MD5($time.$REMOTE_ADDR);
MySQL_Query("UPDATE $MySQL_tabulka  SET kod='$kod' WHERE nick='$nick';");
$url="id=".$aa[id]."&code=".$kod;
$prihlasen=$aa[id];
} else {$error="Přihlášení se nepodařilo. Špatné uživatelské jméno, nebo heslo.<br><br>";}
}

if($code!=""){
$bb = MySQL_Query("SELECT * FROM $MySQL_tabulka  WHERE id='$id';");
$aa=MySQL_Fetch_Array($bb);
$rozdil = time() - $aa[posledni_akce];
if($rozdil>300 or $rozdil<0) $povol="ne";
if(($aa[kod]==$code)and($aa[ip]==$REMOTE_ADDR) and ($povol=="")){
$time=time();
MySQL_Query("UPDATE $MySQL_tabulka  SET posledni_akce='$time' WHERE id='$id';");
$url="id=".$id."&code=".$code;
$prihlasen=$id;
} else {$str="";MySQL_Query("UPDATE $MySQL_tabulka  SET ip='' WHERE id='$id';"); $error="<b>Nejste přihlášen</b><BR>Buď nesouhlasí IP, nebo se provedlo automatické odhlášení, kvůli neaktivitě delší než 5 minut. Přihlaste se proto prosím znovu.<br><br>";}
}
?>
<!-- zacatek - nejaka stranka -->
<HTML>
<HEAD>
<META name="resource-type" content="document">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1250">
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<TITLE>Moje stranka</TITLE>
</HEAD>
<BODY>
<table>
<tr><TD width="150">
<!-- konec - nejaka stranka -->

<!-- zacatek - prihlasovaci okno/okno pro registrovane -->
<TABLE><tr><td align="center">
<?if($prihlasen==""){?>
<TABLE  width="165"><tr><td align="center">
<TABLE  width="100%"><tr><TD align="center" width="100%"><b>Login</b></table>
<table><FORM method="post" action="index.php">
<tr><td valign="top">&nbsp;<td valign="top">&nbsp;
<tr><td valign="top">Nick:<td valign="top"><INPUT type="text" name="nick" size="10">
<tr><TD valign="top">Heslo:<td valign="top" ><INPUT type="password" name="heslo" size="10">
<tr><th colspan="2"><INPUT type="submit" value="LOGIN">
<tr><th colspan="2"><a href="registrace.php"><FONT size="2">REGISTRACE</FONT></a>
</FORM>
</table></table>
<?}else{
$bb = MySQL_Query("SELECT * FROM $MySQL_tabulka WHERE id='$prihlasen';");
$aa=MySQL_Fetch_Array($bb);
$kredit=$aa[kredit];
echo'<TABLE width="165"><tr><td align="center">';
echo'<TABLE width="100%"><tr><TD align="center" width="100%"><b>Uživatel</b></table>';
echo "<table><tr><TD align=\"right\"><b>Přihlášen:</b><td>$aa[jmeno]</table>";
echo "<A href=\"index.php?$url\">Hlavní strana</A><br>";
echo "<A href=\"neco.php?$url\">Něco pro registrované</A><br>";
echo "<A href=\"index.php?co=logout&$url\">ODHLÁSIT</A>";
echo'</table>';

}
?>
</table>
<!-- konec - prihlasovaci okno/okno pro registrovane -->

<!-- zacatek - nejaka stranka -->
<TD width="*">
<?
// vypis chyb pri logoani do nejake stranky
echo $error;
?>

</body>
</html>
<!-- konec - nejaka stranka -->
<?MySQL_close();?>


registrace.php

<HTML>

<HEAD>
<META name="resource-type" content="document">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1250">
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<TITLE>Moje stranka - registrace</TITLE>
</HEAD>
<BODY>

<div align="center">
<FONT size="8">REGISTRACE</FONT>
<br><br><FONT color="RED" size="-2"><b>Povinné údaje jsou tučně červené</b></font>
</div>

<br>
<TABLE border="1" cellspacing="1" cellpadding="1" width="75%" align="center"><tr><TD align="center">
<?
include("config.php");
$spojeni=mysql_connect($MySQL_server,$MySQL_user,$MySQL_user_password);
$spojenidb=mysql_select_db($MySQL_db);
if (!$spojeni)
{
echo"Nepodarilo se navazat spojeni se serverem.";
exit;
}

$zob="ne";
if($odeslano=="ano"){

// test vyplnenych udaju
if($jmeno==""){
$zob="ano";
echo "<FONT color=\"FUCHSIA\"><b>Chyba: </b>Nebylo vyplňeno jméno</FONT><br>";
}

if($nick==""){
$zob="ano";
echo "<FONT color=\"FUCHSIA\"><b>Chyba: </b>Nebyl zvolen nick</FONT><br>";
}

if($heslo1==""){
$zob="ano";
echo "<FONT color=\"FUCHSIA\"><b>Chyba: </b>Zvol si heslo</FONT><br>";
}

if($heslo1!=$heslo2){
$zob="ano";
echo "<FONT color=\"FUCHSIA\"><b>Chyba: </b>Hesla nejsou stejná</FONT><br>";
}

if($mail=="" or $mail=="@"){
$zob="ano";
echo "<FONT color=\"FUCHSIA\"><b>Chyba: </b>Nebyl vyplněn e-mail</FONT><br>";
}

@$bb = MySQL_Query("SELECT * FROM". $MySQL_tabulka . "WHERE nick='$nick';");
@$aa=MySQL_Fetch_Array($bb);
if($aa[id]!=""){
$zob="ano";
echo "<FONT color=\"FUCHSIA\"><b>Chyba: </b>Požadovaný nick již někdo používá. Zvolte si prosím jiný nick.</FONT><br>";
}

}else $zob="ano";


if($zob=="ano"){

?>
<br>
<TABLE align="center">
<tr>
<FORM method="post">
<?echo'<TD nowrap align="right"><FONT color="RED"><b>Jméno a Přijmení:</b></font><TD nowrap><INPUT type="text" name="jmeno" value="'.$jmeno.'" maxlength="30">';
echo'<tr>';
echo'<TD nowrap align="right"><FONT>Adresa:</font><TD nowrap><INPUT type="text" name="adresa" value="'.$adresa.'" maxlength="150">';
echo'<tr>';
echo'<TD nowrap align="right"><FONT color="RED"><b>Nick:</b></font><TD nowrap><INPUT type="text" name="nick" value="'.$nick.'" maxlength="20">';
echo'<tr>';
echo'<TD nowrap align="right"><FONT color="RED"><b>Heslo:</b></font><TD nowrap><INPUT type="password" name="heslo1" maxlength="25">';
echo'<tr>';
echo'<TD nowrap align="right"><FONT color="RED"><b>Opakuj
Vopiatos
Profil
a jeste tabulka:

CREATE TABLE registrace( 
id int( 11 ) NOT NULL auto_increment,
jmeno varchar( 30 ) NOT NULL default '',
adresa varchar( 150 ) NOT NULL default '',
nick varchar( 20 ) NOT NULL default '',
heslo varchar( 25 ) NOT NULL default '',
mail varchar( 35 ) NOT NULL default '',
mobil varchar( 13 ) NOT NULL default '',
kod varchar( 100 ) NOT NULL default '',
ip varchar( 20 ) NOT NULL default '',
posledni_akce bigint( 20 ) NOT NULL default '0',
UNIQUE KEY id( id, adresa ) 
);
Tori
Profil
jak vypadá config.php - nespoléhá se na register_globals a session_register ? (= Ptám se, odkud se bere proměnná $code.)
Vopiatos
Profil
config.php
<?
$MySQL_server="localhost";
$MySQL_user="";
$MySQL_user_password="";
$MySQL_db="";
$MySQL_tabulka="";
?>
Tori
Profil
Aha, až teď jsem se pořádně koukla, že přihlášení se řeší pouze přilepováním md5 haše za každou použitou URL na stránce a ověřováním proti DB při každém požadavku. To je dost zbytečné, nemluvě o nutnosti uhlídat všechny odkazy, aby obsahovaly ten kód.
Dalo by se to přepsat na používání session, anebo zkusit najít jiné hotové řešení, které session využívá.

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: