Terve. Yritän tässä tehdä kirjautumissysteemiä sivulleni. Tekstitiedosto sisältää tunnuksen, salasanan md5-hashina, emailin, ajan ja IP-osoitteen. Tältä näyttää tekstitiedosto:
Tuomas|316e42c120fa778e29b354f5a00f223f||1260975907|80.220.47.70 Erkki|e7e941b1f09f266540c6780db51d5f58||1260976061|80.220.47.70
Tässä on koodi, mikä ei toimi:
<?php if(isset($_GET["kirjautumislomake"])) { if($_POST["lomake_tunnus"] != "" && $_POST["lomake_salasana"] != "") { $filu = file($kayttajatilit); for($i = 0; $i < count($filu); $i++) { $tiedot = explode("|", $filu[i]); $kayttaja = trim($tiedot[0]); $salasana = trim($tiedot[1]); $formtunnus = trim($_POST["lomake_tunnus"]); $formsalasana = trim($_POST["lomake_salasana"]); if($kayttaja == $formtunnus && $salasana == md5($formsalasana)) { echo "Kirjauduit sisään tunnuksella " . $kayttaja . "!"; break; } if($i == (count($filu) - 1)) echo "Väärä tunnus tai salasana!"; } } else echo "Sinun tarvitsee antaa käyttäjätunnus ja salasana!"; } ?>
Yritän siis kirjautua ja eteeni tulee virheilmoitus: "Väärä tunnus tai salasana!"
Yksi dollarimerkki puuttuu: rivillä 12 lukee $filu[i] eikä $filu[$i].
Ah, kiitokset. Tuollaisia pikkuvirheitä ei huomaa niitä etsiessä. :)
Kannattaa aina tutkia tarkkaan juuri se rivi, jossa tulkki ilmoittaa virheen olevan.
Tässä tilanteessa tulkki heittää asiasta vain huomautukset (E_NOTICE
), josta syystä huomautukset onkin hyvä pitää päällä kehitysserverillä. Aina tuo tulkin antama virherivin numero ei myöskään natsaa. Näihin tilanteisiin pätee mm. kunnon IDE.
Joskus virhe ei aina ole sillä rivillä kun tulkki sanoo sen olevan :P
Esim.
Tuosta tulkki sanoisi virheen olevan rivillä 4 vaikka tosiasiassa riviltä 3 puuttuu puolipiste lopusta.
Tai jos tuosta ottaa if-lauseen jälkeen aaltosulkeen pois ja puolipistevirhe olisi korjattu, tulkki valittaisi rivistä 5.
Edit: jaha tsuriga ehti väliin :E
Hieman offia, mutta:
Ihan vinkkinä ei ole kannattavaa käyttää tunnuksina tekstitiedostoa vaan MySQL tietokantoja, koska tekstitiedostot ovat erittäin suuri turvallisuus riski sekä joskus niihin kirjoittaessa (esim tulee kaksi rekisteröintiä päällekkäin tai enemmän) olen havainnut tekstitiedostojen "tyhjentymisen".
mika132 kirjoitti:
Hieman offia, mutta:
Ihan vinkkinä ei ole kannattavaa käyttää tunnuksina tekstitiedostoa vaan MySQL tietokantoja, koska tekstitiedostot ovat erittäin suuri turvallisuus riski sekä joskus niihin kirjoittaessa (esim tulee kaksi rekisteröintiä päällekkäin tai enemmän) olen havainnut tekstitiedostojen "tyhjentymisen".
...?
Taitaa olla koodissa vika, itse olen käyttänyt tekstitiedostoihin tallentamista monen vuoden ajan eikä mitään vastaavia ongelmia oo tullut vielä vastaan.
RQ: kyllä tuollainen on ihan mahdollista, riippuen tietenkin mitä tekstitiedostolle tehdään.
Eli on pieni mahdollisuus, että jos joudutaan kirjoittamaan koko sisältö uudelleen (esim. jos jälkikäteen tallennetaan käyttäjälle esim. uusi salasana), voi samaan aikaan tapahtuva muu muutos rikkoa toiminnon.
Tällöin pitää tiedosto lukita etukäteen, ettei samaan aikaan voida tallentaa toisaalla tiedostoon.
Aihe on jo aika vanha, joten et voi enää vastata siihen.