Jump to content
php.lv forumi

Venom

Moderatori
  • Posts

    1,918
  • Joined

  • Last visited

Posts posted by Venom

  1. sk: ignore_user_abort() - php turpina izpildīt kaut ko arī tad, kad liētotājs aizver brauzeri

    register_shutdown_funcion() - tiek izsaukts, kad tiek beigts serversavienojums (pievērts logs)

     

    bet būtībā session_destroy() notiek pats par sevīm, ja vien neesi kaut ko nofiņķelējies pa php.ini. parasti cilvēkiem problēmas - kā saglabāt sessiju pat aizeverot logu, a te še tev!

  2. ... sūtāmo SQL stringu, t.i. hakeris uzreiz rokās dabūs paroli tīrā veidā.

    Var arī neanalizēt net trafiku, bet nočiept sql servera logus, kurā dažkārt tiek pierakstīti pieprasījumi (piem. admins grib atrast kādu procesu, kas gāž nost db, ieslēdz query loggingu un tājā parādās parole tīrā veidā).

     

    Autentifikācija uz md5($pwd) [kur $pwd ir tieši tas, ko ievada lietotājs] pamata bāzes pēdējos gados ir kļuvusi par standartu, kas ļauj taisīt t.s. one-point ielogošanas sistēmas, jebšu Single Sign-On solutions no "komponentēm", ko ir taisījuši dažādi izstrādātāji. Resp. lietotājs ienāk forumā, es sesijā saglabāju md5 hashu (t.i. arī nočiepot sessiju nepiekļūst parolei tīrā veidā), nobrauzējot uz pasta pārbaudes web-interfeisu es vienkārši ureiz piesaku hashu un lietotājam nav otrreiz jāievada tā pati parole (iekš VeA esmu taisījis virkni - mans forums, phpBB, squirrelmail, ienākot jebkurā varēja brīvi pārvietoties starp visiem).

  3. ko nozīmē "apgriežot"

     

    tas, ka datu bāzē tu glabāsi hashu no "parole", vai "janislkslkjhadlkjadparole" ir būtībā vienalga (izņemto to, ka otrā variantā parole ir garāka, kas ir labāk un grūtāk atkožams), jo md5 nav cikliska funkcija, t.i. ja tu vari atgriest vērtību sākotnējo no vērtību no md5('parole') hasha (resp. parole) - tāpatās arī varēsi "apgriezt otrādi" arī "janislkslkjhadlkjadparole". Katram flip atbilst tikai viens flop. t.i., ja es atrodu kādu simbolu kombināciju, kuras md5 ir vienāds ar datu bāzē saglabāto, tad ar 99.99% pārliecību varu teikt, ka tā satur izejas stringu. Tavā piemērā parole tik un tā tiek iebliezta pa tīro un acīm saskatāma, ja tā būtu vismaz str_rot13-tēta, tad nebūtu preteziju liekkodībai ;) (t.i. arī atkožot md5 hakeris uzreiz neredz paroli tīrā veidā, kādu varētu ievadīt sistēmas interfeisā).

     

    Att. uz būtību:

     

    kad lietotājs reģistrējas, datu bāzē tiek saglabāts (char(32) laukā) md5() no ievadītās paroles, t.i. parole tīrā veidā netiek glabāta d.b.

    md5 būtība ir tāda, ka vienam stringam atbilst viens un tikai viens hashs (ok, ir nebūtiska varbūtība, ka viens hashs varētu atbilst diviem dažādiem vārdiem/teikumiem), resp. nevar notikt tā, ka nokodējot teikums1 un teikums2 hash1 būtu vienāds ar hash2.

     

    Kad lietotājs ievada paroli pārbaudei - tu noģenerē ar php no tās md5 hashu, un salīdzini, vai tas ir vienāds ar db glabāto. Ja tā ir, ar 99.99% pārliecību tu vari teikt, ka ievadītā šoreiz parole ir tieši tā, kas tika izmantota reģistrācijai, t.i. ir patiesa.

     

    Arī nozogot datu bāzi nevarēs pateikt, kādas bija izejparoles (kas ir svarīgi, ja tās tiek izmantotas vairākās vietās), resp. tiek nograuta tikai viena komponente, nevis visa sistēma. Cits jautājums, ja datu bāzē to var nomainīt pret savu md5 hashu, bet nevar piekļūt pašam php/whateva kodam, kas pārbauda autentifikāciju. Un ŠĀDĀ gadījumā es piekrītu Aleksejam - ka jāliek klāt kaut kāds "slepens" papildinātājs jau programmā, ko nezinot, nevar nogēnerēt md5 no stringa, kas turpmāk atbilstu nosacījumiem. Cita lieta atkal ja gribi savienot vairākas komponentes kopā (Single Sign On, kādu es piem. izmantoju ltta.lv lapā, kur ar vienu paroli var piekļūt gan administrēšanai, gan čatam, ko neesmu taisījis es, jo tiek izmantota vienāda shēma). Bet arī šeit būtu jāpielieto otrā līmeņa kodēšana, kā esmu norādījis augstāk. Resp. ja hakeris redz 32-simbolu zīmi un saprot, ka tas ir md5 un viņam/i pie tam izdodas to atkodēt, viņš redz "manaparole" - bet ar to nevar ieiet, paņem atkodē kādu otro, un tā ir "manacitaparole", viņš sapratīs, ka formā jāievada tieši beigu daļa, bet "mana" tiek pielikts automātiski. Ja atkodējot md5 viņš saņems atkal 32 simbolu virkni, ir pamats domāt kā izejas kodā stāv md5(md5($password)).

    Tas saucas idejiskais reverse-engineerings.

     

    Svarīgi iekš kvērija nodot jau noģenerēto hashu, lai SQL pieprasījums beigu variantā izskatītos kā WHERE kolonna='ksjdk2g23i4e3g8yagiuhbjahsbd', nevis kā taisa daži "grudrinieki" - WHERE kolonna=MD5('parole'). Rezultāts ta ir viens un tas pats, ar to atšķirību, ka pa tīklu var nočiept

  4. Aleksejs:

    "apgriežot" md5( $username . md5( $username . md5( $username . $password . $salt) . $password . $salt) . $password . $salt);

    tik un tā ar cilvēkaci būs saskatāms k-kas līdzīgs

     

    janiskjl231ljlk213k213kljtikaicilveks3244325

     

    arī ja tur būs kas cits, kā tikaicilveks, no atlikušā "kazja-bazja" var ņemt dažāda garuma substingus un mēģināt kā paroles

     

    izeja:

    nesaprotami lietotājvārdi un paroles, kas paši izskatās pēc nohashotās vērtības, e.g. ?4545%,lh213jkhk21jk

    ļoti gari abi, lai rēķinātos ilgi jo ilgi

     

    un citi kriptogrāfijas wunderi

  5. check this out!

     

    session_start();

    if (!isset($_SESSION['hash']))

    $_SESSION['hash']='';

     

    if (empty($_SESSION['hash']) && (!empty($_POST['usr']) && !empty($_POST['pwd'])))

    {

    $q=mysql_query("UPDATE tabula SET

    pedeja_riciba=NOW(),

    apraksts='login'

    WHERE

    `login_name`='".mysql_escape_string($_POST['usr'])."'

    AND `pwd_hash`='".md5($_POST['pwd'])."'");

    if (mysql_affected_rows($q))

    $_SESSION['hash']=$_POST['usr'];

    }

    else

    //jau autorizējies

    echo 'Sveiki, '.$_SESSION['hash'];

  6. un ko tu pārbaudi?

    MD5(CONCAT(passw,\''.mysql_real_escape_string($_SESSION['hash']).'\'))=\''.user_texc($_POST['passw'],33,255,1,1).'\'')

     

    vai md5 no ievadīta stringa sql pusē ir vienāds ar php pusē ievadīto?

     

    domāts ka tabulā

    id|user|hash

    1|nick|sadasddsad0213798ysdiuasd8768

     

    un tad ir "SELECT ... WHERE `nick`='".$_POST['nick']."' AND `hash`='".md5($_POST['passw'])."'"

     

    NB: $_SESSION['id']=$row[0];

    $_SESSION['name']=$row[1];

     

    vieglāk raxtīt

     

    list($_SESSION['id'],$_SESSION['name'])=$row;

     

     

    NNB: samazinām query skaitu, paroles pārbaude ar uzreizīgo NOW() ielikšanu

    un tad ir "UPDATE tabula SET pedac=NOW() WHERE `nick`='".$_POST['nick']."' AND `hash`='".md5($_POST['passw'])."'"

    un pārbaudām vai ir affected (mysql_num_rows vai kā tur bija, darbojos ar savu klasi, piemirsās standarta)

     

    MYSQLā var izmantot OR

     

    "UPDATE tabula SET pedac=NOW() WHERE (`nick`='".$_POST['nick']."' AND `hash`='".md5($_POST['passw'])."') OR (pārbaude no session hasha)"

     

    NNNB: protams, var katru reizi pārbaudīt sesijā saglabāto hashu pret mysql, bet vai pati hasha esamība sessijā neliecina par to, ko autentifikācija reiz notikusi? un sesijas norepleisot nav tik viegli

     

    NNNNB: if ($logerror=1) - ja mainīgam var piešķirt vērtību, ko var izdarīt vienmēr. tu gribēji ==

     

    uz pirmā acu skatiena

  7. nav ko gtrauzties, no php md5(strings) un arī SQLā MD5(strings), mehānisms ir vienāds, tas kas ir md5 iekš php jābūt tādam pašam iekš SQLa. starp serveri un php sūta šo te nokodēto hashu, lai kaut kur pa vidu ar vadiņu nevarētu pārtvert paroles tīrā veidā.

  8. paroli glabāt iekš md5, pārbaudei iekš SQL komandas likt vērtību, ko noģenerē analoģiska funkcija iekš php

     

    mysql_query("SELECT id,name,passw FROM users WHERE name='".$_POST['name']."' && passw='".md5($_POST['passw']))."'");

     

    of coss, jāskatās kas iekš $_POST, vajadzības gadījumā pielietot mysql_escape_string, addslashes un/vai htmlspecialchars()

  9. ja saprotu -$hmr ir "how many results", t.i. $x ir tas, kura bilde iet pēc kārtas,

    tad

     

    $im = '<a href="./index.php?id=2&g='.$_REQUEST["g"].'π='.($z+($y*5)).'"><img src=".'.$GLOBALS["imglib"].'/'.$gal[$_REQUEST["g"]-1][1].'/'.$gal[$_REQUEST["g"]-1][3][$z+($y*5)].'" border="0"></a>'.($x%5==0?'<br />':'');

     

    NB: a varbūt tu grībēji tā?

    <style type="text/css">

    .lapa img {vertical-align:middle;border:1px solid black}

    </style>

    <div class="lapa" align="center">

    <img src="http://www.google.lv/images/hp0.gif" height="10" width="100" />

    <img src="http://www.google.lv/images/hp0.gif" height="100" width="100" />

    <img src="http://www.google.lv/images/hp0.gif" height="20" width="60" />

    <img src="http://www.google.lv/images/hp0.gif" height="10" width="60" />

    <img src="http://www.google.lv/images/hp0.gif" height="140" width="100" /><br />

    <img src="http://www.google.lv/images/hp0.gif" height="100" width="100" />

    <img src="http://www.google.lv/images/hp0.gif" height="10" width="100" />

    <img src="http://www.google.lv/images/hp0.gif" height="10" width="100" />

    <img src="http://www.google.lv/images/hp0.gif" height="100" width="100" />

    <img src="http://www.google.lv/images/hp0.gif" height="20" width="60" /><br />

    <img src="http://www.google.lv/images/hp0.gif" height="10" width="60" />

    <img src="http://www.google.lv/images/hp0.gif" height="140" width="100" />

    </div>

     

    NNB: nenosauktu to, kas to ir uzrakstījis par guru

×
×
  • Create New...