MVnet logo

Kotisivun teko » Salasanasuojaus PHPllä

  • Julkaistu: 20.10.2006
  • Päivitetty: 25.02.2009
  • Kommentit

Salasanasuojaus ja rekisteröinti

"Salasanasuojaus ja rekisteröinti" -sovelluksen uusin versio on versio 2005-04-10. Oman "Salasanasuojaus ja rekisteröinti" -sovelluksesi version näet "rekisterointi"-kansion "versiot.txt"-tiedostosta. Huom! Versiot.txt-tiedosto on lisätty vasta "Salasanasuojaus ja rekisteröinti" -sovelluksen versioon 2004-05-15.

Mitä sovellus tekee?

Tässä esitetty sovellus tekee mm. seuraavaa:

  • Suojaa HTML-dokumentit salasanalla
  • Myös PDF-dokumenttien suojaaminen salasanalla on mahdollista
  • Kävijät voivat rekisteröityä ja saavat rekisteröidyttyään käyttäjätunnuksen ja salasanan sähköpostitse, joilla voi lukea salattuja sivuja
  • Rekisteröityneestä kerätään seuraavat tiedot: Rekisteröitymis-päivämäärä ja -aika, sähköpostiosoite, etu- ja sukunimi, ikä, asuinpaikka ja ip-osoitteet.
  • Rekisteröinnistä lähetetään myös sivun ylläpitäjälle sähköpostiviesti, jossa on rekisteröityneen kävijän tiedot
  • Tiedot rekisteröityneistä taulukoidaan, ja sivun ylläpitäjä voi katsella tätä taulukkoa selaimellaan.
  • Aluksi käyttäjälle luodaan salasana osittain arpomalla. Käyttäjä voi myöhemmin helposti itse muuttaa salasanan haluamakseen.
  • Uuden salasanan pituus: minimi 8 merkkiä, maksimi 30 merkkiä
  • Käyttäjätunnuksen pituus: minimi 5 merkkiä, maksimi 50 merkkiä.

Miten sovelluksen saa toimimaan?

