Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Xml yhteensopiva salaus

Sivun loppuun

pistemies [01.02.2012 15:24:25]

#

Mikä olisi suositeltava salaustapa, joka salaa siten että salattu stringi on xml-kelpoista dataa? En etsi pelkkää md5:tä tai binhexiä, pitää pystyä purkamaan salaus.

Metabolix [01.02.2012 15:57:50]

#

Salaa erikseen ja muuta sitten XML-kelpoiseksi vaikka base64_encodella.

pistemies [01.02.2012 16:27:10]

#

Metabolix kirjoitti:

Salaa erikseen ja muuta sitten XML-kelpoiseksi vaikka base64_encodella.

Kiitos! Tuo toimii tähän tarkoitukseen hyvin.

Lebe80 [01.02.2012 21:43:29]

#

Mihin tulossa? Eli olisiko mahdollista tarjoilla xml-tiedostoa vain kirjautuneille?

pistemies [02.02.2012 11:24:47]

#

Lebe80 kirjoitti:

Mihin tulossa? Eli olisiko mahdollista tarjoilla xml-tiedostoa vain kirjautuneille?

On jo tullut. Tekemässäni xml-foorumissa on tosin kirjautumissysteemi ja lisäksi xml-tiedostot sijaitsee .htaccess suojatussa hakemistossa, mutta minusta on parempi salata tiedot, jotka ei kuulu muille.
Minulla on työn alla nyt vieraskirja, jossa ei ole kirjautumista, laitan siihenkin joidenkin tietojen salauksen. Varsinkin niiden, jotka ei ole vapaasti luettavissa vieraskirjan sivuilta, kuten ip ja sähköposti.

Lebe80 [02.02.2012 16:24:01]

#

Mä taas pistäisin tiedot rivitietona tietokantaan, josta tulostettaisiin näkyville vain ne rivit, joihin on "pääsy".

pistemies [02.02.2012 21:09:46]

#

Lebe80 kirjoitti:

Mä taas pistäisin tiedot rivitietona tietokantaan, josta tulostettaisiin näkyville vain ne rivit, joihin on "pääsy".

Käsität väärin. Noin minäkin olen tehnyt saman foorumin mysql-versioon. Mutta minusta on suuri virhe luottaa siihen, että kun on käytössä mysql-tunnukset niin sinne meneviä tietoja ei tarvitse mitenkään salata. Pitäisi olla tuoreessa muistissa muutaman kuukauden takaiset tietomurrot Suomessa. Ongelmia tuli nimenomaan tuollaisen puutteellisen salaussysteemin vuoksi, samoin muutama vuosi sitten tapahtunut murto suomi24:n käyttäjä-tietokantaan.

Nämä minun xml-hommat ovat tekemieni ohjelmien xml-versioita.

Metabolix [02.02.2012 21:48:17]

#

pistemies kirjoitti:

Pitäisi olla tuoreessa muistissa muutaman kuukauden takaiset tietomurrot Suomessa. Ongelmia tuli nimenomaan tuollaisen puutteellisen salaussysteemin vuoksi,

Pitäisi myös ymmärtää vähän perusasioita, ennen kuin menee tuollaista väittämään. Tietomurroissa suurin vika ei ollut siinä, miten tiedot oli tietokantaan tallennettu. Suurin vika oli, että joku asiaton edes pääsi tietokantaan. Jos tietokantaa käsitellään oikein ja turvallisesti, sen tiedot ovat turvassa eikä niitä tarvitse millään tavalla salata. Optimitilanteessa jopa salasanojen suolaus on tarpeetonta, mutta toki niiden kohdalla on perusteltua noudattaa tiettyä varovaisuutta.

Lebe80 [02.02.2012 23:39:10]

#

Pistemies: ymmärrän kyllä sen, että jos sun "koko tietokanta" on satunnaisen käyttäjän saatavilla, niin se onkin typerää että se on selkokielisenä... mutta sitä en ymmärrä miksi koko tietokanta edes on satunnaisen käyttäjän saatavilla... uskon enemmänkin, että sinulla on ihan perustavaa laatua oleva suunnitteluvirhe "xml-hommassasi" jos tarjoilet koko tiedostoa kaikille.

