Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: PHP: Salasanan tarkistaminen

Sivun loppuun

E1ss [17.04.2017 16:08:22]

#

Minun pitäisi selvittää onko post metodilla syötetty salasana oikea. Ideana koodissa on että jos salasana ei ole oikea koodin toteutus lopetetaan exit metodilla. Jos salasana on oikea koodi suorittaa halutun asian. Ajattelin toteuttaa salasanan tarkistuksen yksinkertaisesti kirjoittamalla:

if(salasanaPost == "salasana123"){
    //koodia...
}else{
    echo "salasana on väärä!";
    exit();
}

Joissain ohjelmointi kielissä tämä olisi tietenkin ongelma koska käyttäjä pystyy näkemään lähdekoodin mutta phpssä käyttäjä ei näe koodia joten minusta tämä ainakin teoriassa kuulostaa hyvältä. Olenko oikeassa vai piileekö tässä joku tietoturva ongelma?

peran [17.04.2017 16:12:27]

#

E1ss kirjoitti:

Joissain ohjelmointi kielissä tämä olisi tietenkin ongelma koska käyttäjä pystyy näkemään lähdekoodin mutta phpssä käyttäjä ei näe koodia joten minusta tämä ainakin teoriassa kuulostaa hyvältä. Olenko oikeassa vai piileekö tässä joku tietoturva ongelma?

Olet väärässä, siinä piilee tietoturvaongelma. Suolaa, ja käytä hash:iä.

E1ss [17.04.2017 16:58:10]

#

Voisitko vähän avata tuota asiaa. En ymmärrä mitä tarkoitat suolaamisella ja hashillä.

Lisäys: Ja voisitko myös selittää miten tuo muka on tietoturva ongelma. Tietääkseni kukaan ei pääse lähdekoodiin käsiksi.

Metabolix [17.04.2017 17:10:27]

#

E1ss kirjoitti:

Tietääkseni kukaan ei pääse lähdekoodiin käsiksi.

Teoriassa koodeihin ei pääse. Kuitenkin virheitä tapahtuu. Esimerkiksi ihan pari viikkoa sitten Nebulan webhotellissa tehtiin ”päivityksiä” niin, että PHP ei toiminut ja PHP-koodit olivat netissä kaikkien näkyvillä. Sieltä näkyivät kätevästi tietokannan salasanat ym. Eli ei kannata ottaa turhia riskejä. Jos PHP-tiedostoon tallentaa salasanan, ainakin se PHP-tiedosto pitää tallentaa paikkaan, josta se ei vahingossakaan näy nettiin, ja liittää sitten muille sivuille require-komennolla.

PHP:ssä on ihan erityiset funktiot salasanojen käsittelyyn, ja niistä on tietoa oppaassa ja koodivinkissä.

E1ss [17.04.2017 17:33:02]

#

Kiitos neuvosta. :D Hauska uutinen.

The Alchemist [18.04.2017 09:32:23]

#

Palvelimen vääriltä konffeilta on oikeastaan mahdotonta suojautua. Vaikka passun laittaisi toiseen tiedostoon ja kyseisen tiedoston jonnekin muualle, niin mikään ei takaa, ettei se kuitenkin olisi virhetilanteen sattuessa kaikkien saatavilla. Salasanojen jakaminen osana ohjelmakoodia on kuitenkin niin tyhmää, ettei siihen pitäisi lähteä koskaan. Vaikka sen tekisi vain hetkellisesti, niin salasana voi kuitenkin tulla näkyviin esimerkiksi Git-repon historiassa, jos käyttää versionhallintaa. (Joskus voi devata privaattiin repoon ja myöhemmin päättääkin julkaista sen.)

dartvaneri [21.04.2017 21:03:55]

#

The Alchemist kirjoitti:

Salasanojen jakaminen osana ohjelmakoodia on kuitenkin niin tyhmää, ettei siihen pitäisi lähteä koskaan.

Varmaan kerrot myös, miten itse tekisit?

Metabolix [21.04.2017 22:17:57]

#

The Alchemist kirjoitti:

salasana voi kuitenkin tulla näkyviin esimerkiksi Git-repon historiassa

Voi konffitiedostonkin laittaa vahingossa Git-repoon, eli tyhmältä kehittäjältä ei suojaa mikään.

Tietokannan salasana on pakko johonkin tallentaa. Käyttäjän salasanan toki voi tallentaa sitten vaikka tietokantaan.

E1ss [28.04.2017 18:54:08]

#

Katsoin nyt nuo linkit ja huomasin että kaikissa oli salasanan tallentamisesta tietokantaan. Ongelmanani on kuitenkin se että joudun kirjoittamaan tietokannan salasanan koodiin. Voinko piiloittaa jotenkin tämän salasanan jotta kukaan ei pysty näkemään salasanaa ja pääsemään tekemään komentoja tietokantaani?

Metabolix [29.04.2017 11:03:03]

#

Kuten edellä jo todettiin, tietokannan salasana pitää vain tallentaa sellaiseen tiedostoon, joka mahdollisimman epätodennäköisesti joutuisi vahingossa mihinkään näkyville. Yleensä hyvä paikka on varsinaisten sivujen ulkopuolella, eli jos sivustosi pääsivu (https://example.com/) sijaitsee tiedostossa example.com/public/index.php, yleensä hyvä sijainti salasanalle on vaikka example.com/private/config.ini tai vastaava, siis jokin, jota ei pysty lataamaan selaimella.

E1ss [30.04.2017 18:49:07]

#

Mutta nyt en ymmärrä. Miksi salasana pitää piilottaa jonnekin piilossaolevaan koodiin koska eihän kukaan pysty päästä käsiksi public kansion alla olevaankaan koodiin siia mikäli hosti ei mokaa mitään. Ja jos hosti sattuisi tekemään virheen jonka takia kaikki koodit vuotaisi nettiin niin eikö silti myös privaten alla ollut koodi pääsisi rikollisten käsiin

Metabolix [30.04.2017 19:54:55]

#

E1ss kirjoitti:

eihän kukaan pysty päästä käsiksi public kansion alla olevaankaan koodiin siia mikäli hosti ei mokaa mitään.

Kuten jo kerroin, ihan äskettäin näin, kun ihan oikean webhotellin ylläpito mokasi sen asian.

E1ss kirjoitti:

Ja jos hosti sattuisi tekemään virheen jonka takia kaikki koodit vuotaisi nettiin niin eikö silti myös privaten alla ollut koodi pääsisi rikollisten käsiin

Riippuu ihan siitä, millä tavalla ylläpitäjä mokaa.

Jos esimerkiksi mokaa niin, että PHP-koodeja ei ajeta vaan koodit näytetään, moka näyttää vain julkisessa hakemistossa olevat koodit. Tällainen virhe voi tapahtua melko helposti. (Opettele ylläpitämään palvelinta, niin voit itse kokeilla.)

Sen sijaan nettiosoitteella ei voi mennä sivuston juurta ylemmäs (eli esim. http://example.com/../private ei toimi), joten siellä olevan koodin vuotaminen vaatisi ihan erilaista virhettä. Pitäisi esimerkiksi säätää palvelimella koko sivuston sijainti väärin tai lähettää vahingossa backup-tiedostot julkisesti jakoon tms.


Sivun alkuun

Vastaus

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

Tietoa sivustosta