Přihlašování pomocí sessions - bezpečnost

Zdravím, všechny,
ve svém posledním vlákně jsem tohle téma už trochu nakousnul, ale raději bych je ještě jednou poradil s ostatními: půjde o RS s přihlášením pro jediného uživatele, a já bych vás poprosil o rady a případné odhalení brouka. hlavně, jestli je alespoň trochu to bezpečné :)

přihlašovací skript:

http://mike.webzdarma.cz/files/login.phps

funkce, kt. to kontroluje v administraci:

function check_user() {
$udaje = mysql_fetch_row(mysql_query("SELECT `heslo` FROM `e_nastaveni` WHERE `id` = 1"));

if (!isset($_SESSION['prihlasenej']) || $_SESSION['prihlasenej'] != $udaje[0]) {
$uri = explode("/admin/", $_SERVER['REQUEST_URI']);

if (empty($uri[1])) {
$uri[1] = "index.php";
}

header($_SERVER['SERVER_PROTOCOL'] . " 401 Unauthorized");
header("Location: ../login.php?redirect=" . urlencode($uri[1]) . "");

die();
}
}

nastavení:

php_flag register_globals off
php_flag allow_url_fopen off

php_flag magic_quotes_gpc on
php_flag magic_quotes_sybase off
php_flag magic_quotes_runtime off

php_flag session.use_only_cookies on
php_value session.cookie_lifetime 3600

error_reporting(E_ALL);

Díky, Mike ;-)
error_reporting(E_ALL);
hned jedna "chyba" :)

přesměrování se stavovým kódem se dá pořešit i jednou hlavičkou. Doufám, že to nezblbnu:
header("Location: 401 file.php?...");
Btw, je lepší, když v Headeru uvádíš absolutní adresy. Já to sice taky většinou nedělám, ale ... ;)

Jinak jsem na to ještě nekoukal, ale:
použití sezení je celkem bezpečné, pro zvýšení bezpečnosti se dá u důležitých operací použít regeneraci sessID. Večer ještě možná mrknu na ten tvůj kód a připíšu víc :)
stydím se... založím vlákno, a zapomenu na něj :)

systém už jsem nasadil, a s tím vylezly na povrch další problémy... myslel jsem, že když nastavím ukládání sessid pouze do cookies, že to bude fungovat... jenže google už mi indexuje stránky se škaredám PHPSESSID v url... (google => site:mike.webzdarma.cz) ... nějaká banální chyba?

dále bych se chtěl zeptat, jak ošetřit následující error:

"Notice: session_start(): ps_files_cleanup_dir: opendir(/tmp) failed: Permission denied (13) in /3w/webzdarma.cz/m/mike/config.inc.php on line 48"

konfig, lajna 48 je sešn_start(); tímto soubor končí, předchází mysql_query("SET NAMES cs-utf8"); a připojení k db.

» Tom: pokud se na to ještě podíváš, budu rád ;-) a na přihlašovací skript se můžeš už i 'podívat v akci' :)

předem díky, Mike
Systém zaznamenal 3 pokusy o přihlášení do administrace s negativní odpovědí. Pech... Pamatuj si heslo!

Hodně dobrá hláška! Nemáš jich víc? Nějaké by se mi hodily ;)

Jinak bych to moc nehrotil, přidej tam session_regenerate_id() a bude to víc než dobrý.
ahoj, je to OT, ale píšu ti to sem, nevěděl sem, jak napsat do tvojí knihy návštěv.

mam MSIE 5.01 a rozlišení 800x600 budů a ten web moc dobře nejde číst :)

mluvim o mike.webzdarma.cz

screenshot: http://nesro.wz.cz/mike.jpg


^_^
» Tom: jednu mám třeba tady: mike.webzdarma.cz/2008/01/ ale jinak už moc ne... :) session_regenerate_id() přidám, díky.

» Nesro: sice OT, ale ne úplně... dík. v čem je problém tuším, ale přecejen MSIE 5 sem ve statistikách toplistu snad ještě neviděl, takže nevím...