Kopioi ensin tiedosto rekisterointi.zip (koko noin 12 kt) ja pura se siten, että zip-tiedostossa olevat tiedostot ja kansiot ovat kansiossa nimeltä rekisterointi. Laita sitten rekisterointi-kansio kotisivusi juureen (eli esim. minun tapauksessani http://www.mvnet.fi/rekisterointi). Rekisterointi-kansion sisällä pitäisi sitten olla kansiot admin, kasittely, rekisteroityneet ja rekistinfo sekä tiedostot kirjaudusisaan.php, muutajapoistatietoja.php, rekisteroidy.php ja versiot.txt. Alla olevassa talukossa on selitetty, mitä zip-tiedostossa olevat tiedostot ja kansiot ovat. Minkään tiedoston sisältöä ei pidä muuttaa ellei alla ole toisin mainittu.

Joidenkin tiedostojen ja kansioiden käyttöoikeuksia pitää muuttaa (kts. ohjeet käyttöoikeuksien muuttamiseen), jotta PHP-koodi pystyisi niihin kirjoittamaan. Se mihin muotoon tiedoston käyttöoikeus pitää muuttaa, on kerrottu taulukon Chmod-kohdassa. Viiva tarkoittaa, ettei tiedoston käyttöoikeuksia pidä muuttaa.

Tiedosto/kansio Selitys Chmod
kirjaudusisaan.php Tämä on sivu, joka ilmestyy salattuun sivuun, jos kävijä ei ole kirjautunut sisään. -
muutajapoistatietoja.php Tämän sivun avulla rekisteröitynyt kävijä voi muuttaa tunnuksensa salasanan tai poistaa tunnuksensa. -
rekisteroidy.php Tämä tiedosto on sivu, johon kävijä menee, jos hän haluaa rekisteröityä. Sivulla on lomake, jonka täyttämällä voi rekisteröityä. -
versiot.txt Tässä tiedostossa on tiedot siitä, mikä on "Salasanasuojaus ja rekisteröinti" -sovelluksesi versionumero ja infoa, mitä muutoksia sovelluksen uusimmassa versiossa on vanhempiin versioihin verrattuna. -
kasittely/ Tämä kansio sisältää tiedostot: login.php, logout.php, rekisteroidykasittely.php, tietojenmuutoskasittely1.php ja tietojenmuutoskasittely2.php. Nämä tiedostot käsittelevät sisään- ja uloskirjautumisia sekä rekisteröinnit ja tunnusten muutokset. Kansio: -
Sisältö: -
admin/ Tämä kansio sisältää tiedostot: katso_rek.php ja tyhjenna_rek.php. Avaamalla ensimmäisen tiedoston, voit katsoa tiedot rekisteröityneistä selaimellasi ja toista tiedostoa käyttämällä voit tyhjentää rekistinfo-kansion rekisteroityneet.php -tiedoston manuaalisesti. Kansio: -
Sisältö: -
rekisteroityneet/ Tämä kansio sisältää tiedoston sahkoposti@osoite.txt. Voit huoletta tuhota kyseisen tiedoston. Se on vain esimerkkinä millaisia tiedostoja tähän kansioon tulee. Kun kävijä rekisteröityy, luodaan tähän kansioon automaattisesti tiedosto, jonka nimenä on kävijän antama sähköpostiosoite (joka toimii siis käyttäjätunnuksena). Kyseisen tiedoston sisältönä on käyttäjälle luotu salasana kryptattuna. Kansio: 777
Sisältö: -
rekistinfo/ Tämä kansio sisältää alla luetellut tiedostot. Joidenkin niiden käyttöoikeuksia pitää muuttaa. Katso alta. Kansio: -
rekistinfo/rekisteroityneet.php Tähän tiedostoon tallennetaan tiedot rekisteröityneistä: rekisteröitymis-päivämäärä ja -aika, sähköpostiosoite, etu- ja sukunimi, ikä, asuinpaikka ja ip-osoitteet. Kaikki tiedot ovat selkeästi taulukoituna. 766
rekistinfo/tyhjenna_rek.php Tämä tiedosto käsittelee rekisteroityneet.php -tiedoston manuaalisen tyhjennyksen, joka tehdään avaamalla admin-kansion tyhjenna_rek.php -sivu ja antamalla sivulle käyttäjätunnuksen ja salasanan niihin vaadittuihin kenttiin. Vain sivun ylläpitäjä voi luonnollisesti tehdä tyhjennyksen. -
rekistinfo/lukumaararekist.txt Tähän tiedostoon tallennetaan rekisteröityneiden lukumäärä. Se kasvaa yhdellä, kun joku rekisteröityy ja vähenee yhdellä, jos olemassa oleva tunnus poistetaan. 766
rekistinfo/perusskripti.php Tämä koodi on osa rekisteroityneet.php-tiedoston toimivuutta. Tiedoston sisältö on aina rekisteroityneet.php-tiedoston alussa ja tämä estää sen, ettei kukaan muu kuin sivun ylläpitäjä voi katsoa rekisteröityneiden tietoja. -

Yllä esitettyihin tiedostoihin pitää tehdä joitain muutoksia, jotta rekisteröitymis- ja kirjautumissysteemi toimisi sivuillasi:

A1. Muuta kirjaudusisaan.php -tiedostosta seuraava paksunnettu kohta vastaamaan kotisivusi osoitetta:
http://kotisivusi_osoite.net/rekisterointi/rekisteroidy.php

A2. Muuta kasittely-kansiossa olevasta rekisteroidykasittely.php -tiedostosta seuraavia kohtia:
$emailosoiterek = "oma_sahkoposti@osoitteesi";
$sivustonnimi = "Sivustosi nimi";
$muutajapoistaosoite = "http://sivusi_osoite.net/rekisterointi/muutajapoistatietoja.php";

Laita siis ensimmäisen paksunnetun tekstin tilalle sähköpostiosoitteesi, johon haluat ilmoituksen siitä, että sivuillesi on rekisteröitynyt joku. Toisen paksunnetun tekstin tilalle laita siis sivustosi nimi eli esim. minun tapauksessa MVnet. Kolmannen paksunnetun kohdan tilalle laita kotisivusi osoite (eli esim. minun tapauksessani www.mvnet.fi).

A3. Jos haluat muuttaa (tämä ei siis ole pakollista) sähköpostiviestien sisältöä, jotka lähtevät rekisteröityneelle ja sivun ylläpitäjälle, tee muutoksia rekisteroidykasittely.php -tiedoston loppuosaan (huomaat kyllä mitä pitää muuttaa).

A4. Muuta kasittely-kansiossa olevasta login.php -tiedostosta seuraavia kohtia:
$salakoodi ="XXXXXXXX";
$siirtosoite = "../../sivu_jolle_siirrytaan_kirjautumisen_jalkeen.php";

Laita XXXXXXXX -kohdan tilalle salakoodi, jota ei pysty helposti arvaamaan. Siinä saa olla numeroita ja kirjaimia sekaisin, mielellään ei ääkkösiä ja muita erikoismerkkejä. Salakoodi on tärkeä osa sisäänkirjautumisen ja salasanasuojauksen toimivuutta. Toisen paksunnetun kohdan tilalle laita sen sivun osoite (suhteessa login.php-sivuun), johon siirrytään, kun käytetään pikakirjautumis-lomaketta.

A5. Muuta kasittely-kansiossa olevasta logout.php -tiedostosta seuraava paksunnettu osoite, jos haluat kävijän siirtyvän johonkin muuhun sivuun, kuin etusivulle (olettaen, että etusivusi on nimeltä index.php) uloskirjautumisen jälkeen. Laita uusi osoite suhteessa logout.php-sivuun:
$siirtosoite = "../../index.php";

A6. Muuta myös rekistinfo-kansiossa olevista tyhjenna_rek.php ja perusskripti.php -tiedostoista seuraavia paksunnettuja kohtia:

$kayttajatunnus = "tunnuksesi";
$salasana = "salasanasi";

Laita paksunnettujen kohtien tilalle haluamasi käyttäjätunnus ja salasana, joiden avulla voit katsoa rekisteroityneet.php -tiedoston sisältämät tiedot rekisteröityneistä ja tyhjentää kyseisen tiedoston.

Seuraavaksi sinun täytyy laittaa sivuillesi muutamia koodipätkiä:

B1. Jotta voisit käyttää sivuillasi mm. pikakirjautumista, kirjaudu ulos -linkkiä ja koodia, joka printtaa käyttäjän näkyviin, sinun täytyy laittaa jokaisen dokumentin (.php-päätteinen) alkuun alla esitetty koodipätkä aivan sivun alkuun, ennen <html> -tagia. Huom! Alla olevaa koodipätkää ei laiteta salatun sivun alkuun (siihen palataan myöhemmin tässä ohjeessa kohdassa B2), mutta kaikkiin muihin sivuihin kyllä.

B1. Jokaisen sivun alkuun

B2. Salatun sivun alkuun - ennen <html> -tagia - sinun täytyy laittaa alle esitetty koodipätkä, jotta sivua ei voisi lukea jos käyttäjä ei ole kirjautunut sisään. Sivun pitää olla .php-päätteinen. Kun joku tulee nyt tälle sivulle, sivun sisällöksi tulee salatun sivun sisältö, jos käyttäjä on kirjautunut sisään. Jos käyttäjä ei ole kirjautunut sisään, sivun sisällöksi tulee kirjautumisen mahdollistava lomake. Salatun sivun sisältöä ei siis voi lukea ilman, että on kirjautunut sisään, joka taasen edellyttää, että on rekisteröitynyt.

Muuta alla olevasta koodista seuraava kursivoitu kohta:
$salakoodi = "XXXXXXXX";

Laita siis XXXXXXXX:n kohdan tilalle sama salakoodi, jonka jo aikaisemmin teit kohdassa A4.

Jos haluat salata useampia html-dokumentteja, liitä vain alla esitetty koodipätkä niiden sivujen alkuun, jotka haluat salata ja tee koodiin tarvittavat muutokset.

B2. Salatun sivun alkuun

B3. Jos haluat salata PDF-tiedoston, luo ensin php-päätteinen tiedosto (nimi voi olla mikä tahansa, kunhan se on php-päätteinen) ja laita sen sisällöksi alla esitetty koodipätkä. Tämä sivu on nyt se sivu, johon laitat linkit muilta sivuiltasi. Kun käyttäjä tulee nyt tälle PDF-linkitys-sivulle, käyttäjälle aukeaa mahdollisuus lukea salattua PDF-tiedostoa, jos käyttäjä on kirjautunut sisään. Jos käyttäjä ei ole kirjautunut sisään, sivun sisällöksi tulee kirjautumisen mahdollistava lomake.

Muuta alla olevasta koodista kursivoituja kohtia:
$salaosoite = "pdfkansiosi/salainen_tiedosto.pdf"
$pdf_tiedoston_nimi = "salainen_tiedosto.pdf";
$salakoodi = "XXXXXXXX";

Laita siis pdfkansiosi/salainen_tiedosto.pdf:n paikalle salatun PDF-tiedostosi osoite suhteessa PDF-linkitys-sivuun. Muuta salainen_tiedosto.pdf vastaamaan salatun PDF-tiedostosi nimeä (nimi voi olla mikä tahansa, kunhan se on pdf-päätteinen). Laita XXXXXXXX:n paikalle sama salakoodi, jonka jo aikaisemmin teit kohdassa A4. PDF-tiedostot kannattaa laittaa omaan kansioonsa ja sitten salata tämä kansio htaccess-salauksella. Tällöin kukaan ei pääse lukemaan PDF-tiedostojasi ilman sisäänkirjautumista.

Jos haluat salata useampia PDF-tiedostoja, luo useampia erinimisiä PDF-linkitys-sivuja ja tee niihin tarvittavat muutokset.

B3. PDF-linkitys

B4. Alla olevalla koodilla luodaan sivulle lomake, jonka avulla käyttäjä voi kirjautua nopeasti sisään. Lomaketta ei näy sivulla, jos käyttäjä on jo kirjautunut sisään. Kopioi koodi niihin sivuihin haluamaasi kohtaan, jossa haluat pika-kirjautumis-lomakkeen näkyvän. Muuta taas $salakoodi = "XXXXXXXX" vastaamaan salakoodia, jonka jo aikaisemmin teit kohdassa A4.

B4. Pika-kirjautuminen

B5. Alla olevalla koodilla saadaan sivulle näkyviin sisäänkirjautuneena olevan käyttäjän käyttäjätunnus (eli sähköpostiosoite). Käyttäjän käyttäjätunnus näkyy siis vain, jos käyttäjä on kirjautunut sisään. Kopioi koodi niihin sivuihin haluamaasi kohtaan, jossa haluat käyttäjän käyttäjätunnuksen näkyvän. Muuta taas $salakoodi = "XXXXXXXX" vastaamaan salakoodia, jonka jo aikaisemmin teit kohdassa A4.

B5. Käyttäjä näkyviin

B6. Alla olevalla koodilla saadaan aikaan sivulle linkki, jolla käyttäjä voi kirjautua ulos. Linkki näkyy vain, jos käyttäjä on kirjautunut sisään. Koodi kannattaa kopioida jokaiselle sivulle, jotta kaikilta sivuilta voisi kirjautua ulos. Muuta taas $salakoodi = "XXXXXXXX" vastaamaan salakoodia, jonka jo aikaisemmin teit kohdassa A4. Muuta alla olevasta koodista myös kohtaa $logoutosoite = "http://sivusi_osoite.net/rekisterointi/kasittely/logout.php". Laita siis sivusi_osoite.net -kohdan paikalle kotisivusi osoite.

B6. Kirjaudu ulos -linkki

 

Huom! Salasanasuojaus toimii oletuksena vain dokumenteissa, jotka sijaitsevat kotisivujesi juurihakemistossa. Eli, jos juurihakemistosi osoite on esimerkiksi http://koti.mbnet.fi/kotisivuni/, laitoit rekisterointi-kansion sivuillesi osoitteeseen http://koti.mbnet.fi/kotisivuni/rekisterointi/. Tällöin salasanasuojaus toimii esimerkiksi sivulla, joka on osoitteessa http://koti.mbnet.fi/kotisivuni/salattu_sivu.php. Jos sivu, jonka haluat salata, sijaitsee juurihakemiston alihakemistossa (esimerkiksi osoitteessa http://koti.mbnet.fi/kotisivuni/alihakemisto/salattu_sivu.php), täytyy koodeista muuttaa paksunnettuja kohtia:

B2. Salatun sivun alkuun:
$rekistkansio = "rekisterointi/rekisteroityneet/";
$login_sivu = "rekisterointi/kirjaudusisaan.php";

B3. PDF-linkitys:
$rekistkansio = "rekisterointi/rekisteroityneet/";
$login_sivu = "rekisterointi/kirjaudusisaan.php";

B4. Pika-kirjautuminen:
<form name="" method="post" action="rekisterointi/kasittely/login.php">
< a href="rekisterointi/muutajapoistatietoja.php">Muuta tai <br> poista tietosi</a>

Laita siis paksunnetut osoitteet suhteessa sivuun, joka on juurihakemiston alihakemistossa (eli yleensä osoitteen eteen laitetaan seuraava merkintä: ../ ).

Jos haluat rekisteröityneiden määrän näkyviin sivullasi, laita alla oleva koodipätkä sivullesi haluamaasi kohtaan (muuta osoitetta, jos sivu ei sijaitse kotisivun juuressa):

<?php include("rekisterointi/rekistinfo/lukumaararekist.txt"); ?>

Yleistä tietoa sovelluksen toiminnasta:

Jos joku kävijä haluaa rekisteröityä, pitää hänen mennä rekisterointi-kansion rekisteroidy.php-sivulle ja täyttää kaikki sivulla olevan lomakkeen kentät. Kun lomake on lähetetty, lähetetään sivun ylläpitäjälle tiedote sähköpostiviestinä, että uusi rekisteröinti on tapahtunut. Rekisteröitynyt saa myös sähköpostiviestin antamaansa sähköpostiosoitteeseen, jossa kerrotaan mitä tietoja hän antoi ja mitkä ovat hänen salasanansa sekä käyttäjätunnuksensa, joilla hän pääsee lukemaan salattuja sivuja. Käyttäjätunnus on aina rekisteröityneen antama sähköpostiosoite ja salasana on muotoa xxxx+etusuku, jossa xxxx on arpomalla luotu nelinumeroinen numero ja etu on rekisteröityneen etunimen kolme ensimmäistä kirjainta ja suku taasen sukunimen kolme ensimmäistä kirjainta. Rekisteröitynyt voi halutessaan muuttaa salasanansa muutajapoistatietoja.php-sivulla tai poistaa tunnuksensa kokonaan.

Kun rekisteröitynyt haluaa lukea salattua sivua, johdetaan hänet salatulle sivulle (tai PDF-linkitys-sivulle, jos kyseessä on PDF-dokumentti), jonka sisällöksi tulee salatun sivun sisältö, jos kävijä on kirjautunut sisään. Jos kävijä ei ole kirjautunut sisään, tulee sivun sisällöksi sisäänkirjautumisen mahdollistava lomake.

Rekisteröityneiden lukumäärä tallentuu rekistinfo-kansiossa olevaan lukumaararekist.txt-tiedostoon. Sivun ylläpitäjä voi taasen katsoa tietoja rekisteröityneistä avaamalla admin-kansion katso_rek.php-tiedoston ja antamalla oikean käyttäjätunnuksen ja salasanan. Tiedot rekisteröityneistä (eli rekisteroityneet.php-tiedoston) voi tyhjentää tyhjenna_rek.php-tiedoston avulla. Rekisteroityneet.php-tiedosto ei tyhjene koskaan automaattisesti vaan se pitää aina tyhjentää manuaalisesti tyhjenna_rek.php-tiedoston avulla.

Jos sivun ylläpitäjä haluaa poistaa jonkun tunnuksen, pitää vain yksinkertaisesti poistaa rekisteroityneet-kansiosta kyseisen käyttäjän sähköpostiosoitteen nimellä oleva tiedosto. Tai jos sivun ylläpitäjä haluaa, että kyseisellä sähköpostiosoitteella ei voi enää rekisteröityä, hänen pitää avata kyseisen käyttäjän sähköpostiosoitteen nimellä oleva tiedosto ja laittaa sen sisällöksi vaikka teksti poistettu (teksti voi olla periaatteessa mikä tahansa, kunhan se ei ole sama, mitä tiedoston sisällä alun perin luki). Tämän jälkeen kyseisellä käyttäjätunnuksella ei voi enää rekisteröityä, eikä sen luonut rekisteröitynyt käyttäjä voi kirjautua sisään.

Huom! Suosittelen käyttämään rekisterointi-kansion kansioissa rekisteroityneet ja rekistinfo htaccess-salausta, jolloin kukaan ei varmasti pääse urkkimaan luvatta tietoja rekisteröityneistä. Htacces-salaus ei vaikuta PHP-koodin toimivuuteen. Rekisteroityneet -kansioon kaikilla on vapaa pääsy ja kuka tahansa voi näin ollen katsoa ketkä ovat rekisteröityneet, jollei käytetä htaccess-salausta. Myös kaikkia txt-päätteisiä tiedostoja voi kuka tahansa lukea. Näitä ei voi suojata php:llä. Se miten htaccessia tarkalleen käytetään, riippuu kotisivutilan tarjoajasta. Yleensä näillä palvelimilla on tähän salaukseen selkeät ohjeet.

Takaisin PHP-sovellukset -sivulle >> << Edellinen sivu (Palautelomake PHP:llä)

Sivun kommentit