Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Kirjautumisjärjestelmä tekstitiedostoilla

Triton [01.01.2009 04:13:48]

#

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

Metabolix [03.01.2009 04:08:26]

#

Oletko ajatellut, mitä tapahtuu, kun Irme|i ja Matt| rekisteröityvät palveluun?

Triton [03.01.2009 13:15:38]

#

Tiedänhän mä mitä siitä seuraa...täydellinen katastrofi...täytyy korjata toi.

edit. Tietenkin yks vaihtoehto, että tunnuksessa ei sallita
tota merkkiä...

Triton [16.03.2009 23:01:08]

#

Nyt on sitten koodipäivetty täysin...

Vastaus

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

Tietoa sivustosta