Onko mahdollista tunnistaa käyttäjä htaccesilla, ilman salasanojen ja käyttäjätunnusten antamista. Tiedän että on, mutta miten tämä tapahtuu dynaamisten IP-osoitteiden kanssa?
Tietoturvariskihän se olisi, jos tunnistettaisiin IP:n perusteella (kun dynaamisesta IP:stä on kyse). Voiko siis työaseman tunnistaa jotenkin muuten?
Ööh, käyttäjän tunnistaminen ilman käyttäjätunnusta tai salasanaa..
No, jonkinlainen security token esimerkiksi evästeessä tai esim. SSL Client certificate.
Itsekin mietin tuota evästeessä jonkunlaisen md5:n säilytystä. Tosin jos koneellani olisi jokin toinen käyttäjä, voisi hän selata evästeitä ja kirjoittaa ylös koodin ja lisätä omalle koneelleen, jolloin pääsisi selaamaan salattuja tiedostoja.
En rupea maksamaan sataa euroa SSL-varmenteen hankkimisesta. :)
Miksi sen pitäisi olla md5? Ja miksi SSL-varmenteen pitäisi maksaa 100 euroa?
Voi se yhtä hyvin olla vaikka sha1, mutta silti joku voisi kopioida sen ja lisätä omalle koneelleen.
SSL-varmenne maksaa 100 euroa vuodessa, ellen aivan erehdy. :/
SSL-varmenteita saa generoitua ihan ilmaiseksi omalla koneella. Rahaa pitää maksaa siitä, että joku luotettava taho allekirjoittaa sen, jotta kuka tahansa voi todeta, että varmenne on aito. Tässähän oli kuitenkin puhe nimenomaan asiakkaan varmenteesta, joten aitouden todisteeksi riittää, että avaimen toinen puolisko on tallennettu omalle palvelimellesi.
Minkä tahansa tunnistusvälineen voi varastaa, ellei sitä ole salasanalla suojattu. Myös SSL-varmenteen voi varastaa, tai sitten käyttäjä joutuu suojaamaan sen salasanalla, jolloin tilanne ei ole varsinaisesti muuttunut miksikään, koska käyttäjä joutuu yhä syöttämään salasanan kirjautuakseen.
Jos ajattelit saada tästä jonkin peruskäyttäjälle käsitettävän järjestelmän, SSL-varmenne HTTP:ssä on minun nähdäkseni sieltä vaikeimmasta päästä. Minulla ei ainakaan ole suoraan käsitystä, miten selaimeen asennettaisiin asiakkaan varmenne.
(Edit: muokkailtu kovasti.)
Metabolix, tipahdin nyt tuossa neljännellä rivillä kärryiltä. Eli siis...
(Edit 1: Eli siis tähän ei ole mitään ratkaisua?)
(Edit 2: Toisaalta voisi jokaisen kirjautumisen jälkeen generoida uuden hashin ja tallentaa kekseihin.)
Petja kirjoitti:
Voi se yhtä hyvin olla vaikka sha1, mutta silti joku voisi kopioida sen ja lisätä omalle koneelleen.
Niin, siis kysymykseni ei olennaisesti ollut, että miksi juuri md5-hash, vaan miksi hash ylipäätään.
Eli jos teet käyttäjälle tunnisteen, jolla se jatkossa tunnistetaan, niin mitä hyötyä saavutat sillä, että käytät jotain tiivistealgoritmia verrattuna ihan vaan satunnaismerkkijonoon? Jos teet tiivisteen jostain käyttäjän tiedoista, niin tämähän on tietoturvan kannalta huonompi kuin satunnaismerkkijono. Jos taas lasket tiivisteen satunnaismerkkijonosta, niin et saavuta mitään hyötyä, korkeintaan vähennät satunnaisuutta.
Jos nyt vielä syvemmälle menen tähän pointtiini, niin minusta oikea tapa suunnitella järjestelmiä ei ole lykätä vaan siihen kaikkea mahdollista mikä kuulostaa hienolta ilman, että niiden "hienojen" juttujen käyttäminen on oikeasti perusteltua. Eli jos jokainen suunnitteluvalinta on perusteltavissa, niin järjestelmästä tulee parempi ja helpompi ylläpitää sekä sisältää vähemmän WTF:iä. Lisäksi KISS on hyvä periaate.
Niinhän se taitaa olla (ei ymmärtänyt kaikkea).
Nyt kun aloitin tämän htaccessia koskevan threadin, kysynpä sitten tästä mod_rewritestä. Olen ymmärtänyt sen idean muuten ihan hyvin, mutta olisin toteuttamassa tiedostolataamispalvelua, joka on ongelma sinänsä, ettei tuo tunnu ymmärtävän tiedostomuodon ja -nimen välissä olevaa pistettä (.).
Käyttäjä syöttää osoiteriville:
...../zippi.zip
Todellisuudessa:
...../index.php?file=zippi&ext=zip
Miten laitan toimimaan?
Piste tarkoittaa säännöllisessä lausekkeessa mitä tahansa merkkiä, joten sinun pitää laittaa \.
tai [.]
, jos haluat nimenomaan pistemerkin.
Petja: Jos syöttäisit ?file=zippi.zip, eli ilman pätkäisemistä, voisit helposti vaikka explodella parsia tuosta $_GET['file'] haun arvosta tiedostopäätteen, vaikkapa
Enpäs nyt tiedä toimiiko tuo suoraan, mutta idea pitäisi näkyä :-)
Metabolix kirjoitti:
Piste tarkoittaa säännöllisessä lausekkeessa mitä tahansa merkkiä, joten sinun pitää laittaa
\.
tai[.]
, jos haluat nimenomaan pistemerkin.
Antaisitko tämän vielä kokonaisuudessaan?
Tämä ei toimi:
RewriteRule ^([^/\.]+)/?$[.]([^/\.]+) index.php?file=$1 [L]
$ tarkoittaa rivin (URL:än) lopetusta, joten sen pitää olla lopussa.
Ei toimi.
Näin ollessa:
RewriteRule ^([^/\.]+)/?[.]([^/\.]+)$ index.php?file=$1 [L]
Sivulle ilmestyy:
index
tai
Näin ollessa:
RewriteRule ^([^/\.]+)/?[.]([^/\.]+) index.php?file=$1$ [L]
Sivulle ilmestyy:
index$
Annatkos tuon aivan oikean muodon suoraan minulle, kiitos!
Lausekkeesi on ihan outo: miksi / ja miksi hakasuluissa \.? Entä tiedostot, joiden nimessä on monta pistettä, kuten nyt tyypillisen Windows-käyttäjän luoma "valokuva 1.2.2011.jpg"? (Entä päätteettömät tiedostot?)
Toinen ongelma on, että nyt palvelin ohjaa osoitteesta juttu.zip
ensin sivulle index.php?file=juttu
(eli periaatteessa ihan oikein, koska et ole tiedostopäätettä edes käsitellyt) ja tästä edelleen sivulle index.php?file=index
, koska myös uusi osoite ajetaan korvauksen läpi.
En käytä Apachea, mutta kokeile näin:
RewriteRule ^file/([^/]+)[.]([^/]+)$ index.php?file=$1&ext=$2
Nyt osoitteen file/a.b.c.d
pitäisi muuttua osoitteeksi index.php?file=a.b.c&ext=d
.
Kiitos, toimii.
(Edit: Saisiko tuon file/
pois siten, että muoto on osoite.fi/zippi.zip
. Jos poistaa file/
sivua ei löydy ja jos jättää siihen vain /
käy samoin.)
Selitin juuri, miksei sitä voi vain suoraan poistaa (tai siis miksi ohjaus ei suoraan toimi ilman sitä). Oliko selityksessä jokin epäselvyys, vai etkö vain ymmärtänyt, että selitys koskee ihan yhtä lailla minun versiotani kuin sinunkin?
Voit korjata asian lisäämällä juuri ennen RewriteRule-riviä jonkin sopivan ehdon. Esimerkiksi seuraavalla ehdolla saat ohjauksen tapahtumaan vain, jos pyydettyä tiedostoa ei ole olemassa:
RewriteCond %{REQUEST_FILENAME} !-f
Minusta olisi kuitenkin käytännöllisempää pitää tiedostot näennäisesti omassa hakemistossaan. Tuolla haluamallasi ratkaisutavalla et voi luoda päähakemistoon uusia tiedostoja, koska ne kaikki ohjautuvat index.php:hen.
Kristallipalloni kertoo, että tarkastat tiedostoformaatin pelkän tiedostopäätteen perusteella. Ei hyvä.
Syystä että?
Tiedostopääte ei kerro mitään tiedoston todellisesta sisällöstä. Ainoa luotettava tapa tunnistaa tiedoston tyyppi on tarkistaa sen sisältö jotenkin. Toisaalta jos olet itse huolehtinut jo tallennusvaiheessa, että .zip on todella .zip, ei pitäisi olla mitään hätää.
Aihe on jo aika vanha, joten et voi enää vastata siihen.