Tässä olisi nyt siis tekstitiedostoilla toteutettu kirjautumisjärjestelmä. Koodi on mielestäni varsin yksinkertainen eikä koodikaan oli kovin pitkä. En ole sotkenut koodin juuri muuta html:llää mukaan kuin vain kirjautumislomakkeen, jotta olisi mahdollisimman yksinkertaista upottaa tämä muiden sivujen sekaan. Tässä ei ole mukana rekisteröitymislomaketta, mutta tätä järjestelmää käytettäessä tunnusparit tulisi luoda seuraavalla tavalla:
hash = sha1(tunnus,salasana,sha1(uniikki_tunnus)) tunnus<|>hash<|>sha1(uniikki_tunnus)
Eli yksinkertaisuudessaan selitettynä toimii tämä sillä tavalla, että ensin verrataan annettua tunnusta ja oikean tunnuksen löydyttyä muodostetaan tiedosta tiiviste, jota verrataan tekstitiedostosta löytyvään tiivisteesen. Jos tiivisteet täsmää oikea käyttäjä on löydetty. Salauksena skripti käyttää SHA-1 tiivistealgoritmia...
login.php
<?php # Ohjelma: LSWT # Tehnyt: Triton /* Aloitetaan puskurointi ja istunto */ ob_start(); session_start(); //Tarkastetaan painettiinko buttonia if (isset($_POST['submit'])) { //Kerätään lomakkeesta tiedot $user = $_POST['user']; $passwd = $_POST['passwd']; //Avataan tunnukset sisältävä tiedosto $signs = file("data/signs.txt"); //Käydään tunnukset läpi for ($i = 0; $i < count($signs); $i++) { //Pilkotaan tiedot palasiin $sign = explode("<|>",$signs[$i]); //Vertaillaan käyttäjätunnuksia if (trim($sign[0]) == $user) { /* Luodaan tiiviste tunnuksesta, salasanasta ja uniikista merkkijosta */ $hash = sha1($user.$passwd.trim($sign[2])); /* Vertaillaan tiivistettä käyttätunnuksen tiivistepariin */ if (trim($sign[1]) == $hash) { //Asetetaan istunnot session_register("sess_id"); session_register("sess_user"); $_SESSION['sess_id'] = $hash; $_SESSION['sess_user'] = trim($sign[0]); break; } else { //Tulostetaan virheilmoitus jos tiiviste oli väärin echo "Salasanasi ja tunnuksesi eivät täsmää!"; break; } } /* Tarkistetaan, käytiinkö kaikki käyttäjätunnukset läpi */ elseif ($i == count($signs)) { //Tulostetaan virheilmoitus jos tunnusta ei löydy echo "Salasanasi ja tunnuksesi eivät täsmää!"; break; } } } //Selvitetään onko istuntotiedot olemassa if (!isset($_SESSION['sess_id'])) { //Tulostetaan lomake echo "<form action=\"login.php\" method=\"POST\">\n"; echo "Tunnus: <input type=\"text\" name=\"user\">\n"; echo "Salasana: <input type=\"password\" name=\"passwd\">\n"; echo "<input type=\"submit\" name=\"submit\" value=\"Kirjaudu!\">\n"; echo "</form>\n"; } else { //Tulostetaan käyttäjäntiedot echo "Kirjautuneena: {$_SESSION['sess_user']}"; echo "<br><a href=\"?logout=true\">Kirjaudu ulos!</a>"; //Tarkistetaan, kirjauduttiinko ulos if (isset($_GET['logout']) && $_GET['logout'] == true) { /* Tuhotaan istuntotiedot ja päivitetään sivu */ session_destroy(); header("Location: ...login.php"); } } //Lopetetaan puskurointi ob_flush(); ?>
data/signs.txt (Salasana on: demo
Demo<|>c4cebfa689c8af237509854a54115f669668ec04<|>d64ef9a71d10a55ee5c00ce2b25e9e2a8faf5b36
data/.htaccess
deny from all
Oletko ajatellut, mitä tapahtuu, kun Irme|i ja Matt| rekisteröityvät palveluun?
Tiedänhän mä mitä siitä seuraa...täydellinen katastrofi...täytyy korjata toi.
edit. Tietenkin yks vaihtoehto, että tunnuksessa ei sallita
tota merkkiä...
Nyt on sitten koodipäivetty täysin...
Aihe on jo aika vanha, joten et voi enää vastata siihen.