Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kirjautuminen - tunnukset

Sivun loppuun

Suominen90 [05.08.2005 16:43:39]

#

Pitäis saada sivujen kirjautuminen toimii niin että kun rekisteröityessä nimeksi on pistetty vaikka Xuvo niin sitten kun kirjautuu niin nimenä toimisi vaikka xUvo
Tällä hetkellä ei suostu toimimaan noin.

hunajavohveli [05.08.2005 16:54:23]

#

Eli siis pitäisi muuttaa ensimmäinen kirjain pieneksi ja toinen isoksi, sitäkö haet takaa?

Olga [05.08.2005 17:01:42]

#

Ilmeisesti haettiin takaa sitä, että tunnuksen kirjainkoolla ei ole väliä kirjautumisessa. Käytä funktiota strcasecmp.

Lebe80 [05.08.2005 17:01:43]

#

Vertaat vain onko kummankin muuttujan ("oikea login-nimi" ja käyttäjän antama arvo) strtolower()-arvot samat.

https://www.php.net/manual/en/function.strtolower.php

Suominen90 [05.08.2005 20:00:27]

#

Juuri tuota tarkoitin mitä olga sanoi mutta ensaanut sitä toimimaan

hunajavohveli [05.08.2005 20:04:10]

#

Miksei se toimi? Missä kohtaa menee pieleen?

Suominen90 [05.08.2005 21:15:41]

#

Kirjautuminen ei toimi jos laittaa tunnukseksi suominen90.
Rekisteröityessä laitoin Suominen90.
Kokeilin myös tota Leben ehdotusta muttei toiminut silläkään.
Pitää jatkaa kokeiluja

Bagard [05.08.2005 22:28:29]

#

Xuvo kirjoitti:

Kirjautuminen ei toimi jos laittaa tunnukseksi suominen90.
Rekisteröityessä laitoin Suominen90.
Kokeilin myös tota Leben ehdotusta muttei toiminut silläkään.
Pitää jatkaa kokeiluja

Kyllä se toimii jos sen oikein teet. Sinulla on nyt vaan joku virhe koodissa.

hunajavohveli [06.08.2005 09:29:17]

#

Kokeile debugata eli laajenna koodia aina vaikkapa rivi kerrallaan, ja tutki esim. echon avulla muuttujien arvoja ja katso, mihin asti kaikki toimii, kuten pitää.

Suominen90 [06.08.2005 09:57:49]

#

Tohon koodin vois joku kokeilla soveltaa.

<?php

$user_dir="usr/kayttajat.txt";  // Rekistereröityneet käyttäjät
$login="stat/login/"; // Kirjautuneet-hakemisto

$salasana=$_POST['salasana'];
$nimi=$_POST['nimi'];

  if($_POST["submit"])
  {

  $fs=file($user_dir);

      for ($i=0;$i<count($fs);$i++)
      {

       if (substr_count($fs[$i],$_POST['nimi'])<>0)
       {
         $str=explode("|",$fs[$i]);
         $kirj=md5($_POST['salasana']);

          // Verrataan annettua tunnusta muistissa olevaa
          if ($_POST['nimi']==$str[0] && $kirj==trim($str[1]))
          {
               // luodaan kirjautunut-tiedosto
          if(!file_exists($login.$_POST['nimi']))
          {
          touch($login.$_POST['nimi']);
          }
        // Lisätään tieto kirjautumisesta kaynnit.txt tiedostoon
       $lisaa=fopen("kaynnit.txt" ,"a");
       fwrite($lisaa, "".date("d.m.y H:i:s")."|".$_POST['nimi'].""."\r\n");
       fclose($lisaa);

            // Tehdään eväste
            $_SESSION["nimi"]=$nimi;
          $_SESSION["salasana"]=$salasana;
          setcookie($cookie3,$nimi,time()+86400)or die("Virhe"); // luodaan eväste vuorokaudeksi

         // Ohjataan omalle sivulle
         header("location:index.php?sivu=omasivu");
          }
          else
          {
            echo $lg[115];
            return;
          }
    }
   }
  }

