Autor Zpráva
Norbert Pelc
Profil
mám administraci, kterou potřebuji zaheslovat.

mam index.php- muze to byt takto???

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="DNX" content="DNX, 2006 (C)" />
<link rel="stylesheet" type="text/css" href="trolejbusylogin.css" />
<title>Přihlášení administrátora systému</title>
</head>
<body>
$datab = @mysql_connect($shost,$slogin,$spwd)

or die("Nelze se pripojit k My SQL serveru 2");

@mysql_select_db($database)

or die("Nelze se pripojit k databazi 2");

$query = "SELECT * FROM users WHERE login ='".$_POST['login']."'";

$result = mysql_query($query);

$user = mysql_fetch_array($result);

mysql_close();

$pass1 = sha1($_POST['password']);

if (strcmp($pass1, $user['password'])==0 and strcmp($_POST['login'], $user['login'])==0) {

$logged = true;}

</body>
</html>


a databázi je to dobre?????

CREATE TABLE `users` (

`users_id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`login` VARCHAR( 25 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`password` VARCHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
PRIMARY KEY ( `users_id` )
)


a jak mam zapsat uzivatele do teto databaze???
Prosim poradte dekuji moc
peta
Profil *
WWW stránky manuálu: http://mm.gene.cz/

dotaz typu:
$tab = $tb0."user";
$dotaz = "INSERT INTO $tab ($x) VALUES ($y)";
mysql_query($dotaz) or die("<hr>$dotaz<hr>DB error: add new user = ".mysql_error());

kde
$x je retezec pole nazvu SQL promennych, ktere chces zapsat
$y je retezec pole udaju promennych
cili
$x="'login','password'";
$y="'$user','$password'";

Vyhodou proti reseni
$dotaz = "INSERT INTO $tab VALUES ($y)";
je, ze pri rozsireni "users" tabulky nemusis prepisovat vsechny dotazy a neobjevi se ti chyby. Proste pojedou, ale nektere udaje se nebudou zaznamenavat. Obvykle je tam ani nove udaje nechces, pouze na vybranych mistech.
peta
Profil *
mimochodem, nemas to vubec osetrene.
$query = "SELECT * FROM users WHERE login ='".$_POST['login']."'";
co se stale, kdyz $_POST = "", tudiz $_POST['login']=-1 (undefined)
a pokud zapnes
error_reporting(E_ALL);
tak ti hned naskoci chyba.
Nehlede na to, ze v tomto pripade zbytecne zatezujes server SQL dotazem a to maji nektere hostingy omezeny jejich pocet. Ale takovy hosting bych nebral :)
Norbert Pelc
Profil
A jak zapisu ty uzivatele??

Prosím nejak mi to nejde.
napíši mi někdo jak to má vypadat???
Casero
Profil
insert into tabulka jmeno=franta
Suji
Profil
Norbert Pelc

V tomto pripade ma peta pravdu, neni tam osetreno zda se neco z formulare poslalo a zda je user v databazi. Poslal jsem ti ten kod nedavno v diskusi s tim, ze jsem cekal, ze se podivas jak to ma zhruba vypadat a tuhle logiku si pridas sam, jen jsem to tam asi zapomnel napsat, za coz se omlouvam.
Joker
Profil
Suji
Nehledě na to, že to půjde i hacknout. Sice ne úplně snadno, ale přece jen dám dohromady ukázku, jak se do toho s trochou štěstí nabourat:
jméno: ' or heslo='6e017b5464f820a6c1bb5e9f6d711a667a80d8ea'
heslo: heslo

Vznikne dotaz: SELECT * FROM users WHERE login ='' or heslo='6e017b5464f820a6c1bb5e9f6d711a667a80d8ea';
který mi vrátí uživatele s heslem "heslo". Porovnání hesla pak už samozřejmě vyjde, protože jsem si vybral uživatele, který to heslo má a pod jeho jménem budu přihlášený do systému. Podmínkou úspěchu je, aby v systému byl alespoň jeden uživatel s daným heslem.
Pokud bude v systému alespoň několik desítek registrovaných uživatelů a vypíšu si tak pět pravděpodobných hesel pro tu danou stránku, je pravděpodobnost úspěchu velmi vysoká.
Suji
Profil
Joker
to mas sice pravdu, ale neprojdes skrz overeni

if (strcmp($pass1, $user['password'])==0 and strcmp($_POST['login'], $user['login'])==0) {
$logged = true;
}
Suji
Profil
Ale hlavni problem je, ze kdyz jsem Norbertovi kod posilal, bral jsem to jako ukazku, ne hotove reseni. Je to cast kodu z hotove stranky, odstranil jsem z nej vsak nektere casti vcetne overovani vstupu nebo treba kontroly zda nejaky takovy user existuje. Nechtel jsem uverejnit cely kod ze ktereho by navic bylo zrejme kde je nasazeny.
krteczek
Profil
při zápisu uživatelů do databáze ber v potaz několik věci:
1 v případě že je nastaveno magic_quotes_gpc na on použij následující kod:

// odstranění ošetření dat způsobeného direktivou magic_quotes_gpc

if (get_magic_quotes_gpc())

{

$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST, &$_FILES);

while (list($key, $val) = each($process))

{

foreach ($val as $k => $v)

{

unset($process[$key][$k]);

if (is_array($v))

{

$process[$key][($key < 5 ? $k : stripslashes($k))] = $v;

$process[] =& $process[$key][($key < 5 ? $k : stripslashes($k))];

}

else

{

$process[$key][stripslashes($k)] = stripslashes($v);



}

}

}

}


2. jmeno prožeň vždycky funkcí htmlspecialchars()
3. heslo prožeň funkcí md5(); nebo sha1();
4. při zápisu do databáze použij funkci addslashes(); pro všechny nečíselné proměnné
5. při výběru z databáze použij funkci stripslashes();
6. ověřuj jestli proměnná existuje a pokud ano jestli není prázdná (očekávám text):
if((!empty($_POST['promenna'])) AND (trim($_POST['promenna']) != ''))

a další "drobnosti"
krteczek
Toto téma je uzamčeno. Odpověď nelze zaslat.

0