Sessionin turvallisuus

lintuherra

1) Onko turvallista jos sisäänkirjautuminen tarkistetaan aina sivun lautauksen yhteydessä vain katsomalla onko esimerkiksi $_SESSION['kirjauduttu'] olemassa? (tuo sessioni siis luodaan kun syötetään oikea käyttäjä ja salasana, jotka löytyvät mysql-tietokannasta)

2) Onko tuossa 1)-kohdassa eroa onko $_SESSION['kirjauduttu'] vai $_SESSION['$ip'] ja sitä verrataan käyttäjän ip:hen? ($ip haettaisiin ja tarkistus tehtäisii joka sivun latauksen yhteydessä)

3) Vai olisiko parempi jos aina kun sivu ladataan uudestaan katsottaisiin onko $_SESSION['nimi'] ja $_SESSION['salasana'] mysql-tietokannassa? Hidastaisiko se turhaan vai olisiko paljon turvallisempi?

4

732

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Lauri.

      >> 1) Onko turvallista jos sisäänkirjautuminen tarkistetaan aina sivun lautauksen yhteydessä vain katsomalla onko esimerkiksi $_SESSION['kirjauduttu'] olemassa?
      Ei ole. Joku on saattanut kaapata istunnon (ei mikään kovin vaikea tehtävä). Sinun on myös varmistettava, että istunto edelleen kuuluu sen alkuperäiselle omistajalle. Googlettele lisää.

      >> 2) Onko tuossa 1)-kohdassa eroa
      Kyllä on. Usea ihminen saattaa käyttää Internettiä saman IP:n takaa, esimerkiksi taloyhtiöt ja kirjastot. Lisäksi IP saattaa vaihdella joissain todella harvoissa tapauksissa eri sivulatausten kesken, esimerkiksi jotkut matkaviestimistä käytetyt yhteydet (mutta tosi harvinaista)

      >> 3) Vai olisiko parempi jos aina kun sivu ladataan [...]
      No hidastaahan se. Aina se tietokantakysely näkyy, ja toisekseen kun tuo salasana on kerran annettu (onnistuneesti aloitettu istunto), niin kyllä se sieltä tietokannasta löytyy jatkossakin. Näen tuon aika turhana.

      • lintuherra

        Mikäs sitten on suositeltu tapa käyttää sessioneita turvalliesti?

        Ja tuli toinen turvallisuuteen littyvä asia mieleen.
        Sivustoa luetaan index.php:n kautta includettamalla siihen erillaisia tiedostoja, esim. uutiset.php, kayttajat.php. Jos kuitenkin haluan, että uutiset.php:tä ei voi lukea muuta kuin index.php:n kautta niin onko tämmöinen esimkerkiksi toimiva tapa:

        index.php:
        sisältää ennen includettamista pätkän "$turvallisuus = 1;"

        uutiset.php
        sisältää aivan alussa pätkän
        if (!$turvallisuus) exit;


      • Lauri.
        lintuherra kirjoitti:

        Mikäs sitten on suositeltu tapa käyttää sessioneita turvalliesti?

        Ja tuli toinen turvallisuuteen littyvä asia mieleen.
        Sivustoa luetaan index.php:n kautta includettamalla siihen erillaisia tiedostoja, esim. uutiset.php, kayttajat.php. Jos kuitenkin haluan, että uutiset.php:tä ei voi lukea muuta kuin index.php:n kautta niin onko tämmöinen esimkerkiksi toimiva tapa:

        index.php:
        sisältää ennen includettamista pätkän "$turvallisuus = 1;"

        uutiset.php
        sisältää aivan alussa pätkän
        if (!$turvallisuus) exit;

        >> Mikäs sitten on suositeltu tapa käyttää sessioneita turvalliesti?
        Tallenna sessioniin joitain tietoja käyttäjästä, jotka ovat riittävän yksilöllisiä ja eivät vaihdu kyselyjen aikana. Osa näistä tiedoista on saatavilla SERVER muuttujan takaa: http://fi2.php.net/manual/en/reserved.variables.server.php

        Sitten niiden pohjalta vertailet, ovatko tiedot vaihtuneet vai eivät. Hyviä arvoja ovat mm. IP ja selain (user agent).

        >> niin onko tämmöinen esimkerkiksi toimiva tapa:
        Juurikin tuollainen on oikea tapa. Jotkut tosin määrittelevät definellä ( http://fi2.php.net/manual/en/function.define.php ) tuon arvon, ja tarkastavat onko se haluttu, tyyliin
        define("turvallisuus", 1); ja jokaiseen tiedotoon if(!defined("turvallisuus")) die();

        Tämä siitä syystä, että jos palvelin on asetettu käyttämään superglobaaleja arvoja, niin tuosta sinun esimerkistäsi pääsisi läpi menemällä osoitteeseen uutiset.php?turvallisuus=1. Mutta PHP 5 eteenpäin tuo asetus on ollut poissa päältä (oletuksena), ja tuskin toimii nyttenkään. Mutta tuo define on siis hieman "turvallisempi", koska ei ole haavoittuvainen palvelimen asetuksista.


      • lintuherra
        Lauri. kirjoitti:

        >> Mikäs sitten on suositeltu tapa käyttää sessioneita turvalliesti?
        Tallenna sessioniin joitain tietoja käyttäjästä, jotka ovat riittävän yksilöllisiä ja eivät vaihdu kyselyjen aikana. Osa näistä tiedoista on saatavilla SERVER muuttujan takaa: http://fi2.php.net/manual/en/reserved.variables.server.php

        Sitten niiden pohjalta vertailet, ovatko tiedot vaihtuneet vai eivät. Hyviä arvoja ovat mm. IP ja selain (user agent).

        >> niin onko tämmöinen esimkerkiksi toimiva tapa:
        Juurikin tuollainen on oikea tapa. Jotkut tosin määrittelevät definellä ( http://fi2.php.net/manual/en/function.define.php ) tuon arvon, ja tarkastavat onko se haluttu, tyyliin
        define("turvallisuus", 1); ja jokaiseen tiedotoon if(!defined("turvallisuus")) die();

        Tämä siitä syystä, että jos palvelin on asetettu käyttämään superglobaaleja arvoja, niin tuosta sinun esimerkistäsi pääsisi läpi menemällä osoitteeseen uutiset.php?turvallisuus=1. Mutta PHP 5 eteenpäin tuo asetus on ollut poissa päältä (oletuksena), ja tuskin toimii nyttenkään. Mutta tuo define on siis hieman "turvallisempi", koska ei ole haavoittuvainen palvelimen asetuksista.

        Kiitos paljon edellisistä, ovat olleet suuresti avuksi. :)

        Mutta vielä pieniä tarkennuksia.
        Eli tarkoitit, että esimerkiksi sisäänkirjauduttaessa luodaan aina $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];. Ja joka lautauksella katsotaan esim.
        if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) exit;
        Onko turvallisempaa jos $_SESSION['ip']:n tilalle laitetaan esim. $_SESSION['$_SERVER['REMOTE_PORT']'] jolloin sessionin nimi vaihtuu joka kerta?

        Onko myöskään väliä, että onko sessioneita tehty useita? Esim. onko $_SESSION['ip'] ja $_SESSION['selain'] turvallisempaa tarkastaa erikseen kuin luoda yksi $_SESSION['ipselain']?


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Tänään pyörit ajatuksissa enemmän, kun erehdyin lukemaan palstaa

      En saisi, silti toivon että sinä vielä palaat ja otetaan oikeasti selvää, hioituuko särmät ja sulaudummeko yhteen. Vuod
      Ikävä
      33
      6484
    2. Huomenta ihana

      Kauniskasvoinen ihanuus 😘 saan sut vielä
      Ikävä
      35
      5973
    3. Hei rakas...

      Miten on työpäivä sujunut? Rakastan sinua 💗
      Ikävä
      29
      3324
    4. Ei tämä etene ikinä

      Kun kumpikaan ei enää ota yhteyttä. Mä en ainakaan uskalla.
      Ikävä
      45
      2740
    5. Edelleen sitä on vaikea uskoa

      Että olisit oikeasti rakastunut muhun
      Ikävä
      34
      2594
    6. Vitsi mihin menit. Heti takasin.

      Mä näin sut tuu takasin! Oli kiire, niin en ehtiny sin perään!
      Ikävä
      15
      2268
    7. Toiveikas vai toivoton

      torstai? Ajatuksia?
      Ikävä
      37
      2158
    8. Mukavaa päivää

      Mun rakkauden kohteelle ❤️ toivottavasti olet onnellinen
      Ikävä
      16
      1976
    9. Voi ei! Jari Sillanpää heitti keikan Helsingissä - Hämmästyttävä hetki lavalla...

      Ex-tangokuningas on parhaillaan konserttikiertueella. Hän esiintyi Savoy teatterissa äitienpäivänä. Sillanpää jakoi kons
      Suomalaiset julkkikset
      40
      1819
    10. En ole koskaan kokenut

      Ennen mitään tällaista rakastumista. Tiedän että kaipaan sinua varmaan loppu elämän. Toivottavasti ei tarvitsisi vain ka
      Ikävä
      19
      1747
    Aihe