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

623

    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. Apua, Gogi ja Kia tippuivat TTK:sta! Oliko Gogin ja Kian tiputus mielestäsi oikein?

      Gogi ja Kia tippuivat monen yllätykseksi sunnuntaina TTK:sta. Oliko tämä mielestäsi oikein näin vai kenen olisi pitänyt
      Tanssii tähtien kanssa
      72
      1814
    2. Taas poistuu ABC, nyt Salossa

      Ei ole enää ihmisillä varaa ostaa nakkisämpylää myymälän puolelta. Viimeiset roposet menevät polttoaineeseen. Takana on
      Maailman menoa
      110
      1655
    3. Irak aikoo laskea tyttöjen avioitumisikää yhdeksään vuoteen

      Myös avioero naisen aloitteesta kielletään https://yle.fi/a/74-20123694
      Maailman menoa
      252
      1245
    4. Millainen luonne sinä olet?

      Itse olen innovatiivinen ja kuunteleva, sekä avoin uusille asioille. Mieheltä
      Ikävä
      182
      1202
    5. Suomalaisista nuorista miehistä huolestuttava tutkimus Joka neljäs hyväksyy naisiin kohdistuvan vä

      Suomalaisista nuorista miehistä huolestuttava tutkimus – Joka neljäs hyväksyy naisiin kohdistuvan väkivallan Joka neljä
      Maailman menoa
      235
      1173
    6. Oletko koskaan miettinyt miltä lähempi fyysinen

      kontakti tuntuisi hänen kanssaan? Sitä menee sekaisin pelkästä olemuksesta, niin kosketus voisi olla aika räjäyttävää.
      Ikävä
      45
      1087
    7. Mukavaa maanantai päivää

      Hyvää huomenta. 🐺❄️⚜️☕🧡
      Ikävä
      212
      1054
    8. Vasemmistoliiton Minja Koskela lyttäsi Halla-ahon...

      ...arvion Usan presidentin vaalien voiton syistä, ja löi pöytään täsmälleen oikean arvion. Koskelan arviota tukevat myös
      Maailman menoa
      293
      912
    9. Aina vaan kalliimmaksi tulee NATO Suomelle

      "Kaikkonen ja Kopra: Nato vaatii pian lisää panostusta jäsenmailtaan" https://www.is.fi/politiikka/art-2000010824365.htm
      Maailman menoa
      221
      890
    10. Mitä kivaa sanoisit kaivatullesi?

      Vai osaatko sanoa toisista mitään hyvää?
      Ikävä
      56
      767
    Aihe