Hei!
Millä tavalla kannattaisi toteuttaa pienimuotoisen (alle sata käyttäjää) sivuston jäsenrekisteri? Sivulle olisi tarkoitus pystyä kirjautumaan sisään käyttäjätunnuksella (sähköpostiosoite) ja salasanalla. Mitään muita tietoja ei tarvitse tallentaa, vain ja ainoastaan nämä kaksi. Onko yksinkertainen tekstitiedosto tietoturvan kannalta - tai ihan yleensä - huono vaihtoehto? Pitäisikö harkita ihan oikeaa tietokantajärjestelmää?
Pitäisikö eri jäsenille näkyä eri tiedot siis?
Ei taida tietoturvallisesti olla eroa (korjatkaa viisaammat, jos näin on) tekstitiedoston ja tietokannan kanssa, kunhan muistaa että poistaa kuulumattomat merkit kaikista käyttäjän tekemistä syötteistä (esim. strip_tags()
ja htmlspecialchars()
). Jos et ole aikaisemmin käyttänyt mitään tietokantaa, niin joudut opettelemaan ne alusta asti. Oletko aiemmin työskennellyt php:n kanssa?
Kyllä, jäsenille pitäisi näkyä eri tiedot, ja sivuston pitäisi tietää, kuka on kirjautunut. PHP on tullut jo tutuksi, mutta tietokantojen parissa en ole viettänyt kovin paljoa aikaa.
Kyllä, tekstitiedosto on huonompi vaihtoehto ja suosittelen käyttämään tietokantaa. Tietokanta on helpompi ja nopeampi tapa päivittää tietoja ja näin saadaan myös tietoturvaa hieman enemmän (tietokannan avulla siis, ei nopeuden ja helppouden avulla). Tietokantaa kannattaisi kuitenkin hyödyntää mahdollisimman hyvin, sillä pelkkä sähköpostiosoite ja salasana ei tee tietokannasta Tietokantaa. Kannattaa esimerkiksi tallentaa edellinen sisäänkirjautumisaika, käyttäjäkohtaisia tietoja: sukupuoli, paikkakunta jne. Mikäli haluat nähdä ketä on online, pitää ainakin tällöin tallentaa edellinen kirjautumisaika.
Mutta mikäli et ole tietokantaa ennen käyttänyt, kannattaisi se opetella nopeasti hopi hopi... ;-)
Tietokantoihin kannattaa varmaan ainakin tutustua, koska tekstitiedostojen kanssa päädyt joko a) huonompaan tai b) korkeintaan yhtä hyvään toteutukseen tietokannan kanssa. Tosin vaikka saisit yhtä hyvän tehtyä tiedostoilla, niin oma projektisi ei ole vielä edistynyt pätkäkään.
Petja kirjoitti:
Tietokanta on helpompi ja nopeampi tapa päivittää tietoja ja näin saadaan myös tietoturvaa hieman enemmän.
Miten nopea päivitys parantaa tietoturvaa?
Petja kirjoitti:
Tietokantaa kannattaisi kuitenkin hyödyntää mahdollisimman hyvin, sillä pelkkä sähköpostiosoite ja salasana ei tee tietokannasta Tietokantaa.
Miksei tee tietokantaa?
Kirjoitin kyllä huonosti, mutta tiedät kuitenkin itsekin, että tietokannat ovat 1) nopeampia 2) helpompia 3) turvallisempia.
Tuolla, että pelkkä sähköposti ja salasana ei tee tietokannasta Tietokantaa, tarkoitin sitä, että kannattaa hyödyntää tietokantaa mahd. hyvin. Sillä jos kaikille käyttäjille pitäisi näkyä eri tietoja, en tiedä oikein mitään muutakaan paikkaa kuin tietokannan johon nuo tallentaman.
Ei rueta nyt hiuksia halkomaan.
Petja kirjoitti:
1)nopeampia
Mahdollisesti
Petja kirjoitti:
2) helpompia
Joo epäilemättä
Petja kirjoitti:
3) turvallisempia.
Jos toteutus on huono, ei tietokanta tee siitä yhtään turvallisempaa. Tälläkin keskustelupalstalla on ainakin muutama esimerkki huonosta toteutuksesta aiheutuneesta sivun tuhoutumisesta.
Teuro kirjoitti:
Petja kirjoitti:
3) turvallisempia
Jos toteutus on huono, ei tietokanta tee siitä yhtään turvallisempaa. Tälläkin keskustelupalstalla on ainakin muutama esimerkki huonosta toteutuksesta aiheutuneesta sivun tuhoutumisesta.
Ei tietenkään se yhtään se turvallisempi ole kuin tekstitiedostokaan, mikäli toteutusta ei tee hyvin. Lähtökohtana kuitenkin oli, että käyttäjä osaa käyttää tietokantoja.
Ei tekstitiedostokaan ole sen vaarallisempi kuin tietokanta – ja tässä taas on lähtökohtana, että tekijä osaa käyttää tekstitiedostoja.
Osaamattomien käsissä taas voisi veikata, että tietokannan tyhjentyminen aiheuttaa isomman huolen kuin tekstitiedoston. Tekstitiedoston käpistelijät kun yleensä käyttävät useita eri tekstitiedostoja viritelmiinsä, vaikka toisaalta... kyllähän Putkassakin on käynyt keskusteluissa ilmi, että saatetaan siellä tietokanta puolellakin käyttää useampaakin tietokantayhteyttä yhteen projektiin...
Burton kirjoitti:
Millä tavalla kannattaisi toteuttaa pienimuotoisen (alle sata käyttäjää) sivuston jäsenrekisteri? Sivulle olisi tarkoitus pystyä kirjautumaan sisään käyttäjätunnuksella (sähköpostiosoite) ja salasanalla. Mitään muita tietoja ei tarvitse tallentaa, vain ja ainoastaan nämä kaksi. Onko yksinkertainen tekstitiedosto tietoturvan kannalta - tai ihan yleensä - huono vaihtoehto? Pitäisikö harkita ihan oikeaa tietokantajärjestelmää?
Ei kai tässä ole mitenkään olennaista se, ovatko tiedot tekstitiedostossa, tietokannassa vai jossain muussa, vaan se, että tiedot ovat ulkopuolisilta suojattuja ja että salasanoilla on jonkinlaiset vahvuusvaatimukset.
En kyllä ymmärrä, miten kyseessä olisi jäsenrekisteri, jos mitään muuta ei tallenneta kuin sähköpostiosoite ja salasana. Mutta on ihan hyvä ja oikein, että muuta ei tallenneta, jos muuta ei tarvita.
Yksi ääni tietokannalle, koska se on ainakin allekirjoittaneesta käytännöllisempi ja pidempiaikainen ratkaisu tekstitiedostoon verrattuna. Tietokantaa on helpompi lähteä laajentamaan ja muuttamaan sivuston kehittymisen myötä -- eikä vain käyttäjärekisterille vaan itse sivuston tarpeille. Kokemuksesta voin sanoa, että muutokselle/kehitykselle on aina tarvetta.
Mutta toki, tietokantapuolella kannattaa pitää hyvää huolta tietoturvasta - sql injektiot ym. hakkerin kokoiset reiät hyvä pitää tukossa. En ole varma, mutta uskoisin, että tuossakin kokoluokassa tietokanta on notkeampi yhteen tekstitietokantaan verrattuna.
Hei,
Sinuna ylläpitäisin jäsenrerkisterin tietokannassa sen suoraviivaisuuden takia.
Muutama pointti:
A ja O - Tiedon turvallinen lisäys ja hakeminen kannasta. Validoi käyttäjän inputti hyvin ennen kuin ajat sql-kyselyitä.
"Petja kirjoitti:
pelkkä sähköpostiosoite ja salasana ei tee tietokannasta Tietokantaa
:(
S-posti ja salasana riittää vallan mainiosti, mutta muista yksilöidä käyttäjät erilliselllä kasvavalla id:llä ja vaikka status (0/1) kentällä. (esim. jos haluat hetkellisesti poistaa käytöstä henkilön tunnukset, poistamatta niitä kokonaan kannasta.). Lisäksi ehkä privs/koikeudet kenttä voi olla tarpeen kun jakelet oikeuksia sivuston eri osioihin. Salasanat kannattaa salata ainakin md5:lla.
Käyttäjän kirjautumisen jälkeen voit hallita kirjautunutta käyttäjää esim. $_SESSION - muuttujilla.
Yucca kirjoitti:
En kyllä ymmärrä, miten kyseessä olisi jäsenrekisteri, jos mitään muuta ei tallenneta kuin sähköpostiosoite ja salasana. Mutta on ihan hyvä ja oikein, että muuta ei tallenneta, jos muuta ei tarvita.
Tätä minä siis tarkoitin. Jottei nyt tullut mitään väärinkäsityksiä.
Yucca kirjoitti:
En kyllä ymmärrä, miten kyseessä olisi jäsenrekisteri, jos mitään muuta ei tallenneta kuin sähköpostiosoite ja salasana.
Petja kirjoitti:
Pelkkä sähköpostiosoite ja salasana ei tee tietokannasta Tietokantaa.
Oli pakko tarttua tähän vielä. <3
Miksi tietokannassa oleva tieto (sähköposti ja salasana) ei tekisi siittä tietokantaa tai jäsenrekisteriä? Onhan esim. tyhjä tietokanta kuitenkin tietokanta samalla tavalla kuin tyhjä tiedosto on tiedosto, kastelukannu ilman vettä on silti...
Vitsivitsi.
Jospa riittäisi jo tuosta tietokanta jutusta vääntö... jos keskityttäisi siihen alkuperäiseen kysymykseen eikä yksittäiseen vastaukseen.
qeijo kirjoitti:
Miksi tietokannassa oleva tieto (sähköposti ja salasana) ei tekisi siittä tietokantaa tai jäsenrekisteriä? Onhan esim. tyhjä tietokanta kuitenkin tietokanta samalla tavalla kuin tyhjä tiedosto on tiedosto, kastelukannu ilman vettä on silti...
Sellaiset tiedot eivät tee siitä jäsenrekisteriä, koska siinä ei ole tietoja, joilla jäsenet voidaan yksilöidä. Jos kyse on yhdistyksestä (ja normaalistihan jäsenrekisteri on nimenomaan yhdistyksen jäsenrekisteri), niin yhdistyslaki vaatii, että kustakin jäsenestä tulee olla ötäydellinen nimi ja kotipaikkaö. Käytännössä siihen lähes aina täytyy sisällyttää muutakin tietoa.
Voi tietysti olla, että kysyjä tarkoitti käyttäjätietokantaa. Mutta kuitenkin siis kirjoitti jäsenrekisteristä.
lainaus:
Vitsivitsi.
Huono vitsi ei yleensä parane tuollaisesta. Hyvä voisi huonontua.
Burton kirjoitti:
Hei!
Millä tavalla kannattaisi toteuttaa pienimuotoisen (alle sata käyttäjää) sivuston jäsenrekisteri?
Eiköhän tuosta jo kaikki tajunnu että kyseessä on 'vain' weppisivu, ei mikään virallinen yhdistys joka on sidottu yhdistyslakiin. "Jäsenrekisteri" on tässä tapauksessa yksinkertainen lista eli rekisteri, joka sisältää sivuston käyttäjät eli jäsenet.
Yucca kirjoitti:
Huono vitsi ei yleensä parane tuollaisesta. Hyvä voisi huonontua.
:(
Oma mielipiteeni on se mikä on ja pidättäydyn siinä.
On minullakin eräiden sivujen yhteydessä nk. "jäsenrekisteri". Sieltä löytyy vaikka mitä, ei pelkästään sähköpostiosoite ja salasana.
ID Käyttäjän yksilöllinen numero Aika Koska rekisteröityi lastlogin Viimeksi paikalla userid Nimimerkki password Salasana hashilla IMG Käyttäjän kuva Rooli Esim. ylläpitäjä email Sähköpostiosoite name Oikea nimi sex Sukupuoli omateksti Pitkä kuvaus itsestä Status Lyhyt kuvaus itsestä DOB Syntymäpäivä
sekä muutamia muita tietoja, esimerkiksi Facebookin yksilöllinen käyttäjä-ID, mikäli käyttäjä rekisteröityi Facebookia käyttäen.
Sinun mielipiteesi ei tehnyt mitään järkeä, koska käytit väärää sanaa. Tietokanta on tietokanta välittämättä siitä, mitä tietoja siellä on tai miten ne on järjestetty. Jäsenrekisteri taas ei tarkoita mitään teknistä toteutusta vaan jonkin yhteisön jäsenten tietojen keräämistä yhteen. Ja niin edelleen.
Teuro kirjoitti:
Petja kirjoitti:
3) turvallisempia.
Jos toteutus on huono, ei tietokanta tee siitä yhtään turvallisempaa.
Tietoturvassa on kuitenkin useita aspekteja. Hyökkäyskestävyyden osalta sanoisin, että huonosti tehty tietokanta on helposti turvattomampi kuin huonosti tehty tekstitiedosto. Tosin eipä tässä tarvitse kuin käsitellä syötteet, ja ollaan samalla tasolla ja silti työmäärä tietokantaa käyttävään koodiin on luultavasti ollut pienempi.
Sen sijaan jos mietitään tiedon eheyden säilymistä, niin tietokanta on varmasti parempi jos suunnilleen samasta työmäärästä puhutaan. Tämäkin on osa tietoturvaa.
Tietokannasta vielä, että sen turvallisuudeksi tässä tapauksessa - ainakin minusta - riittää mainiosti jonkin käyttäjän jo aiemmin mainitsemä käyttäjän syötteen tarkistaminen. preg_match on hyvä funktio, ja sillä voi estää helposti ainakin SQL-injektion.
// Sallitaan käyttäjänimessä vain aakkoset ja numerot // jos muita merkkejä löydetään keskeytetään toiminta. if(preg_match("/^[a-zA-Z0-9]+$/", $username)) die("Käyttäjänimessä killettyjä merkkejä.");
Mutta kannattaa oikeasti laittaa muutama auttava lisätieto käyttäjärekisteriin - ainakin se käyttäjätunnuksen on/off, jotta häiriköt saa tarvittaessa estettyä hetkellisesti.
Toki voithan käyttää aluksi tekstimuotoista tietokantaa, mikäli se tuntuu helpommalta ratkaisulta juuri nyt ja halutessasi vaihtaa sen myöhemmin tietokannaksi (ei ole ongelma). Mutta kunhan asiat tekee huolellisesti, en näe mitään syytä miksi kumpikaan olisi sen turvallisempi toiseen verrattuna.
Ole vain luova ja käytä niitä työkaluja, jotka tuntuvat hyvälle :) Mitään sellaista "et voi tehdä", mitä ei voisi myöhemmin muuttaa.
Ps. Älkää nyt enää halkoko niitä hiuksia vaan keskittykää kysyjän asiaan.
BC1 kirjoitti:
Tietokannasta vielä, että sen turvallisuudeksi tässä tapauksessa - ainakin minusta - riittää mainiosti jonkin käyttäjän jo aiemmin mainitsemä käyttäjän syötteen tarkistaminen. preg_match on hyvä funktio, ja sillä voi estää helposti ainakin SQL-injektion.
// Sallitaan käyttäjänimessä vain aakkoset ja numerot // jos muita merkkejä löydetään keskeytetään toiminta. if(preg_match("/^[a-zA-Z0-9]+$/", $username)) die("Käyttäjänimessä killettyjä merkkejä.");
Ei näin. SQL-kyselyihin käytetään mieluiten PDO:ta tai sitten datan kelvollisuus varmistetaan mysql_real_escape_string():llä. Regexejä käytetään vasta, kun halutaan tarkoituksellisesti pakottaa merkkijonot johonkin formaattiin, esimerkiksi käyttäjätunnuksista ylimääräiset peeloilut pois.
Aihe on jo aika vanha, joten et voi enää vastata siihen.