Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: $_GET, $_POST jne. - miksi?

Antti Laaksonen [09.08.2004 16:18:12]

#

Monet sanovat, että $_GET-, $_POST- jne. taulukoiden käyttäminen samannimisten muuttujien asemesta parantaa skriptin turvallisuutta merkittävästi. Olenkin miettinyt pitemmän aikaa, miten taulukoiden käyttö tarkalleen ottaen parantaa turvallisuutta - enkä ole keksinyt vastausta. Seuraavat asiat ovat tulleet mieleeni:

Olisin kiinnostunut kuulemaan hyviä syitä taulukoiden käyttöön; jotain on täytynyt jäädä minulta huomaamatta. Ja sellaiset esimerkkiskriptit olisivat hyviä, joissa on samannimisten muuttujien kanssa turvallisuusriski, mutta taulukoita käyttämällä (ilman muita muutoksia) ei.

Wizard [09.08.2004 17:24:45]

#

Hieman asian vierestä, eikä mitenkään varsinaisesti siihen liittyen (epäsuorasti kyllä).

Itse olen pyrkinyt tekemään noita muuttujia sellaisena, että sieltä pitää tulla jokin tietty arvo tai sitten se hylätään ja järjestelmä vaihtaa siihen oletuksen tai suoritus keskeytetään. Kaikissa tilanteissa se ei tietysti ole mahdollista, mutta niissä tilanteissa muuttujilla ei olekaan mitään erityistä merkitystä, koska niihin voi periaatteessa laittaa sitten vaikka mitä (olen kokeillut jos jonkinlaista ns. tietoturvariskiä) eikä niistä ole ollut haittaa.

Sitten väitellään ja väitellään SQL kyselyistä ja hipsuista. Noh: yksinkertaisesti ainakin allekirjoittaneella SQL kyselyitä ei suoriteta jos niiden syntaksi on väärä, SQL palvelin ei niitä edes suostu suorittamaan. Se taas palauttaa falsea joka taas kaataa koko suorituksen, ja käytänkin mieluiten sitten transaktio tyyppisiä suorituksia koko koodissa eli kaikki tai ei mitään. Jos yksi ehto ei täyty, niin sovellus kaatuu siltä osin ja palauttaa virheen (joka tietysti voi olla monenlainen). Nyt joku rikkiviisas taas tulee väittelemään hipsuista ja niiden merkityksestä, mutta kannattanee myös tutustua SQL palvelimiin sekä yleensä koko syntaksiin. SQL kieli on hyvin kapoinen loppujen lopuksi eikä sillä voi mitään ihmeellisyyksiä tehdä. Sitten kun kyselyitä ja taulujen päivityksiä voidaan kontroloida käyttäjätasolla ja uusimmissa palvelimissa jopa sarakekohtaisesti, niin tietoturvariskit vähenee jos vain osaa asiansa eli tavallaan esim. PHP:ssä voikin olla aukkoja, mutta viimeistään SQL palvelin tukkii ne.

makeuu [09.08.2004 17:28:42]

#

Itse olen myös miettinyt, mutta vieläkin käytän niitä $_POSTEJA ja $_GETTEJÄ ihan turvallisuuden takia.. :)

acorn [09.08.2004 17:44:03]

#

Yksi hyvä asia on koodin selkeytyminen. Jos joku ulkopuolinen lukee koodin (esim. täältä koodivinkin), saattavat alustamattomat muuttujat aiheuttaa ihmettelemistä, mutta jos muuttuja on taulukossa $_POST tai $_GET, tietää niiden välittömästi tulevan lomakkeen tai osoiterivin kautta.

Antti Laaksonen [09.08.2004 22:20:26]

#

acorn kirjoitti:

Yksi hyvä asia on koodin selkeytyminen.

Joo, tämä pitää joissain tilanteissa paikkansa. Mutta turvallisuuteen asialla ei ole vaikutusta.

kayttaja-2791 [10.08.2004 21:01:17]

#

Jahas, itse ehkä käytän juurikin selkeytysmielessä sekä yhteensopivuuden takaamiseksi. En ole juurikaan tuota miettinyt niin pitkälle että mikä sen merkitys turvallisuuteen on.

Mutta aiheena ihan mielenkiintoinen. Kuinka jotain systeemiä voisi väärinkäyttää jos skripti ei käytä noita taulukoita? Siitä ainakaan ei ole mitään haittaa jos joku lähettää ne tiedot vaikka formin sijasta asettamalla omalle koneelleen keksin (tosin voi aiheuttaa palvelun toimimattomuuden, mutta kukaan tavallinen käyttäjähän näin ei tee). Kaikki post, get ja cookie ovat salaamattomia ja avoimia jotka kaikki voi helposti kiertää.

Toki riski voi olla että joku huomaa että loggautumisen voi tehdä postin sijasta vaikka getillä tai keksillä, post kun ei jätä jälkeä selaimeen toisin kuin muut keinot joista ne voi sitten jokin vihamielinen taho käydä katsomassa... Mutta jos joku osaa tehdä tuon tempun tietää hän kyllä myöskin riskit.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta