Edellisillä sivuillani oli ns. jäsenten alue johon olin kyhännyt tämän näköisen salasana skriptin:
logged.php:
<?php if ($_POST["password"] == 'admin' && $_POST["username"] == 'admin') { include("oikein.php"); } elseif ($_POST["password"] == 'moderator' && $_POST["username"] == 'moderator') { include("oikein.php"); } elseif ($_POST["password"] == 'guest' && $_POST["username"] == 'guest') { include("oikein.php"); } else include("denied.php"); ?>
Tuo skripti siis tarkastaa täsmäävätkö "kirjaudu.php" sivulle annetut tiedot (eli lomakkeessa "username" ja "password") Mikäli tiedot täsmäävät ni avataan sivu "oikein.php" muussa tapauksessa "denied.php".
Tässä scriptissä ei sinällään ole mitään vikaa, se toimi moitteettomasti edellisellä palvelimellani (tosin tietoturva on ++ =)
Mutta nyt kun hankin uuden palvelimen joka tukee myös php.tä + MySQL niin kyseinen skripti ei toimikkaan, vaan se avaa aina sivun "denied.php" oli salasana/käyttäjätunnus oikein tai ei... Missä voisi olla vika?
Ps: Jos viittitte ni voisitte vihjasta jotain tietoturva vinkkejä, olen juuri kryptaamassa noita salasanoja (md5) ja ajattelin vielä tehdä "oikein.php" sivuun jonkunlaisen skriptin joka tarkistaa onko salasana/käyttäjätunnus annettu (näin ollen osoitetta ei voi kirjoittaa suoraan osoiteriville) mutta miten semmoinen skripti oikein tehtäisiin??
*vau.. taas ylitin itteni sekasorron kirjoittamisessa... No jos joku kuitenkin edes jotain tajusi niin olisin kiitollinen vastauksesta =)*
Ei tuossa koodissa äkkiseltään näyttäisi mitään vikaa olevan. Kokeile nyt vaikka laittaa viimeinen else-lauseke aaltosulkujen sisään:
lainaus:
skriptin joka tarkistaa onko salasana/käyttäjätunnus annettu (näin ollen osoitetta ei voi kirjoittaa suoraan osoiteriville) mutta miten semmoinen skripti oikein tehtäisiin?
Yksi tapa on tallentaa kävijän koneelle eväste (cookie) joka on tietyn ajan voimassa. Aina kun kävijä tulee siihen tiettyyn osoitteeseen, tarkistat löytyykö evästettä ja mikäli löytyy jatketaan eteenpäin muulloin viedään vaikka tunnuksien kyselysivulle.
Toinen vaihtoehto taas on sessiot (session) jotka ovat samantyylisiä kuin evästeet mutta eivät tallenna kävijän koneelle mitään. Sessioista en osaa käytännössä mitään, pitäisi opetella ensin itsekin niitä käyttämään.
PS. Koodilistauksien esityksessä kannattaa käyttää Ohjelmointiputkan kooditageja (lisätietoa keskustelualueen Ohjeet-sivulla)
edit: kooditagi korjattu
Juu, no toi salasana patentti on kyl aika perseest, löysin jo paljon paremman PHP + MySQL + Cookies salasanan et taidan käyttää sitä ennemmin, se myös kryptaa ne md5 muotoon. Aattelinkin kysyy et onko toi md5 kryptaaja kuinka turvallinen? Ku esim sana "testi" on md5 muotoon käännettynä aina "9627df7a4a5b849f67fce863e82adc71" eli 32 merkkinen hexakoodi, ajattelinkin ku on niin hemmetin helppoa muuttaa tavallinen sana md5 muotoon niin eikö käytännössä olisi lähes yhtä helppoa muuttaa md5 kryptattu sana tavalliseen muotoon? Tosin muistaisin lukeneeni jostain että md5 kryptaus on yksisuuntainen, se merkitsee että md5 muotoista salasanaa on lähes mahdoton kotikonstein muuttaa tavalliseen muotoon? Vaiko? No kommentteja tosta md5 kryptaajan turvallisuudesta kiitos.
MD5 tosiaan on yksisuuntainen (hashi, "hash"). Eli ainoa keino on milteinpä raaka voima, eli bruteforce: kokeillaan kaikki mahdollisuudet läpi.
MD5-pohjainen salasanasuojaus perustuu juuri siihen, että kryptataan käyttäjän antama salasana, ja verrataan sitä alkuperäisesti rekisteröityessä annetun salasanan hashiin -- jos ne täsmäävät on salasana oikein.
MD5 on suunniteltu niin, että saman hash-arvon tuottavia merkkijonoja ei ole helppo löytää.
Tiivistettynä: kyllä MD5 melko turvallinen on :)
lainaus:
Aattelinkin kysyy et onko toi md5 kryptaaja kuinka turvallinen? Ku esim sana "testi" on md5 muotoon käännettynä aina "9627df7a4a5b849f67fce863e82adc71"
Kyllä se turvallinen on mielestäni. Niin ja voithan tehdä tuosta testi salasanasta vaikka kaksinkertaisen hashin - ajat tuon ensimmäisen hashin uudestaan md5() funktion läpi. Sitten vain vertaat käyttäjän antamaa salasanaa samoin kuin ennenkin, ajat sen salasanan md5() funktion läpi ja vielä sen hashin uudestaan.
Oikeastaan md5 ei ole kryptausfunktio vaan se palauttaa jokaisesta merkkijonosta samanpituisen hashin. Niinpä md5-hashista ei voi mitenkään saada palautettua alkuperäistä merkkijonoa. Hashi toimii siis tarkistusarvona, vähän niin kuin henkilötunnuksen ja ISBN-numeron viimeinen merkki.
Mutta raaka voima on aina olemassa, kuten fawkz sanoi. Tällöin tärkeää on, että salasana on kyllin pitkä ja sisältää mieluiten sekä suuria että pieniä kirjaimia ja numeroita. Tämä ei kuitenkaan ole md5:n vika vaan pätee kaikkiin salasanoihin.
Juu-u, no eiköhän teiän sanaa oo sit luottamista. Otin sen uuden salasana jutun tuosta http://www.silmukka.net/php/25 mutta tuli pari ongelmaa sen hemmetin mysql paskan kanssa. Elikkä tein kaikki ohjeen mukaan, kryptasin salasanan, laitoin "tunnukset.php" tiedostoon palvelimelta saadut tunnukset, laitoin "laita_tunnukset.php" tiedostoon oman käyttäjätunnuksen ja salasanan kryptattuna, tein kaiken ohjeiden mukaan mutta kun ajoin ensin "tunnukset.php" tiedoston palvelimeni sanoin näin:
Warning: Access denied for user: '*käyttäjätunnukseni*@localhost' (Using password: YES) in /domain.com/sivuni/tunnukset.php on line 7
Warning: MySQL Connection Failed: Access denied for user: '*käyttäjätunnukseni*@localhost' (Using password: YES) in /domain.com/sivuni/tunnukset.php on line 7
Warning: Access denied for user: 'nfhusers@localhost' (Using password: NO) in /domain.com/sivuni/tunnukset.php on line 8
Warning: MySQL Connection Failed: Access denied for user: 'nfhusers@localhost' (Using password: NO) in /domain.com/sivuni/tunnukset.php on line 8
Warning: MySQL: A link to the server could not be established in /domain.com/sivuni/tunnukset.php on line 8
Että hieno homma kaikinpuolin, sen jälkeen ajoin tiedoston "luo_taulu.php" ja palvelimeni tulosti tämän.
Warning: Access denied for user: '*käyttäjätunnukseni*@localhost' (Using password: YES) in /domain.com/sivuni/tunnukset.php on line 7
Warning: MySQL Connection Failed: Access denied for user: '*käyttäjätunnukseni*@localhost' (Using password: YES) in /domain.com/sivuni/tunnukset.php on line 7
Warning: Access denied for user: 'nfhusers@localhost' (Using password: NO) in /domain.com/sivuni/tunnukset.php on line 8
Warning: MySQL Connection Failed: Access denied for user: 'nfhusers@localhost' (Using password: NO) in /domain.com/sivuni/tunnukset.php on line 8
Warning: MySQL: A link to the server could not be established in /domain.com/sivuni/tunnukset.php on line 8
Warning: Access denied for user: 'nfhusers@localhost' (Using password: NO) in /domain.com/sivuni/luo_taulu.php on line 6
Warning: MySQL Connection Failed: Access denied for user: 'nfhusers@localhost' (Using password: NO) in /domain.com/sivuni/luo_taulu.php on line 6
Warning: MySQL: A link to the server could not be established in /domain.com/sivuni/luo_taulu.php on line 6
Taulu luotiin onnistuneesti!
Jeps, hyvältä näyttää, tämän jälkeen ajoin kuitenkin vielä tiedoston "laita_tunnukset.php" niinkuin ohjeissa kehotettiin tekemään. Palvelin tulosti tämännäköistä puuroa:
Warning: Access denied for user: *käyttäjätunnukseni*@localhost' (Using password: YES) in /domain.com/sivuni/tunnukset.php on line 7
Warning: MySQL Connection Failed: Access denied for user: '*käyttäjätunnukseni*@localhost' (Using password: YES) in /domain.com/sivuni/tunnukset.php on line 7
Warning: Access denied for user: 'nfhusers@localhost' (Using password: NO) in /domain.com/sivuni/tunnukset.php on line 8
Warning: MySQL Connection Failed: Access denied for user: 'nfhusers@localhost' (Using password: NO) in /domain.com/sivuni/tunnukset.php on line 8
Warning: MySQL: A link to the server could not be established in /domain.com/sivuni/tunnukset.php on line 8
Warning: Access denied for user: 'nfhusers@localhost' (Using password: NO) in /domain.com/sivuni/laita_tunnukset.php on line 6
Warning: MySQL Connection Failed: Access denied for user: 'nfhusers@localhost' (Using password: NO) in /domain.com/sivuni/laita_tunnukset.php on line 6
Warning: MySQL: A link to the server could not be established in /domain.com/sivuni/laita_tunnukset.php on line 6
Tunnukset laitettu!
Wohoo! Siinäpä se, sitten koitin laittaa osoiteriville "www.domain.com/sivuni/adminille.php" joka on suojattu sivu, se tulosti tämän:
Warning: Access denied for user: '*käyttäjätunnukseni*@localhost' (Using password: YES) in domain.com/sivuni/tunnukset.php on line 7
Warning: MySQL Connection Failed: Access denied for user: '*käyttäjätunnukseni*@localhost' (Using password: YES) in domain.com/sivuni/tunnukset.php on line 7
Warning: Access denied for user: 'nfhusers@localhost' (Using password: NO) in domain.com/sivuni/tunnukset.php on line 8
Warning: MySQL Connection Failed: Access denied for user: 'nfhusers@localhost' (Using password: NO) in domain.com/sivuni/tunnukset.php on line 8
Warning: MySQL: A link to the server could not be established in domain.com/sivuni/tunnukset.php on line 8
Warning: Access denied for user: 'nfhusers@localhost' (Using password: NO) in /domain.com/sivuni/suojaus.php on line 5
Warning: MySQL Connection Failed: Access denied for user: 'nfhusers@localhost' (Using password: NO) in domain.com/sivuni/suojaus.php on line 5
Warning: MySQL: A link to the server could not be established in domain.com/sivuni/suojaus.php on line 5
Warning: Supplied argument is not a valid MySQL result resource in domain.com/sivuni/suojaus.php on line 6
Et ole kirjautunut sisään!
Eli kaikesta päätellen se kuitenkin toimii kun se tulosti tuon "Et ole kirjautunut sisään!" Mutta noi muut ylimääräset paskat vähän hämää..? Ja "index.php" tiedostoon (jossa on se login form) kun menin ja laitoin oikean käyttiksen/salasanan niin se avasi palvelimen "tiedostoa ei löytynyt sivun" Että näin tänään...
Ps: Nyt tais kyl mennä rikki ohjelmointiputkan pisimmän paskanjauhannan ennätys, vai mitä sanoo Antti? =) No mutta... siinä on taas mietittävää hetkeksi...
Oijoi kewl... eihän tost kukaa ota selvää... helvetti siin vasta on purkkaa äikänmaikalle...
*logged.php* <?php if ($_POST["password"] == 'admin' && $_POST["username"] == 'admin') { include("oikein.php"); } elseif ($_POST["password"] == 'moderator' && $_POST["username"] == 'moderator') { include("oikein.php"); } elseif ($_POST["password"] == 'guest' && $_POST["username"] == 'guest') { include("oikein.php"); } else include("denied.php"); ?>
Vielä tuohon skriptiin palatakseni voisin mainita että skripti TOIMII moitteettomasti lycosin palvelimella, mutta kun siirrän skriptin täsmälleen samassa muodossa ja tiedostonimillä varustettuna coolfreepagesin palvelimelle niin skripti avaa aina "denied.php" sivun, oli salasana/käyttis oikein tai väärin, mistäköhän se voisi johtua?? Onko coolfreepagesin palvelin sitte niin pe*seestä että sama skripti joka toimii muualla niin taivaallisesti ei siellä suvaitsekkaan toimia...?
Juu Coolfreepages on aina kaikista huonoin valinta (melkein :)
Nähtävästi =) Ihan ku se saatanan pop-up ei ois jo liikaa... MySQL:n toimimattomuus viel meneeki.. mut perkele ku ei php:kää toimi niiku ennen... voi jeesus mitä ne nykyää tekeeki... Ei kellää ois suositella mitää hyvää ilmaista PHP + MySQL palvelinta? Mielellää jollai pienel pop-upil tai banneril jonka voi ite laittaa johonki kulmaa eikä se hyppää ihan mistä sattuu. Suht nopeeki jos viel ois =) nii joo, ja FTP - uploadaus. Jeps
VOII V*TTU! Alkaa pikkuhiljaa jurppimaa nää salasanat, koitin nimittäin äsken tohon "logged.php" skriptii lisätä sitä md5 kryptausta, sain kryptattuu salasanan ja laitoinkin sen tohon "logged.php" tiedostoon kryptattuna, mutta sitten unohin jo mitä hemmettii siihen login formii piti pistää? Jos se login form ois vaikka nyt tämmönen simppeli:
<html> <head> <title>Login</title> </head> <body> <form action="logged.php" method="POST"> <input type="text" name="username" size="20"> <br> <input type="password" name="password" size="20"> <br> <input type="submit" value="Kirjaudu" name="submit"> </form> </body> </html>
Niin muistaakseni tohon johonkin kohtaa piti laittaa joku koodinpätkä mikä muuttaa ton password lomakkeen tiedot md5 muotoon, mutta mitenköhän se nyt taas menikään? Koitin jo ettii sitä mut en löytäny enää millää... Muistan vaa et se oli hemmetin lyhyt, varmaa jotain 4 merkkiä... (Ja mä unohin sen ;p )
Nii ja viel semmonen juttu et jos joku löytäis jonkun hyvän, ja tällä kertaa TOIMIVAN php salasanan (mielellään ilman mitää special MySQL + Cookies paskaa, niillä ku on taipumus aina kusta) ni oisin kiitollinen jos vois vaikka pistää linkin tai kenties jopa koko skriptin tähän, toivoisin jotain ylläolevan tapaista hieman kehittyneempää ja turvallisempaa ratkaisua md5 kryptauksella, olisiko aivan mahdotonta hoitaa homma tyylikkäästi puhtaalla php:llä? Tnx
Aloitetaanpa nyt ihan alusta ja tehdään toimiva login skripti. Eli ensimmäisenä on se login formi:
login.html
<html> <head> <title>Login</title> </head> <body> <form action="logged.php" method="POST"> <input type="text" name="username" size="20"> <br> <input type="password" name="password" size="20"> <br> <input type="submit" value="Kirjaudu" name="submit"> </form> </body> </html>
Tuo login formi ohjaa siis sivulle logged.php kun "Kirjaudu" painiketta painetaan ja välittää tunnuksen ja salasanan POST-metodilla. Tämän perusteella logged.php sivun sisältö olisi tällainen:
<?php if (md5($_POST['password']) == md5("admin") && $_POST['username'] == "admin") { setcookie("loginstatus", "ok", time() + 3600); header("Location: oikein.php"); } elseif (md5($_POST['password']) == md5("moderator") && $_POST['username'] == "moderator") { setcookie("loginstatus", "ok", time() + 3600); header("Location: oikein.php"); } elseif (md5($_POST['password']) == md5("guest") && $_POST['username'] == "guest") { setcookie("loginstatus", "ok", time() + 3600); header("Location: oikein.php"); } else { header("Location: denied.php"); } ?>
oikein.php tiedostoon laitetaan ensimmäiseksi rivit:
Nyt oikein.php sivulle ei pääse mikäli evästettä ei ole asetettu. logged.php tiedostossa setcookie() funktiolla asetetaan eväste joka on voimassa 3600 s eli yhden tunnin.
edit: en sitten testannut noita, vaan tein ne vanhasta tottumuksesta
Siis, itse luulin aina että "logged.php" tiedostoon pitäisi laittaa se md5 muotoon käännetty salasana, tuossa se salasana kuitenkin on "admin", ymmärinsinkö nyt aivan väärin? Vai jätitkö aivan tarkoituksella laittamatta siihen sitä md5 muotoista salasanaa?
edit: Koodiphp, /koodiphp jutut ei oikee näyttäny toimivan ni otin pois..?
Niin muuten, olisiko mahdollista pistää tuo "logged.php" tiedosto .htaccessilla suojattuun kansioon? Ajattelin vain että mitenköhän se sitten toimii, tarviikohan laittaa viel käyttis/salasana siihen .htaccessilla suojattuun kansioon, ilmeisesti? Tuskinpa sitä nimittäin voi ajaa ilman oikeuksia, eikö?
lainaus:
Siis, itse luulin aina että "logged.php" tiedostoon pitäisi laittaa se md5 muotoon käännetty salasana, tuossa se salasana kuitenkin on "admin", ymmärinsinkö nyt aivan väärin?
Merkinnät md5("admin") ja "21232f297a57a5a743894a0e4a801fc3" ajavat saman asian, jälkimmäisen käyttö on siksi suositeltavaa, että salasanaa ei näe, vaikka php-koodi jostain syystä tulisi näkyville.
Noniin =)
Taidampa sitten koittaa tuota trinitin salasana patenttia. Tnx
Wow, sehän muuten toimii!
Ku laitoin tollee ihan alkuperäsessä trinitin kirjottamassa muodossa ni toimi niiku pitikin, mutta ku laitoin ton "admin" salasanan tilalle sen md5 koodin ni ei toiminu enää, vaan avas sivun "denied.php". No eiköhän siihen jotain keksitä. Ovelinta jutussa oli kuitenkin se (trinitin alkuperäisessä) että kun kirjoitti osoiteriville www.domain.com/sivuni/oikein.php niin se avasi sen "login.html" sivun, heh, itse en ainakaan huomannut skriptiä niin viisaaksi, ilmeisesti tohon jotenki vois määritellä minkä sivun avaa jos menee suoraan osoiteriviltä siihen "oikein.php" tiedostoon.
Ja muuten, mitkäköhän oikat ois tolle "logged.php" tiedostolle hyvät? Itse kun en niistä oikein tiedä...
Jos sen oikeat.php:n ei tarvitse kirjotella tiedostoihin tai vastaaviin ni eiköhän ne normaalit ole sopivat?
"oikeat.php"? Jos tarkoitat "oikein.php" sivua niin sen laitoin vain testiksi tuohon skriptiin, siis se "oikea.php" sivu avataan kun salasana/käyttis ovat kirjoitettu oikein, mutta kysyinkin että mitkä oikeudet tuohon "logged.php" tiedostolle kannattaisi pistää. (Eli siis ne 666,646,777 jne...)
lainaus:
Siis, itse luulin aina että "logged.php" tiedostoon pitäisi laittaa se md5 muotoon käännetty salasana, tuossa se salasana kuitenkin on "admin", ymmärinsinkö nyt aivan väärin? Vai jätitkö aivan tarkoituksella laittamatta siihen sitä md5 muotoista salasanaa?
Ei sitä tosiaan niin vaikeasti tarvitse tehdä :). Tosin tuossa on paha bugi, mikäli palvelimen PHP-tulkki menee sekaisin ja joku juuri silloin siirtyy logged.php sivulle, näkee hän salasanan koodista (mikäli osaa tulkita koodia).
Salasanat voisi tallentaa johonkin tiedostoon sellaisenaan miksi ne tulevat md5() funktion läpi ajettuna. Tällöin salasanat luettaisiin tiedostosta ja logged.php tiedoston rivit:
muuttuisivat esimerkiksi muotoon
jne. $adminpwd muuttujassa olisi siis aiemmin tiedostosta luettu salasanan "käännetty muoto".
lainaus:
www.domain.com/sivuni/oikein.php niin se avasi sen "login.html" sivun, heh, itse en ainakaan huomannut skriptiä niin viisaaksi, ilmeisesti tohon jotenki vois määritellä minkä sivun avaa jos menee suoraan osoiteriviltä siihen "oikein.php" tiedostoon.
Joo, se on tehty niin, että logged.php tiedostossa asetetaan eväste jonka nimeksi tulee "loginstatus", sen arvoksi asetetaan "ok" ja se on voimassa 3600 sekuntia eli yhden tunnin (koodissa se tehdään setcookie() funktiolla). Nyt mikäli evästettä ei ole asetettu ja yritetään mennä oikein.php sivulle, ohjataan selain loggaus-sivulle (tuon siis tekee sen oikein.php tiedoston ensimmäinen if() lauseke).
Mikäli selaimen asetuksista on laitettu että se ei hyväksy evästeitä, et pääse koskaan oikein.php sivulle vaikka kirjoittaisit oikeat tunnukset.
edit: koodiphp tagi näyttäisi taas bugittavan, ei värjää koodia ja jättää osan koodista pois...
lainaus:
mitkä oikeudet tuohon "logged.php" tiedostolle kannattaisi pistää. (Eli siis ne 666,646,777 jne...)
Jos tuohon tiedostoon pitää päästä kaikkien eikä ainoastaan sinun, niin 777 silloin. CHMOD:sta lisää FAQ:ssa https://www.ohjelmointiputka.net/faq.php?sivu=3
lainaus:
Ja muuten, mitkäköhän oikat ois tolle "logged.php" tiedostolle hyvät? Itse kun en niistä oikein tiedä...
Pitäiskö tohon logged.php tiedostoon kirjottaa jotain? Noi oikeudet pitää antaa tän kaavan mukaan:
1 = Tiedoston ajaminen/kansioon pääseminen
2 = Tiedostoon voi kirjoittaa
4 = Tiedostoa voi lukea
(noi lasketaan yhteen, eli luku + kirjoitus = 4 +2 = 6)
Eli jos tiedostoa pitää vaan lukea niin 644 riittää (toi 6 tarkoittaa sitä että tiedoston owneri saa kirjottaa myös siihe)
Jos tiedostoon pitää kirjottaa webistä käsin niin oikat 666, 777 käy myös mutta en usko että siitä on mitään hyötyä, koska tiedostoa ei tarvi ajaa mitenkään.
Mitkä muuten on "normaalit oikat", kuten Teme asian ilmaisi ylempänä ? ;)
lainaus:
Mitkä muuten on "normaalit oikat", kuten Teme asian ilmaisi ylempänä ? ;)
Ainakin Saunalahden palvelimelle kun siirtää tiedoston sen oletusoikeudeksi tulee 611:
owner = read, write
group = execute
other = execute
Tiedä sitten onko eri palvelimilla eri oletukset.
lainaus:
Tiedä sitten onko eri palvelimilla eri oletukset.
Ilmeisesti on sillä ainakin lycosin rupu palvelimen oletuksena taisi muistaakseni olla 646.
Vielä tuosta Trinitin $adminpwd muuttujasta, se muuttuja siis sisältää sen md5 muotoisen salasanan? Ja oliko ideana kenties tehdä jokin muu tiedosto sille $adminpwd muuttujalle? Kelpaisiko esim passwords.txt tiedosto joka sijaitsee .htaccesilla suojatussa kansiossa? Voisitko vielä pistää untuvikolle vähän valmista koodia sen mahdollisesta toteutuksesta? ;D
644 näkyy mulla olevan oletuksena oikeudet, jos luon kovalevylleni jonkun tiedoston.
btw, Lycosin palvelimet tuskin ovat kovin rupusia, palvelut saattavat kyllä olla ;)
lainaus:
edit: koodiphp tagi näyttäisi taas bugittavan, ei värjää koodia ja jättää osan koodista pois...
Näyttää siltä, että koodiphp vaatii PHP:n alku- ja lopputagit (<?php ja ?>) toimiakseen oikein. Toiminto on PHP:n omalla funktiolla toteutettu, niin en pysty oikein muokkaamaan sitä. Jos koodia on vain rivi tai pari, kannattanee käyttää tavallista koodi-tagia sen esittämiseen.
lainaus:
se muuttuja siis sisältää sen md5 muotoisen salasanan?
Kyllä vain.
lainaus:
Ja oliko ideana kenties tehdä jokin muu tiedosto sille $adminpwd muuttujalle? Kelpaisiko esim passwords.txt tiedosto joka sijaitsee .htaccesilla suojatussa kansiossa? Voisitko vielä pistää untuvikolle vähän valmista koodia sen mahdollisesta toteutuksesta? ;D
Joo, ideana oli että se salasana on tallennettuna jossakin tiedostossa md5-hash muodossa. Kun tunnuksia tarkastetaan luetaan se tiedostosta ja asetetaan se $adminpwd (tai muuhun) muuttujaan. Seuraavaksi taas esimerkki jossa salasanat luetaan passwords.txt tiedostosta.
passwords.txt tiedoston täytyy sisältää adminin, moderatorin ja guestin salasanat md5-hash muodossa allekkain omilla riveillään niin, että 1. rivillä on adminin salasana, 2. rivillä moderatorin ja 3. rivillä guestin.
<?php // Luetaan salasanat muistiin taulukkoon $fcon = file("passwords.txt"); if (md5($_POST['password']) == $fcon[0] && $_POST['username'] == "admin") { setcookie("loginstatus", "ok", time() + 3600); header("Location: oikein.php"); } elseif (md5($_POST['password']) == $fcon[1] && $_POST['username'] == "moderator") { setcookie("loginstatus", "ok", time() + 3600); header("Location: oikein.php"); } elseif (md5($_POST['password']) == $fcon[2] && $_POST['username'] == "guest") { setcookie("loginstatus", "ok", time() + 3600); header("Location: oikein.php"); } else { header("Location: denied.php"); } ?>
.htaccessia en ole koskaan kokeillut, mutta hyvä ohje siihen löytyy MBInternet:n ohje-sivulta: http://www.mbnet.fi/mbinternet/ohjeet/suojaus/
Juu, no sain toimimaa sen jo sillä sun antamalla edellisellä (cookies) skriptillä, se skripti tosin vähän kusi mutta sain sen kuitenkin toimimaan, puhuit jotain että siinä on paha bugi? En kyllä viittisi enää alkaa räknäämään tota toista vaihtoehtoa kun se nyt vihdoin viimein toimii kiitettävästi, Kiitokset kaikille mukana olleille, eiköhän tämä topic ollut tässä! =)
lainaus:
puhuit jotain että siinä on paha bugi?
Niin, koodissa sitä ei ole vaan se tapahtuu mikäli PHP-tulkki sekoaa.
Kirjoitin itse:
lainaus:
Tosin tuossa on paha bugi, mikäli palvelimen PHP-tulkki menee sekaisin ja joku juuri silloin siirtyy logged.php sivulle, näkee hän salasanan koodista (mikäli osaa tulkita koodia)
Samoin kirjoitti Laaksonen ennen minua:
lainaus:
Merkinnät md5("admin") ja "21232f297a57a5a743894a0e4a801fc3" ajavat saman asian, jälkimmäisen käyttö on siksi suositeltavaa, että salasanaa ei näe, vaikka php-koodi jostain syystä tulisi näkyville.
Aihe on jo aika vanha, joten et voi enää vastata siihen.