Jump to content
php.lv forumi

kārtējo reizi par login scriptu


snach15

Recommended Posts

http://paste.php.lv/da2e818aa4a823e7dd45a341482cb66b?lang=php

uzrakstīju pats login scriptu un tāpēc jautāju vai esmu uzrakstīji kautcik kvalitatīvi un ir kautkāda drošība? jeb bardags murgs un nekam nederīgs? esmu iesācējs takā lūdzu paskaidrojiet arī ...

 

un otrs jautājums ir .. nekādīgi nevaru dabūt nost šo erroru .. atstarpes nav, bomi nav nekā nav viss takā vajg bet erroru met ...

Warning: Cannot modify header information - headers already sent by (output started at C:\WWW\htdocs\web\engine\mysql_connect.php:9) in C:\WWW\htdocs\web\theme\default\default_theme.php on line 82

 

mysql_connect.php : saturs

<?php
$con = mysql_connect("localhost","root","xxxxxxxxxxxxx");
if (!$con)
 {
 die('Could not connect: ' . mysql_error());
 }
mysql_select_db("webx2", $con);

?>

Link to comment
Share on other sites

Tā ...

 

Es teiktu ka tajā skriptā ir diezgan daudz problēmas:

  • tas noteikti nav kvalitatīvi uzrakstīts kods, jo loģika ir sabāzta kopā ar html'u
  • tiek izmantots session_register(), kas ir novecojusi ( deprecated ) funkcija sākot no 5.3.0 versijas
  • tiek izmantots addslashes() , to vajadzētu aizstāt at mysql_real_escape_string()
  • vispār jau jaunu kodu ar mysql_* funkcijām pat rakstīt nevajadzētu ... palasi iekš 'MySQL Forge'
  • rindās 63 un 64 tu piešķir vērtības nepārbaudot vai tās eksistē.
  • sql daļa ir pilnīgā dirsā
    • paroles ir jāglabā kā vienvirziena hash'us , vēlams vismaz kā sha256
    • tu pārbaudi vai ir pareizs jūzeris un parole,
      izskaiti vai rezultāts ir tikai 1 ( izskatās ja lietotāji tabulā nav norādti kā UNIQUE ) ,
      un pēc tam tu selectē vēlreiz to pašu tabu un skaties vai ir tāds jūzeris - KĀPĒC ?!?

    [*]visur ir nez kāpēc izmantot echo, lai rukātu leilus HTML gabalus, tā vietā vajadžetu būt aizētam <?php ?> tagam, tad HTMLam un tad atvērtam php tagam.

    [*] .. un ar php nesaistīta piezīme - mūsdienās šitā HTML neraksta.

 

 

Par header() .. šitai funkcijai ir jātiek izpildītais pirms tu sāc sūtīt lapas saturu ( tavā gadījuā, tas būtu pirms <!DOCTYPE> ).

Ņem vērā ka "atstarpe arī ir "saturs".

Link to comment
Share on other sites

wintermute - liels paldies, tūlīt mēģināšu pārakstīt no jauna ..

briedis - nav nav ņemts nekas .. vnk man galīgi nebija sajēga par sessijām un īstanībā joprojām nav .. tad atradu google par sessiju reģistrēšanu un pēc loģikas vnk raksīju scriptu...

Link to comment
Share on other sites

http://paste.php.lv/a8ad9bbcfdc212c2446560dd89b83f5e?lang=php

tad nu lūk visu pārakstīju, bet joprojām nesapratu kāpēc nedarbojas header() funkcija

ir tagad scripts kvalitatīvāks? kādas vēl kļūdas pieļāvis un kā vēl papildināt?

Edited by snach15
Link to comment
Share on other sites

daGrevis, tam 2005ajā tika atrasta ievainojamība un 2008tajā tā tikai veiksmīgi realizēta.

Un, ja palasi wikipēdijā, tad md5 ir līdzīgā stāvoklī.

 

Protams tas viss galvenokārt attiecas uz "nesālītiem" hashiem.

 

 

snach15, ehh ... nu ko tu tur vispār dari ?!

  • funkcijas isset() un empty() nav savstaprēji aizstājamas
  • nafig tu ierobežo simbolus, kas drīkst būt parolē ?
  • tu glabā lietotāja parole, kā "nesālītu" hash'u padarot to ievainojamu pret kollīzijām
  • tā vietā, lai salabotu klūdu, kas saistīta ar "header already sent" paziņojumu, tu to paslēp un paildzini laiku kurā lapa ielādējas

 

Varbūt tomēt tev vajadzītu nedaudz pamācīties PHP, nevis lipināt kaut ko kopā no netā atrastiem fragmentiem.

Link to comment
Share on other sites

kurš ir labākais variants?

 

1.

$password = 'test';
$salt = '}#f4ga~g%7hjg4&j(7mk?/!bj30ab-wi=6^7-$^R9F|GK5J#E6WT;IO[JN';
$hash1_sha1_double = sha1(md5($salt.$password));

 

2.

$password = "test";
$pass = hash('sha512', '$password');

 

3.

$password = "test";
$salt = '}#f4ga~g%7hjg4&j(7mk?/!bj30ab-wi=6^7-$^R9F|GK5J#E6WT;IO[JN';
$pass = hash('sha512', $salt . $password);

Edited by snach15
Link to comment
Share on other sites

$password = '123456'; // Nāk no "input'a". =]
$salt = 'sāls'; // Tik nomaini!

$hashed_password = sha1( $salt . $password );

 

P.S. Kaut kam tādam galīgi nav jēgas...

 

$x = md5( sha1( 'doh' ) );

Link to comment
Share on other sites

[*]vispār jau jaunu kodu ar mysql_* funkcijām pat rakstīt nevajadzētu ... palasi iekš 'MySQL Forge'

 

Iemet plz savu redzējumu par to, kāpēc tieši mysql_* sucks. Lai kā cenšos, nu galīgi nevaru atrast iemeslu kāpēc vienkāršos un nelielos projektos izmantot pdo vai mysqli nevis mysql_

Edited by glorificus
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...