Jos taas tarvitset datan xml-muodossa esim. erilliselle skriptille, niin eikö data voi edelleenkin olla rivitietona tietokannassa, josta se tarjoillaan ilman ylimääräisiä rivejä vaikka sitten php-tulkin kautta xml-muotoon (esim. Käyttäjä A:lle tulostuu vain hänelle sallitut rivit).

Ja muista valita "hommiisi" oikeat työkalut ettet ala keksimään pyörää uudelleen ja menemään sillä perse edellä puuhun... Pitäisi olla tuoreessa muistissa muutaman kuukauden takaiset tietomurrot Suomessa. ;)

Eli kuten tuossa ylläkin vihjailtiin, niin tietokannasta murtamiseen tarvitaan tietokannan tunnarit ja salasana. Jos taas itse sovelluksessa on hakkerin mentävä aukko, niin ei siinä enää auta sovelluksessa oleva automaattisesti purkautuva salaus.

Myös koko tiedoston salaamisella onnistut pahimmassa tapauksessa korruptoimaan koko "tietokannan", kun se ei jonkin epäkelvon merkin ansiosta käännykkään selkokieliseen muotoon.

pistemies [03.02.2012 11:30:29]

#

Kiitos mielenkiintoisista kommenteista.
Minulla palvelimella on vahva salasana ja lisäksi salasanat sijaitsee hakemistossa, jonka salasanaa en tiedä edes minä (loin sen cpanel-generaattorilla).

Lebe80: En salaa koko tiedostoa, vain xml-tagien välissä olevan datan "selkokielisenä" eli muutan salauksen yllä mainitulla base64_encodella.

qeijo: En oikein ole varma, mitä tarkoitit tuolla loppuhuomautuksella. Tarkoititko xml-tiedoston ominaisuuksia vai yleensä tiedostoon tallennettavan datan salaamista.

Mitä taas tulee tuohon xml-tiedoston käyttämiseen tavallisen txt-tiedoston sijasta, niin kyllä sen saa minulta täydet pisteet 10-0. Sen verran selkeämpää on php-skripti jota kirjoitetaan.
Otetaan pieni esimerkki:

<?php
    $vk = $xml->GetXMLTree($tiedosto);
    $viestit = $vk["VIERASKIRJA"][0]["VIESTI"];
    $viestit = array_reverse($viestit);

   # ---------
   # väliin halutut html-muotoilut

   for($i=0;$i<count($viestit);$i++){

        echo $viestit[$i]["KIRJOITTAJA"][0]["value"];

       # väliin halutut html-muotoilut

       echo $viestit[$i]["PVM"][0]["value"];

      # väliin halutut html-muotoilut

      echo replace($viestit[$i]["DATA"][0]["value"]);

      # jne.
     /* paljon selkeämpää kuin
        epämääräisten solunumeroiden käyttäminen tulostessa */
 }
?>

Ps. Kun on kyse tällaisista ohjelmista, jotka menee yleiseen jakeluun, hakemistojen ja mysql-yhteyksien salaus ei ole enää kiinni minusta.

Macro [03.02.2012 13:39:18]

#

Jos tuo koodinpätkä kuvastaa oikeaa koodiasi, niin onkohan taulukoissa jokin pahempikin suunnitteluvirhe?

Olettaen, että $viestit[$i] on yksi viesti, niin et kai ole laittanut kirjoittajaa paikkaan $viestit[$i]["kirjoittaja"][0]["value"]? Ehkä $viesti[$i]["kirjoittaja"] olisi huomattavasti selkeämpi ja helpompi.

array (
   0 => array(
      pvm => array(
         0 => array(
            value => ...
         )
      ),
      kirjoittaja => array(
         0 => array(
            value => ...
         )
      )
   )
)

vs.