?>

mauza [06.08.2005 10:15:16]

#

Xuvo kirjoitti:

Tohon koodin vois joku kokeilla soveltaa.

if (strtolower($_POST['nimi'])==strtolower($str[0]) && $kirj==trim($str[1]))

Suominen90 [06.08.2005 12:32:37]

#

mauza kirjoitti:

Xuvo kirjoitti:

Tohon koodin vois joku kokeilla soveltaa.

if (strtolower($_POST['nimi'])==strtolower($str[0]) && $kirj==trim($str[1]))

Tuota on kokeiltu

hunajavohveli [06.08.2005 14:23:52]

#

Oletko kokeillut sitä debugausta? Pistä sinne pari echoa, jotka tulostavat kaikkien muuttujien arvot ja lisäksi noiden trim- ja strtolower-funktioiden palauttamat arvot, niin sitten näet niistä arvoista, että onko vika niissä, vai jossain muualla.

folio [06.08.2005 14:35:25]

#

Substr taitaa olla case-sensitive, joten edellä mainitun muutoksen lisäksi rivi

if (substr_count($fs[$i],$_POST['nimi'])<>0)

muotoon

if( strpos($fs[$i], $_POST['nimi']) !== false )

Blaze [06.08.2005 14:58:41]

#

Eikun nimenomaan !==. Se kun on eri asia kuin !=. Pidempi versio vertailee identtisyyttä (myös muuttujien tyypit pitää olla samat), lyhyt vain yhtäläisyyttä.

Esim. 0 == false on tosi, mutta 0 === false epätosi.

Megant92 [06.08.2005 15:01:49]

#

Jaa.Taidanpa sitten poistaa tuon viestin :)

Suominen90 [06.08.2005 15:25:04]

#

Kokeilin näin

echo strtolower($_POST['nimi'])."<br/>";
echo strtolower($str[0])."<br/>";

Kirjauduin sisään tunnuksella Suominen90 joka on sama jonka annoin rekisteröinnissä ja toi sano
suominen90
suominen90

ja kirjautui sisään mutta kun kokeilin kirjautua nimellä suominen90 niin ei onnistunu

Lebe80 [06.08.2005 16:16:36]

#

vinkkinä vielä

$kirj=md5($_POST['salasana']);

ei ole "turvallinen" salauskeino
md5 ei ole salaus-algoritmi vaan ns. hash-algoritmi. md5:n pystyy "avaamaan", koska kahdella eri alkuarvolla pystyy olemaan sama md5-summa.

