Tajusin juuri suuren tietoturva-aukon sivussani.
Sivuni idea on hostata tekstiä sisältäviä tiedostoja. Sallitut päätteet ovat:
.txt, .php, .c, .cpp, .cs, .dll, .java, .pl, .py, .html, .css, .swf
Tajusin juuri kuinka paljon mahdollisuuksia annan ilkivallan tekijöille.
Hehän voivat vaikka tehdä koodin php:lla, joka poistaa kaikki sivun tiedostot :O. Mitään vinkkejä suojata sivua? (Älä oleta että tiedän valmiiksi joistain "safeguard your files"-komennoista.
Oletan, että sulla on joku uploadin salliva palvelu? Jos asia on näin, niin onko tarkoituksena sallia jotain kuvia ja tekstejä? Löysin googlella tälläisen linkin, jossa kohdassa Restrictions on Upload löytyy koodia, jolla voit asettaa tiedostoihin rajoituksia. http://www.w3schools.com/php/php_file_upload.asp
Mieti tarkkaan mitä tiedostomuotoja sallit sivuillesi uploadattavaksi. Myös php-tiedostot voivat olla vaarallisia. Niillä voi mm. ottaa serverin kokonaan haltuun jos olosuhteet ovat tarvittavan hyvät hakkerille.
Ehkä joku fiksumpi ja selvinpäin oleva kertoo sinulle enemmän mahdollisista ongelmista!
PS. Pakollinen Latenleffahyllypäivitys: Suomi hävis 4-1 voi hitsi ei!
Estät tuon .php päätteen, vai onko jokin tarkoitus tuon .php tiedoston sallimiseen?
Jos et tiedä miten se tapahtuu, heitä guugeliin 'file extension php'. Sieltä sitten se eka linkki, jossa kerrotaan pathinfo -funktiosta.
Mä en nyt ihan ymmärrä onko tarkoitus pystyä hostaamaan lähdekoodia (tyyliin paste bin) vai saada ajaakin niitä. Siis esim. .c ja .cpp tiedostojen "hostaaminen" tuntuu muussa tapauksessa aika erikoiselta.
Jos tarkoitus on vain antaa käyttäjien ladata tiedostoja tai katsoa tiedostojen sisältöä ilman, että niitä ajetaan palvelimella, niin sitten kannattanee laittaa ne hakemistoon, joka on konffattu olemaan ajamatta skriptejä tai sitten tarjoilla ne esim. erillisellä php-skriptillä.
W3Schoolsin esimerkit ovat (kuten yleensäkin) täyttä sontaa, kyseiseen sivustoon ei kannata linkittää. Jos tuollaiset perusasiat kiinnostavat, kannattaa lukea vaikka tämä koodivinkki. Tosin kumpikaan ei vastaa alkuperäiseen kysymykseen.
Jos haluat säilyttää tiedostoja turvallisesti, tallenna ne nimillä 1.dat, 2.dat ja niin edelleen, tallenna alkuperäiset nimet tietokantaan ja tee erillinen PHP-koodi, joka palauttaa käyttäjälle tiedoston tyypin, nimen ja sisällön. Jos tämä kuulostaa hankalalta, opettele ensin kunnolla PHP:tä ja tietokantojen käyttöä ja etsi sitten netistä lisätietoa hakusanoilla Content-Disposition ja readfile.
tmub kirjoitti:
Oletan, että sulla on joku uploadin salliva palvelu?
Siis järjestelmä ei ole Upload pohjainen, vaan kirjoitat tekstikenttään tiedoston nimen, valitset tulevan päätteen ja kirjoitat sisällön, ja PHP luo tiedoston palvelimelle.
Grez kirjoitti:
Siis esim. .c ja .cpp tiedostojen "hostaaminen" tuntuu muussa tapauksessa aika erikoiselta.
Okei, aika suuri osa noista päätteistä on aika turhia, ja niitä pitäisi varmaankin karsia, mutta tulihan niitä vaihtoehtoja kun wikipediasta listan katsoin.
--
Kommenttinne luettuani, taidan tulla siihen tulokseen, että karsin suurimman osan päätteistä pois turvallisuuden vuoksi, että jäljelle jäisi vain .txt.
Vai olisiko viellä riittävän turvallista jättää .html?
Tarkennan viellä, sivustosta tulee siis Paste Html-tyylinen.
Mod. lisäsi lainaustagit!
HTML-tiedostoihin voi kirjoittaa JavaScript-koodia, jolla voi esimerkiksi varastaa kävijän evästeet kyseiselle sivustolle tai ainakin esiintyä kyseisenä käyttäjänä sivustolla ja ainakin joissain selaimissa myös vakoilla leikepöydän sisältöä.
Toki voit jättää html -päätteen, jos estät sieltä tiedoston sisällöstä haitalliset tagit. Lähinnä <script>-tagit.
On totaalisen tyhmää tallentaa käyttäjien syötteitä todellisen tyyppisinä tiedostoina juuri tietoturvasyistä. Tallenna syötteet txt-tiedostoihin välittämättä syötteen todellisesta tyypistä. Sitten kun käyttäjä lataa jonkin tiedoston, niin voit kertoa sen tiedostonimen olevan ihan mitä tahansa. Tai pastebin-tyylisellä sivullahan ei ole tarkoitus ladata mitään vaan näyttää syötteet upotettuna nettisivulle, jolloin levylle tallennetulla formaatilla ei ole mitään väliä.
Metabolix kirjoitti:
HTML-tiedostoihin voi kirjoittaa JavaScript-koodia, jolla voi esimerkiksi varastaa kävijän evästeet kyseiselle sivustolle tai ainakin esiintyä kyseisenä käyttäjänä sivustolla ja ainakin joissain selaimissa myös vakoilla leikepöydän sisältöä.
Okei, kiitti.
Muuten, onko sitten mitään välkkyä, miten Paste Html on toteuttanut sivunsa? (Paste Html tallettaa koodisi .html-muotoon.)
Juuriko tuolla
Metabolix kirjoitti:
Jos haluat säilyttää tiedostoja turvallisesti, tallenna ne nimillä 1.dat, 2.dat ja niin edelleen, tallenna alkuperäiset nimet tietokantaan ja tee erillinen PHP-koodi, joka palauttaa käyttäjälle tiedoston tyypin, nimen ja sisällön. Jos tämä kuulostaa hankalalta, opettele ensin kunnolla PHP:tä ja tietokantojen käyttöä ja etsi sitten netistä lisätietoa hakusanoilla Content-Disposition ja readfile.
-tavalla?
Ihan uteliaisuudesta vain :).
EDIT: Kirjoitin kommentin ennenkuin The Alchemistin kommentti näkyi minulla.
Metabolix kirjoitti:
W3Schoolsin esimerkit ovat (kuten yleensäkin) täyttä sontaa, kyseiseen sivustoon ei kannata linkittää.
Olet oikeassa, olen pahoillani :(
PS. hienoja vinkkej äolet asaanut!
Sivuston voi suunnitella niin, että tietoturvalla ei ole merkitystä. Jos sivustolla ei ole mitään muita toimintoja kuin tiedostojen lähetys ilman rekisteröitymistä, ei tietenkään ole mitään käyttäjätietoja kaapattaviksi.
Leikepöydän vakoilu voi olla todellinen vaara, mutta hakkeri voisi tehdä sen omallakin sivustollaan, joten vaara on olemassa Paste HTML -sivustosta riippumatta. Käyttäjän pitää ymmärtää, että kun menee tuollaiselle sivulle, siellä voi olla mitä tahansa.
On olemassa myös sivustoja, joilla voi ajaa PHP-koodia; silloin tietenkin tarvitaan palvelinympäristö, jossa edes PHP-koodilla ei pysty aiheuttamaan harmia (eli samalla palvelimella ei ole esimerkiksi arvokkaita tiedostoja). Kuitenkin sellaisen rakentaminen vaatii syvällisempää ymmärrystä palvelimista, joten projekti on aloittelijalle vaikea ja vaarallinen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.