array (
   0 => array(
      pvm => ...,
      kirjoittaja => ...
   )
)

pistemies [03.02.2012 14:01:08]

#

Tässä on taulukkoni rakenne xml-tiedostosta, joka poimitaan jokaiseen viestiin (lukuunottamatta tuota ympäröivää "containerin" korviketta).

<vieraskirja>
<viesti>
<kirjoittaja></kirjoittaja>
<pvm></pvm>
<teema></teema>
<data smallImage=""></data>
<vastaus></vastaus>
<url></url>
<addr></addr>
</viesti>
</vieraskirja>

Kuten huomaat, siihen on myös lisätty atribuutti data-tagiin. Ja vaikka en olisi tuota siihen lisännytkään, en olisi ruvennut sen takia muokkaamaan ja "rikkomaan" ParseXml-luokkaa.
Tämän ParseXml-luokan olen netistä löytänyt ja olen sitä muokannut sen verran, että sille voi xml-tiedostonimen sijasta syöttää myös pelkkää xml-dataa.

ZeroGravity [03.02.2012 14:07:42]

#

Metabolix kirjoitti:

Optimitilanteessa jopa salasanojen suolaus on tarpeetonta, mutta toki niiden kohdalla on perusteltua noudattaa tiettyä varovaisuutta.

Offtopic... mutta mitä on salasanojen suolaus?

tsuriga [03.02.2012 14:17:55]

#

Helpottais varmaan huomattavasti kertoa myös tässä keskustelussa, että olet tekemässä foorumisoftaa niille, joilla ei ole käytettävissään tietokantaa (tai PHP 5).

Macro kirjoitti:

onkohan taulukoissa jokin pahempikin suunnitteluvirhe?

Huomaa, että taulukko luetaan XML-metodeilla, ts. nollaindeksit ovat siellä tallennusformaatin takia.

pistemies kirjoitti:

Lebe80: En salaa koko tiedostoa, vain xml-tagien välissä olevan datan

Eiköhän Lebe80 kyseenalaistanut juurikin tämän. Komppaan kaikkia, salaa pelkästään ne tiedot, jotka eivät muutenkaan näy muille käyttäjille, kuten salasana ja mahdollisesti se sähköpostiosoite (näitähän niissä viime aikojen tietomurroissa sitten leviteltiin). Salasanasta kannattaa joko laskea tiiviste, tai sisällyttää salasana osaksi salausavainta, jotta kukaan muu kuin käyttäjä itse ei pääse salasanaan käsiksi vaikka joku pääsisikin lukemaan tietokantaa vapaasti.

Kaiken datan salauksella ei saavuteta lisäturvaa, kun tiedot ovat kuitenkin saatavilla sivuston käyttöliittymän kautta. Salaus vie palvelimelta resursseja niin tilan (sekä kryptaus että base64-muotoon muuttaminen lisäävät tekstin pituutta melkoisesti) kuin prosessoinninkin osalta. Veikkaisin, että lisäresurssivaatimukset saattavat jopa tuottaa softassasi oikeita ongelmia. Kaiken tämän lisäksi käytät erittäin verboosia tallennusmuotoa.

ZeroGravity kirjoitti:

mitä on salasanojen suolaus?

Merkkijonon lisäys salasanaan ennen siitä tiivisteen laskemista tai sen kryptaamista, auttaa ennalta laskettuja sateenkaaritauluja vastaan. Kts. seuraavat

ZeroGravity [03.02.2012 14:31:43]

#

tsuriga kirjoitti:

ZeroGravity kirjoitti:

mitä on salasanojen suolaus?

Merkkijonon lisäys salasanaan ennen siitä tiivisteen laskemista tai sen kryptaamista, auttaa ennalta laskettuja sateenkaaritauluja vastaan brute-force hyökkäyksissä.

Niin kyllähän minä tiivisteen laskemisen ja siihen suolan lisäämisen tiedän ... mutta noh... ei mitään :)

tsuriga [03.02.2012 14:56:06]