Käytä esim. sha1:stä, tai kehitä oma salaus-funktio, jota käytät tuon md5:n tilalla.
tai sitten sijoitat mukaan muutakin kuin pelkän salasanan, sillä esim. tyhjä (null) arvo palauttaa md5:lla aina tietyn hashin, jolloin pelkkien hash-arvojen perusteella saa helposti selville kaikkien käyttäjien salasanat (netti pullollaan ilmaisia md5-purkajia, joilla saa kaivettua salasanat esiin hash-arvon perusteella.

esim.

function Salaus($salasana){
  $palauta = sha1("avainsana".$salasana.md5($salasana."avainsana2"));
// tai pelkkä md5-summa
// tosin, on vielä "avattavissa", mutta ei palauta pelkkää md5-hashia
//  $palauta = md5("avainsana".$salasana.md5($salasana."avainsana2"));

  return $palauta;
}

....
....

$salasana = Salaus($_POST['salasana'])

Suominen90 [06.08.2005 16:21:25]

#

Lebe tota on kyl nyt aika vaikeeta alkaa muokkaamaan kun käyttäjiä on 377

hunajavohveli [06.08.2005 16:25:49]

#

Xuvo kirjoitti:

Kirjauduin sisään tunnuksella Suominen90 joka on sama jonka annoin rekisteröinnissä ja toi sano
suominen90
suominen90

Siinä tapauksessa mukana saattaa olla whitespace-merkkejä, jotka eivät näy tekstissä. Jommankumman sanan perässä saattaa olla esim. välilyönti. Käytäpä trim-funktiota noihin ja vertaa sitten.

Edit: Jos tämäkään ei auta, niin silloin vika voi olla tuon &&:n toisella puolella.

tsuriga [06.08.2005 16:34:54]

#

Lebe80 kirjoitti:

md5:n pystyy "avaamaan", koska kahdella eri alkuarvolla pystyy olemaan sama md5-summa.

Kahdella eri merkkijonolla voi kyllä olla sama md5-summa, mutta ei se suinkaan ole syynä siihen, että md5-hashin voi arvata. Arvailussa voidaan päätyä oikeaan alkuperäiseen merkkijonoon yhtä hyvin kuin uuteen merkkijonoon, josta tulee sama md5-hashi. Ja sha1 on myös hash-algoritmi, käytä vaikka cryptiä. Ja kuinka tuota md5-hashin brute forcettamista sitten oikeasti hyödynnetään? Jatkuvat arvauskyselyt servuille eivät kuulosta järkevältä, ja jos vaikka kannassa oleviin hasheihin pääsee käsiksi, niin vain tietyn tyyppisillä sivustoilla niiden murtamisesta on enää siinä tilanteessa hyötyä.

Suominen90 [06.08.2005 16:46:36]

#

Koodi on nyt tollanen mutta sanoo tunnus väärin vaikka sen laittais niin kuin rekisteröityessä
<?php

$user_dir="usr/kayttajat.txt";  // Rekistereröityneet käyttäjät
$login="stat/login/"; // Kirjautuneet-hakemisto

$salasana=$_POST['salasana'];
$nimi=$_POST['nimi'];

  if($_POST["submit"])
  {

  $fs=file($user_dir);

      for ($i=0;$i<count($fs);$i++)
      {

       if (substr_count($fs[$i],strtolower(trim($_POST['nimi'])))<>0)
       {
         $str=explode("|",$fs[$i]);
         $kirj=md5($_POST['salasana']);

          // Verrataan annettua tunnusta muistissa olevaa
          if (strtolower(trim($_POST['nimi']))==strtolower(trim($str[0])) && $kirj==trim($str[1]))
          {
               // luodaan kirjautunut-tiedosto
          if(!file_exists($login.$_POST['nimi']))
          {
          touch($login.$_POST['nimi']);
          }
        // Lisätään tieto kirjautumisesta kaynnit.txt tiedostoon
       $lisaa=fopen("kaynnit.txt" ,"a");
       fwrite($lisaa, "".date("d.m.y H:i:s")."|".$_POST['nimi'].""."\r\n");
       fclose($lisaa);

            // Tehdään eväste
            $_SESSION["nimi"]=$nimi;
          $_SESSION["salasana"]=$salasana;
          setcookie($cookie3,$nimi,time()+86400)or die("Virhe"); // luodaan eväste vuorokaudeksi

         // Ohjataan omalle sivulle
         header("location:index.php?sivu=omasivu");
          }
          else
          {
            echo $lg[115];
            return;
          }
          }
          else
          {
            echo "Tunnus väärin";
            return;
    }
   }
  }

?>

mauza [06.08.2005 22:34:46]

#

Antaako skripti ilmoituksen "Tunnus väärin", vai eikö kirjautuminen muuten vain toimi? Vika voi nimittäin olla sessioissa.

// Tehdään eväste
$_SESSION["nimi"]=$nimi;

Tässä sessionin nimi arvoksi asetetaan POSTina tullut tunnus. Näin ollen, kun jossain kohtaa tarkistat kirjautumista (ilmeisesti muussa sivun skriptissä) on sessionissa pienellä kirjoitettu käyttäjänimi. Tällöin käyttäjää ei löydetä, kun sen olemassa oloa yritetään etsiä. Lisääppä muihinkin tiedostoihin/skripteihin nuita strtolower funktioita, niin uskoisin toimivan. Jos siis tuo ei anna tuota "Tunnus väärin"-ilmoitusta.

Suominen90 [06.08.2005 22:52:31]

#

Se sanoo tunnus väärin

Lebe80 [07.08.2005 00:43:34]

#

tsuriga kirjoitti:

Kahdella eri merkkijonolla voi kyllä olla sama md5-summa, mutta ei se suinkaan ole syynä siihen, että md5-hashin voi arvata. Arvailussa voidaan päätyä oikeaan alkuperäiseen merkkijonoon yhtä hyvin kuin uuteen merkkijonoon, josta tulee sama md5-hashi.

No tässähän tiedot on tallennetty vain tekstitiedostoon, jonka löytymisen jälkeen salasanojen md5-hashit on kaikkien nähtävillä.

Ja salasananhan ei tarvitse olla oikein, kun sen hash on sama kuin oikean salasanan.

Xuvo:
testaa tuota koodia, ilman salasana tarkistusta. Jotenkin tuntuu että virhe johtuukin salasanan tarkistuksesta eikä käyttäjätunnuksista.

tsuriga [07.08.2005 03:57:00]

#

Lebe80 kirjoitti:

Ja salasananhan ei tarvitse olla oikein, kun sen hash on sama kuin oikean salasanan.

Enkös minä tämän jo maininnut ^^'? Tarkoitin vain, että duplikaattihashien olemassaolo ei ole purkamisen mahdollistava tekijä, se vain helpottaa urakkaa. Brute forcetuksella murtuu vaikka Kiinan muuri.

Ja itse koodista:
-Vaihdapa "if (substr_count($fs[$i],strtolower(trim($_POST['nimi'])))<>0)" muotoon "if (substr_count(strtolower($fs[$i]),strtolower­(trim($_POST['nimi'])))>0)". Jos vieläkään ei toimi, tulosta nuo parametrit ennen vertailua, ja katso mikä on vialla. Debuggausta, debuggausta.
-Kuulemma kaikki selaimet eivät lähetä POST['submit'].
-Kannattaakohan tuota salasanaa laittaa sessioon? Session hijackilla sitten olisi mahdollista saada tietoon mahdollisesti käyttäjän yleissalasana (ei suositeltavaa tietysti käyttää
-Ihmeelliset sisennykset.
-PHP:n default virheilmoitukset tulostuvat käyttäjälle (ei virheentarkistusta fopenissa sun muissa).
-POSTin arvoihin viitatessa käytetään " ja ', yhtenevät merkinnät ovat hawt.

Suominen90 [07.08.2005 09:28:11]

#

Kiitoksia kaikille avusta sain nyt ton toimimaan tolla tsurigan koodilla tosin mun piti vielä korjata monia kohtia

Lebe80 [07.08.2005 15:11:46]

#

niin sitä vanhaa asiaa vielä... ;)

tsuriga kirjoitti:

Enkös minä tämän jo maininnut ^^'? Tarkoitin vain, että duplikaattihashien olemassaolo ei ole purkamisen mahdollistava tekijä, se vain helpottaa urakkaa.

Jeps, mutta tuossahan verrataankin pelkkiä hashejä keskenään, jolloin duplikaattihaskeillä pääsee sisään.

Mutta jos sotketaan vielä md5():n sekaan muuta kirjoitusta, ei ennalta laskettut md5-hashit toimikaan suoraan.

Brute Force onkin sitten eriasia, siksi salasanojen pitäisikin olla tarpeeksi pitkät ja sisältää ainakin numeroita ja isoja ja pieniä kirjaimia, jolloin laskeminen on paljon hitaampaa.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta