Deffi kirjoitti:
Lähempi tarkastelu osoittaa, että varsinaiselle sivulle pääsee asettamalla kekseihin muuttuja ID=1, ID=6 tai ID=8. Ja mikä hauskinta, tällöin sivusto luulee että olet kirjautunut ID:n osoittamana käyttäjänä. Esimerkiksi chromessa kirjoittamalla osoiteriville
javascript:void(document.cookie="ID=1");
ja surffaamalla osoitteeseen tehogames.com kirjaudut Matti-ylläpitäjätunnuksella sivulle. Että semmosta tietoturvaa sitten..Mutta hei, onnea projektiin. Glory & Pride näyttää tosi hauskalta :)
Tuo tuli minulle tuolla projektit alueella.. Miten ihmeessä tuon pystyy estämään ettei kukaan voi kirjoittaa itselleen keksiksi jotain ID:tä? Mitä suojausta siihen voi käyttää?
MD5 hashauskin on joka tarkistaa ollaanko sitä kirjauduttu.. Käytänkö sitä sitten väärin?
<?php if (isset($_SESSION['hash'])) { $hash = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; $hash .= 'salINEn_Su0lA'; $hash .= $_SERVER['REMOTE_ADDR']; $hash = md5($hash); if ($_SESSION['hash'] != $hash) { header("location: ?q=logout"); } } else { $hash = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; $hash .= 'salINEn_Su0lA'; $hash .= $_SERVER['REMOTE_ADDR']; $_SESSION['hash'] = md5($hash); } ?>
mika132 kirjoitti:
Käytänkö sitä sitten väärin?
Käytät sitä väärin.
Käytät tuossa jo $_SESSIONia, joten oikea tapa olisi laittaa $_SESSION['id'] = 1; eikä pelata evästeiden kanssa.
Jos nyt kuitenkin haluat viritellä tiivisteillä, niin tuosta säädöstäsihän ei ole mitään hyötyä ID:n vaihtamisen kannalta, koska tiiviste ei ole millään tavalla riippuvainen siitä ID-numerosta ja muutenkin tuo $_SESSIONin sisältämä data on omalla palvelimellasi. Eli jos haluaisit (turhaan) parantaa tietoturvaa niin laittaisit tuon tiivisteen evästeeseen ja sitten vertailisit sitä sessiossa oleviin tietoihin.
Miten turvallinen nykyinen systeemini mahtaa olla? Teen rekisteröityessä random lukuarvon ja suolaan sen jonka jälkeen siirrän sen tietokantaan sarakkeeseen Tietoturva. Sitten kirjautuessa asetetaan tuo tieto sieltä tietokannasta istuntoon "hash" ja tarkistetaan onko istunto hash sama kuin kirjautumis ID:n löytämä hash.. jos ei tuhotaan kaikki istunnot ja evästeet joka tarkoittaa uloskirjausta.
Oli ehkä hieman monimutkaisesti selitetty, mutta toivottavasti ymmärsit. :D
Miksi se ID ylipäätään pitää pistää evästeeseen?
Jos haluat jotain järkevää kommenttia tietoturvasta, niin pistä koko koodi näkyville.
Evästeeseen siksi että käyttäjä pysyy kirjautuneena ettei tarvitse aina kirjautua uudestaan. Mikä koodi jos saan kysyä? Kirjautumis?
Niin, miksi laitat sen ID:n sinne evästeeseen, etkä sessioon kun kerran joka tapauksessa käytät sessioita?
Jos taas haluat sisäänkirjautumisen säilyvän istunnon jälkeenkin, niin itse generoisin jonkin satunnaisen merkkijonon kantaan ja laittaisen sen evästeeseen. Ko. satunnaismerkkijonon perusteella sitten voisi hakea käyttäjän, eikä ID:tä edelleenkään tarvitsisi laittaa evästeeseen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.