#

Ei sitä suolaa siihen tiivisteeseen lisätä (tai miksei sen nyt siihenkin voi laittaa), vaan kuten Metabolix sanoi, salasanaan. Englanniksi taidetaan sanoa salted password.

Lebe80 [03.02.2012 15:02:31]

#

pistemies: miksi sitten tiedostomuoto xml? Mikset samalla serialisoinut taulukkodataa?

pistemies [03.02.2012 16:33:42]

#

Lebe80 kirjoitti:

pistemies: miksi sitten tiedostomuoto xml? Mikset samalla serialisoinut taulukkodataa?

Ihan tuon homman helppouden vuoksi tuli idea laittaa xml-hommana, kun on valmis luokka. Ja olihan siinä jotain motivaatiota tehdä sellaista mitä en ennen ollut ennen vielä tehnyt. Nimittäin käyttää xml-tiedostoja tällä tavoin.

Tarkoititko serialize-funktion käyttöä vai jotain "omaa systeemiä"?

Ehkä noille txt-tiedostoillekin voisi kehittää jonkin näppärän ParseTxt luokan skriptejä yksinkertaistamaan :)

Metabolix [03.02.2012 16:41:27]

#

pistemies kirjoitti:

Ihan tuon homman helppouden vuoksi tuli idea laittaa xml-hommana, kun on valmis luokka.

Eikö se serialize-funktio ole tuhannesti helpompi?

pistemies [03.02.2012 21:18:25]

#

Metabolix kirjoitti:

Eikö se serialize-funktio ole tuhannesti helpompi?

En nyt ihan noin kauhean suurta eroa näille tekisi. Tutkin hiukan tuota serialisointia, on se tietysti jonkin verran "helpompaa".
Mutta ei tämä xml-juttukaan niin kamala ole. Ehkä siinä voisi tulla haasteeksi, miten muuttaa php:n xml-array takaisin xml-dataksi, kun tiedostoa muokataan. Olen sitä asiaa helpottanut sen verran, että se onnistuu näin lyhyellä skriptillä:

<?php

  $xml_data = $xml->Back($array);

?>

Tuota ennen arrayhyn tehdään normaalit päivitykset uuden viestin (vieraskirjassa viestit on samassa tiedostossa, foorumissa data kootaan eri tiedostoista) tai adminin muokkauksen seurauksena.

tsuriga [03.02.2012 21:29:39]

#

XML:n etuja ovat toki se, että foorumi voidaan tarvittaessa renderöidä suoraan halutun näköiseksi helposti CSS:ää tai XSL:ää käyttäen, sekä se, että data kuvaa itse sisältönsä, ts. on semanttista.

Metabolix [03.02.2012 21:50:40]

#

tsuriga kirjoitti:

XML:n etuja ovat toki se, että foorumi voidaan tarvittaessa renderöidä suoraan halutun näköiseksi helposti CSS:ää tai XSL:ää käyttäen

Tuo nyt on hyvin teoreettinen etu, jos koko foorumin kaikki tuhannet viestit on tungettu yhteen tiedostoon.

tsuriga kirjoitti:

sekä se, että data kuvaa itse sisältönsä, ts. on semanttista.

Melkeinpä mikä tahansa taulukko ajaa tässä saman asian, kun data koostuu yksinkertaisista, keskenään samanlaisista tietueista.

pistemies kirjoitti:

En nyt ihan noin kauhean suurta eroa näille tekisi. – – Olen sitä asiaa helpottanut – –

Tietenkin XML-luokkaa on kohtalaisen helppo käyttää sitten, kun siihen on tehty tarvittavat apufunktiot, mutta valmiilla serialize- ja unserialize-funktioilla olisi säästynyt sekin aika ja vaiva. Lisäksi valmiit funktiot luultavasti toimivat nopeammin ja varmemmin, ja PHP:n puolella dataa on helpompi käyttää, kun päästään tuohon Macron esittämään rakenteeseen.

tsuriga [03.02.2012 22:20:36]