jde o to, že IE 5 pravděpodobně nebere rozměry body. když se podíváš do kódu a do stylů, tak div budeš hledat těžko... (1 kvůli banneru, jeden genrovaný wz reklamou, další generovaný RSSad, a pouze jeden v lay-outu (divy pro výpis zdrojáku nepočítam, ty nemaj s rozvržením co dělat))

html {
/* zde je to, co se normálně dává pro body */
}

body {
margin: 0 auto;
text-align: left;
width: 710px;
padding: 10px 0 10px 0;
}

a tyto řádky se IE5 zjevně nelíbí... to možná budu řešit na úrovni php printnutím dalšího divu, ale uvidím, jak to půjde.

PS.: kniha návštěv nějak nefunguje, nebo proto, že se v tom dalo špatně vyznat?
PPS.: dělá to aj 5.5, takže jdu opravovat... :)
tak, teď píšu ze školy (supa kompy ;) ) je tu FF a ten web vidím dobře (doma sem se na tátovym pc nekoukal) ..


cu ti pochválit ten web, je to fakt dobrá práce..

ad kniha:

myslím, že by 'bohatě' stačilo, dá do formuláře dole záložku a odkaz na tu záložku hodit na začátek knihy, -> takže návštěvník by přišel - chctěl napsat do knihy - uviděl odkaz přidat do knihy - kliknul na to - hodilo ho to 'dolu' a byl by klid...

^_^
»: nesro:

function msie5_sucks($div1, $div2) {
  if(ereg("MSIE[[:blank:]]5",$_SERVER['HTTP_USER_AGENT'])) {
    print $div1 . $div2;
  }
}

IE5 vyřešeno výše uvedenou funkcí :) proč ale nevykresluje rámečky a nepřidává paddingy inline-elementům netuším, a to už fakt řešit nebudu...

PS.: zatím jsem ale pořád nepřišel na to, jak ostranit výše uvedenej warning jinak, než změnou error_reporting levelu... googlil sem, našel jednu zmínku o tom, že to dělá wz, a x moc stránek, který tu chybu obsahujou / obsahovaly namísto vyřešení problému... (no jako vždy, když hledám význam chybové hlášky)
krásně pojmenovaná funkce :)
AHoJ.
Dovolil bych si tvrdit, že pokud se v URL objeví PHPSESSID přihlášeného uživatele a ten uživatel klikne na odkaz na té stránce, který povede na moji stránku, tak budu schopný přečíst heslo z proměnné

$_SESSION['prihlasenej']

Je to sice nepravděpodobná šance... ale možná bych si dokázal poradit.
Je také možné, že na začátku skriptu je nastaveno něco, co zde není uvedeno a může to bránit právě přečtení obsahu session.

Tak jen tolik zatím.
Elektrostraka:
 hm ... zajímavá teorie ;)
 myslím, že jediné, co by se ti mohlo povést je přesvědčení serveru, že zrovna ty jsi přihlášený uživatel. Ale to by jsi to musel zjistit v době, kdy je uživatel aktivní.

Tudíž:

http://cz2.php.net/session_regenerate_id
  nebo odstranit příčinu:
php_value session.auto_start off
Elektrostraka:

a) PHPSESSID v url už se neobjevuje :)
b) session_regenerate_id tam také je :)
c) pokud by si nějakým zázrakem heslo z hodnoty sessid přečetl, troufnu si říct, že z jeho zašifrované podoby by si moc moudrý nebyl ;-)

PS.: omlouvám se za vyhrabávání tohoto vlákna, ale odpovědí ze 17.10. jsem si všiml až teď...

PPS.: problém z // 02. 10. 2007 00:11 // vyřešen @session_start() - ač nerad, jiné řešení jsem nenalezl.
PPS.: problém z // 02. 10. 2007 00:11 // vyřešen @session_start() - ač nerad, jiné řešení jsem nenalezl.

Jiné řešení taky neexistuje. Je to nějaká chyba v časoprostorovém kontinuu na WZ ;)