Ehdotuksia

otetaan vastaan

Olen kirjoittamassa login-sivustoa php:llä ja mysql:llä. Nyt olisi tarkoitus tarkistaa, täsmäävätkö käyttäjien tunnukset ja salasanat.

Jostain syystä en kuitenkaan saa password('salasana') -tekniikalla haettua salasanaa tietokannasta. Jos teen salasanasta tavallisen tekstin ilman passwordia, saa php noudettua oikeat tiedot kannasta.

Tässä koodi:
..........

$avain = time() . $tunnus . $salasana . getenv("REMOTE_ADDR");
   $istuntotunnus = md5($avain);
   $tunnus = md5($tunnus);
   

// Vika on salasanassa!!! salasana=('$salasana')
   
if (!$kysely = mysql_query("update kayttaja set istuntotunnus='$istuntotunnus' WHERE md5(tunnus) = '$tunnus' and salasana=password('$salasana')", $yhteys))
   {
      header("Location: index.php");
      exit;
   }
   else .. .......

12

516

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • keksa

      miksi säätää itse noita istuntotunnuksia, kun php tekee sen automaagisesti? Miksi pistää niitä kantaan, kun ne kulke urlissa mukana tai cookiessa?

      Tuo ei ole kovin vahva sisäänkirjaus, kun käyttää voi suoraan naputella index.php selaimeensa ja pääsee aloitussivulle.

      jokaisen php-sivun alkuun vaan sessio käyntiin

      index.php:

      session_start();

      if(!isset($_SESSION['login']))
      {
         $_SESSION['login'] = 0;

         echo "
         

         
         Login
         
         
         

            
               
               
               Tunnus:
               
               Salasana:
               
               
               
               ". $_SESSION['error'] ."
            
         
         
            document.Login.tunnus.focus();
         

         
         ";
      }
      elseif($_SESSION['login'] == 1)
      {
      print

      • jfjf

        "miksi säätää itse noita istuntotunnuksia, kun php tekee sen automaagisesti? Miksi pistää niitä kantaan, kun ne kulke urlissa mukana tai cookiessa?"

        Ilmeisesti sinulle session kaappaus on vieras asia?

        "Tuo ei ole kovin vahva sisäänkirjaus, kun käyttää voi suoraan naputella index.php selaimeensa ja pääsee aloitussivulle."

        Katsoitkos tuota koodia?
        Mikäli tietoa ei onnistu päivittää niin heitetään index.php sivulle muutoin else.

        Ja olettaisin, että jokaisella salatulla sivulla on koodinpätkä joka tutkii onko oikeuksia vai ei.


    • jfjf

      Mitenkäs tallennat salasanan tietokantaan?
      Kai laitat sen tuon password function kautta?

      MD5 on ihan eri asia.

      • nytnyt

        Homma toimii niin, että loin phpmyadminissa sql-lausekkeella "insert into kayttaja (tunnus,salasana) values ('esko',password('esko'))".

        Eli tunnuksen ja salasanan pitäisi olla esko, mutta php ei osaa avata salasanaa, koska sitä luodessa on käytetty tuota "password('esko')" -temppua. Jos en tee salasanasta passwordia, ohjelma osaa verrata muuttujia oikein.

        Missä siis vika?


      • jfjf
        nytnyt kirjoitti:

        Homma toimii niin, että loin phpmyadminissa sql-lausekkeella "insert into kayttaja (tunnus,salasana) values ('esko',password('esko'))".

        Eli tunnuksen ja salasanan pitäisi olla esko, mutta php ei osaa avata salasanaa, koska sitä luodessa on käytetty tuota "password('esko')" -temppua. Jos en tee salasanasta passwordia, ohjelma osaa verrata muuttujia oikein.

        Missä siis vika?

        Kyllä tuon pitäisi toimia, testasin vielä.

        Kirjoitappat phpMyAdminissa tämmöinen kysyly
        SELECT *
        FROM kayttaja
        WHERE salasana = password('esko')

        Mutta koodissasi ihmetyttää

        $tunnus = md5($tunnus);
        md5(tunnus) = '$tunnus'

        Miksi et vain tutki tunnusta selväkielisenä?

        Sekä nyt kun tuota koodiasi ajankanssa katsoo niin

        "if (!$kysely = mysql_query("...", $yhteys))"

        Kohta on virheellinen. mysql_query palauttaa true jos kysely onnistuu, kysely onnistuu myös vaikka mitään ei päivitetäkkään. Joten käytä http://fi.php.net/manual/fi/function.mysql-affected-rows.php


      • HMMMMMmmm
        jfjf kirjoitti:

        Kyllä tuon pitäisi toimia, testasin vielä.

        Kirjoitappat phpMyAdminissa tämmöinen kysyly
        SELECT *
        FROM kayttaja
        WHERE salasana = password('esko')

        Mutta koodissasi ihmetyttää

        $tunnus = md5($tunnus);
        md5(tunnus) = '$tunnus'

        Miksi et vain tutki tunnusta selväkielisenä?

        Sekä nyt kun tuota koodiasi ajankanssa katsoo niin

        "if (!$kysely = mysql_query("...", $yhteys))"

        Kohta on virheellinen. mysql_query palauttaa true jos kysely onnistuu, kysely onnistuu myös vaikka mitään ei päivitetäkkään. Joten käytä http://fi.php.net/manual/fi/function.mysql-affected-rows.php

        Tuohon ensimmäiseen tuli vastaukseksi "MySQL returned an empty result set (i.e. zero rows). (Query took 0.0010 sec)", vaikka salasana ja tunnus ovat olemassa......


      • jfjf
        HMMMMMmmm kirjoitti:

        Tuohon ensimmäiseen tuli vastaukseksi "MySQL returned an empty result set (i.e. zero rows). (Query took 0.0010 sec)", vaikka salasana ja tunnus ovat olemassa......

        Sul ei oo sitä tietoo siel, koitas tunkasta se tieto uudestaan ja katso että se todella menee sinne. Ja minkäs tyyppinen tuo kenttä on mihkä salasanan oot laittanu?


      • Näintämä
        jfjf kirjoitti:

        Sul ei oo sitä tietoo siel, koitas tunkasta se tieto uudestaan ja katso että se todella menee sinne. Ja minkäs tyyppinen tuo kenttä on mihkä salasanan oot laittanu?

        Eli varchar(30). Koodattu salasana näkyy browsella, mutta vertaaminen password('esko'):lla ei edelleenkään toimi. Bugi mysql:ssä?


      • Näinminullakin
        Näintämä kirjoitti:

        Eli varchar(30). Koodattu salasana näkyy browsella, mutta vertaaminen password('esko'):lla ei edelleenkään toimi. Bugi mysql:ssä?

        I'm having problems with bluehost's mysql password() function if I execute following SQL query on 'admins' table with two fields/columns 'username' and 'passwd':

        insert into admins values ('user',password('4321'));

        it would show one row inserted, and if I try to search such username and password:

        select * from admins where username = 'user' and passwd=password('4321');

        it would output "MySQL returned an empty result set (i.e. zero rows). (Query took 0.0006 sec)" ?? It works and outputs 'one row found' if I just query on the username='user' without the password part.

        Thanks in advance,


      • jepsjee
        Näinminullakin kirjoitti:

        I'm having problems with bluehost's mysql password() function if I execute following SQL query on 'admins' table with two fields/columns 'username' and 'passwd':

        insert into admins values ('user',password('4321'));

        it would show one row inserted, and if I try to search such username and password:

        select * from admins where username = 'user' and passwd=password('4321');

        it would output "MySQL returned an empty result set (i.e. zero rows). (Query took 0.0006 sec)" ?? It works and outputs 'one row found' if I just query on the username='user' without the password part.

        Thanks in advance,

        Ilmeisesti vika löytyi. Kasvatin varcharin koon 64:ään, niin johan salanat löytyvät. Ilmeisesti hash(?)hattu salasana kasvoi kokoa yli tuo 30 merkin rajan.


      • jfjf
        jepsjee kirjoitti:

        Ilmeisesti vika löytyi. Kasvatin varcharin koon 64:ään, niin johan salanat löytyvät. Ilmeisesti hash(?)hattu salasana kasvoi kokoa yli tuo 30 merkin rajan.

        Etkö todellakaan saanut mitään virheilmoitusta kun yritit lisätä salasanaa Varchar(30) kenttään?

        Kokeilin tuollee niin MySQL sanoo #1406 - Data too long for column 'salasana' at row 1

        Eikä sinne mene mitään, joten sen takia kysely palautti aina tyhjän.

        password-functio muodostaa 41 tavuisen salasanan, jotenka char(41) pitää sille olla. Toki se tuolla varcharrilla toimii, mutta hitaampi kun pitää tutkia mihkä se päättyy.


      • Ei tule ei
        jfjf kirjoitti:

        Etkö todellakaan saanut mitään virheilmoitusta kun yritit lisätä salasanaa Varchar(30) kenttään?

        Kokeilin tuollee niin MySQL sanoo #1406 - Data too long for column 'salasana' at row 1

        Eikä sinne mene mitään, joten sen takia kysely palautti aina tyhjän.

        password-functio muodostaa 41 tavuisen salasanan, jotenka char(41) pitää sille olla. Toki se tuolla varcharrilla toimii, mutta hitaampi kun pitää tutkia mihkä se päättyy.

        Ei tule virheilmoitusta. 1 row added tulee, siinä kaikki. Onneksi toimii nyt.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Ukrainan ulkoministeri: Moskova aistii tappion Ukrainassa

      Dmytro Kuleban mukaan Venäjä yrittää puheillaan pelotella länsimaita. Ukrainan ulkoministerin Dmytro Kuleban mukaan Venäjän esittämät varoitukset kol
      NATO
      262
      4320
    2. Stefu haikailee

      Julkaisi stooreissa kuvan vickestä. Sitten Martinasta treenaamassa Hangossa ulkona. Hmm.
      Kotimaiset julkkisjuorut
      265
      3524
    3. Harmi mies ettet arvostanut

      Minua tarpeeksi. Myöhemmin kaikki olisi palkittu ja olisin antanut sinulle aitoa rakkautta. Tämä sattuu mutta yritän ajatella, että ehkä se rakkaus ku
      Ikävä
      157
      1841
    4. Oi! Legandaarinen Vesa-Matti "Vesku" Loiri, 77, poseeraa kahdessa eri kuvassa - Some riemastui!

      Vesa-Matti "Vesku" Loiri on kyllä legenda jo eläessään. Hienoa nähdä, että virtaa piisaa. Voimia, iloa ja eloa, Vesku! https://www.suomi24.fi/viihde
      Suomalaiset julkkikset
      25
      1726
    5. Lavrov väläyttelee WW3:sta

      Venäjän ulkoministeri Sergei Lavrov varoittaa, että kolmannen maailmansodan uhka on todellinen. Lavrov sanoi venäläiselle uutistoimisto Interfaxille,
      Maailman menoa
      299
      1452
    6. Ketä Sofia fanit veikkaatte seuraavaksi lompakoksi?

      Kenestä Sofia höynäyttää itselleen seuraavan lompakon?
      Kotimaiset julkkisjuorut
      133
      974
    7. Suomi24 kysely: ihmisten kuplautumista ei pääosin koeta vakavaksi ongelmaksi

      “Kuplautumista on mahdotonta estää. Ihmiset ovat aina viihtyneet samankaltaiset arvot ja maailmankatsomuksen jakavassa seurassa ja muodostaneet sen pe
      Suomi24 Blogi ★
      18
      879
    8. Voiko hyvää omatuntoa ostaa?

      Olen tässä nyt muutaman päivän paininut erään rahaan liittyvän pulman kanssa. Kerron ensin vähän taustaa ... Eli erosin 15 vuoden parisuhteesta 9 vuo
      Sinkut
      235
      866
    9. en vaan saa häntä pois

      Mielestäni pyörimästä. Onko kellekään toiselle käynyt näin? Ihastuin pakkomielteisesti noin vuosi sitten erääseen naiseen. Ei vaan katoa mielestä va
      Ikävä
      115
      858
    Aihe