#

Metabolix kirjoitti:

Tuo nyt on hyvin teoreettinen etu, jos koko foorumin kaikki tuhannet viestit on tungettu yhteen tiedostoon.

pistemies kirjoitti:

foorumissa data kootaan eri tiedostoista

Metabolix kirjoitti:

Melkeinpä mikä tahansa taulukko ajaa tässä saman asian, kun data koostuu yksinkertaisista, keskenään samanlaisista tietueista.

Silloin kun tietueilla on myös selkokieliset avaimet, ts. tieto on indeksoitua, niin kyllä. Puhuin XML:n eduista yleisellä tasolla, ja mikäli kävisikin, että tietoa halutaan siirtää toiseen ohjelmaan, XML on useissa kielissä suoraan tuettu formaatti. XML:llä saavutetaan myös monia muita etuja dokumentoinnin ja validoinnin saralla, joista muistelisin taannoin johonkin keskusteluun kirjoittaneeni.

Yksin PHP:n puolella – eritoten jos lähdetään kikkailemaan kryptauksien ja base64-koodauksien kanssa – on toki nopeampaa käyttää yksinkertaistettua muotoa datan tallennukseen. Toteutuksen mielekkyys riippuu siitä, muistaako tosiaan dokumentoida tuotokset.

En nyt siis sano, että XML olisi tässä paras ratkaisu, mutta ei se nyt ihan huonokaan välttämättä ole.

pistemies [04.02.2012 10:02:18]

#

Metabolix kirjoitti:

Tietenkin XML-luokkaa on kohtalaisen helppo käyttää sitten, kun siihen on tehty tarvittavat apufunktiot, mutta valmiilla serialize- ja unserialize-funktioilla olisi säästynyt sekin aika ja vaiva.

Empä usko, että se aika ja vaiva, mikä tuohon on mennyt, on niin suuri, ettei siihen voi aikaa käyttää. Varsinkin, kun siitä jatkossa on hyötyä kaikissa muissakin tapauksissa, kun jotakin xml-tiedostoa tarvitsee php:lla muokata.
Sen verran tein muutoksia, että yhdistin nuo tekemäni xml-back metodin ParseXml-luokkaan (aiemmin se oli oma luokkansa) niin helpottaa taas "hiukan" lisää.

Ps. Taidan jossakin vaiheessa lisätä siihen vielä jonkin XmlForm-metodin, johon "automaattisesti" tulostetaan avatun xml-tiedoston muutos-lomake. Se ei tietenkään ole kovin käytänöllinen hyvin suurille xml-tiedostoille mutta "normaali"-tiedostoilla siitäkin on hyötyä.

pistemies [06.02.2012 11:17:13]

#

Metabolix kirjoitti:

jos koko foorumin kaikki tuhannet viestit on tungettu yhteen tiedostoon.

Kiitos ajatuksesta. Tuosta sain yhden idean.
Vaikka minulla meneekin foorumissa kaikki eri tiedostoihin, niin tähän kannattaa soveltaa samaa periaatetta kuin tulostettaessa mysql-tietokannasta.
Ei kannata turhan takia php-arrayn, josta tulostetaan sivulle, olla mahdottoman pitkä. Eli suunnittelen tähän sellaista systeemiä, että kun on kyse keskustelu-ketjun otsikko-listasta, niin php-arrayhyn poimitaan vain ne otsikot, jotka tulostetaan yhdellä sivulla (esim. 25 kpl).
Tällä hetellä minulla on siten, että poimitaan arrayhyn tiedostonimet ja yhdistetään kaikkien tiedostojen data. Siihen suunnittelen systeemiä, joka poimii vain niiden tiedostojen datan, jotka sijaitsee tietyssä kohtaa tuota tiedotonimi-arrayta, esim. sivu 1 poimisi tulostettavaksi tiedostot arvoista 0-24, sivu 2 arvoista 25-49 jne.


Sivun alkuun

Vastaus

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

Tietoa sivustosta