session

Potřebuju aby si session pamatovalo heslo který se napíše do formuláře, jak to
mám udělat.
Mám to takhle: soubr session.php
<?php
session_start();
if($_GET['heslo']){
$_SESSION['heslo']=$_GET['heslo'];
}

?>

a login.php
<? include("session.php"); ?>

<head>
<title>VSTUP</TITLE>
</HEAD>
<body bgcolor="navy">
<?
$spojeni = MySQL_Connect("xxx","xxx","xxx");
if (!$spojeni){
echo "Nepodařilo se navázat spojení.\n";
} else {
MySQL_Select_DB("mlspolco");
$vysledek = MySQL_Query("Select * from xxx where Jmeno='$jmeno' and
Heslo='.$_SESSION['heslo'].'");
if (MySQL_Num_Rows($vysledek)!=0) {
//kdyz je spravny heslo:
echo " <b> Heslo je správné. Můžete vstoupit...</b> ";
} else {
//kdyz je spatny heslo:
echo " <b> Heslo je chybné! </B> ";
}
}
?> </BODY>



Co mám upravit?
Skript jsem nezkoušel, ale vidím několik velkých bezpečnostních děr:

1. Ty posíláš heslo přes GET?
2. Vůbec heslo nešifruješ, třeba md5?
2. Proč chceš ukládat heslo ho session? Tak přece stačí dát příznak "přihlášen Ano - Ne".

Já to dělám takto (náznak řešení):

Formulář s přihlášením (metoda POST). Dotaz do databáze a tabulku registrovaných uživatelů a pokud autorizace projde vytvořím session s user_name:
session_start();
session_register('user_name'); // možná je toto zastaralé, ale bezpečně to běží na několika webhostinzích
$_SESSION[user_name] = "ferda";

Úvodní stránka:
session_start();
if (isset($_SESSION['user_name'])
// vstup
else
// zakaz
a jak se dá dešifrovat md5?
Samozřejmě se nedá dešifrovat, protože to není šifra.
Ným: hrubou silou :) MD5 je pouze jednosměrný algoritmus a pro jeho "dešifrování" [nalezení kolizního řetězce (kolizní řetězec nemusí být původní řetězec)] potřebuješ ...
... ale to je na dlouho:
http://www.google.cz/search?hl=cs&q=prolomen%C3%AD+MD5&btnG=Vyhledat+Googlem&lr=

Mike: jednoduché, leč ne moc bezpečné řešení. Jí to řeším trošku jinak:
sesison_start();
if($_POST['heslo'] == $heslo_z_DB) {
$_SESSION[crypt($_SERVER['REMOTE_ADDR'])] = zakoduj($username_z_DB);
// fce zakóduj je můj vlastní oboustranný šifrovací algoritmus (BTW: dost složitý, nepůjčuju ;)
sql = '...'; // zapiš do DB čas, uživatele a IP přihlášení
Header ("Location: Admin.php");
}

Admin.php
session_start();
if(isset($_SESSION[crypt($_SERVER['REMOTE_ADDR'])])) {
//dešifruj uživatelské heslo, porovnej ho s DB a povol načtení stránky, nebo exit('Tady nemáš co dělat!');
}
Ným (ml-spolco.unas.cz)
"a jak se dá dešifrovat md5?"
sporna otazka. Hledaji se pouze kolize. Cili pro zasilani hesla nic, ale muzes udelat script admin-zmen heslo na aaa a to posli na prilozeny mail.
Problem nastava, kdyz je mail preplneny.
Tez jsem videl registraci, kde misto nicku uz zadavas primo mail.

Tom (manual.wz.cz)
Ale ale :)
Uz nevim, kde to bylo, ale nejaky program, ktery nasel prvni kolizi do 10 minut na nejakem 400MHz. Stara zprava asi rok?

Non_E (rada.borec.cz)
Dost sporne. Lze vypsat vsechny kolize. A clovek z te rady vybere vetsinou to spravne reseni.
Rodne cislo ma take kolize, sifra je delitelnost 11:
http://www.volny.cz/peter.mlich/Pr/rodnec.htm
v nejhorsim pripade zkusim vsech asi 100 reseni...
peta: jo aha ... ono to je dvojsmyslné. Já to myslel tak, že vysvětlovat to je na dlouho. To, že rainbow atackem lze MD5 probourat během chvilky je známá věc. Myslím, že o tom bylo něco i na Živě.cz
Stane se ;)
Tom (manual.wz.cz)
tak to jo. Jinak ta strutura programu v podstate vychazi z toho, jakych hodnot muzou nabyvat jednotlive indexy. viz javascript a md5, kde je asi 30 rovnic asi se 4-rmi promennymi a vysledky proste muzou nabyvat jen urcitych hodnot.
zkratka a dobre, md5 bylo delano jako kontrolni soucet a ne ke kryptovani :)