Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Textarea tallennus (PHP)

Sivun loppuun

ankzilla [01.01.2009 18:49:50]

#

Oisin mä varmaan Googlettamalla löytäny, jos olisin osannu hakea oikealla hakusanalla. ;D

Mut millä koodilla PHP:llä saa semmosen, että kun textareaan kiroittaa tekstiä, submit-nappulan jälkeen se tallentaa sen siihen?
Ja sitten sitä samaa tekstiä voi tietysti myöhemmin muokkailla.

Että se siis tallentuisi vaan siihen.
Koittakaa ymmärtää mitä ajan takaa. :P

Antti Laaksonen [01.01.2009 19:02:45]

#

Tässä on yksi esimerkki (viesti.php), jossa viesti tallennetaan tiedostoon (viesti.txt).

<?php
if (isset($_POST["viesti"])) {
    $tied = fopen("viesti.txt", "w");
    fwrite($tied, $_POST["viesti"]);
    fclose($tied);
}
$viesti = @file_get_contents("viesti.txt");
?>
<form action="viesti.php" method="post">
<textarea name="viesti" rows="10" cols="50">
<?php echo htmlspecialchars($viesti); ?>
</textarea>
<br><input type="submit" value="Tallenna">
</form>

ankzilla [01.01.2009 19:10:21]

#

Mutta onko sellainen mahdollista, että viestiä ei tallennettaisi erilliseen tiedostoon, vaan että se pysyisi yhdessä textareassa?

Kato ku tarkotus ois sitte et se textarea includetettais erilliselle sivulle. ^^

Edit: Kiitos kuitenkin.

Antti Laaksonen [01.01.2009 19:26:30]

#

Voisitko kertoa tarkemmin, mitä olet tekemässä?

Pitääkö tekstin pysyä tallessa, jos selaimen sulkee ja avaa uudestaan? Pitääkö saman tekstin näkyä monelle käyttäjälle? Molemmissa tapauksissa teksti täytyy tallentaa jotenkin (tiedostoon, tietokantaan).

ankzilla [01.01.2009 19:30:24]

#

Antti Laaksonen kirjoitti:

Voisitko kertoa tarkemmin, mitä olet tekemässä?

Pitääkö tekstin pysyä tallessa, jos selaimen sulkee ja avaa uudestaan? Pitääkö saman tekstin näkyä monelle käyttäjälle? Molemmissa tapauksissa teksti täytyy tallentaa jotenkin (tiedostoon, tietokantaan).

Tekstin pitää näkyä monelle käyttäjälle,
eli pitää myös näkyä selaimen sulkemisen jälkeen.
Olen tekemässä uutisjärjestelmää, että vanhoja uutisia olisi myös helppo poistaa.
Eli se tiedostoontallennus on välttämätön?

Antti Laaksonen [01.01.2009 19:50:51]

#

Uutiset täytyy tallentaa tiedostoon tai tietokantaan.

Katsopa tätäkin tiedostoa:
https://www.ohjelmointiputka.net/uutiset.dat

ankzilla [01.01.2009 19:54:16]

#

Antti Laaksonen kirjoitti:

Uutiset täytyy tallentaa tiedostoon tai tietokantaan.

Katsopa tätäkin tiedostoa:
https://www.ohjelmointiputka.net/uutiset.dat

Kato ku aattelin että yhtä textarean sisältöä vois muuttaa aina submit-nappulaa painamalla. Oon muistaakseni nähny sellasen jossai.

Newb [01.01.2009 19:56:27]

#

ankzilla kirjoitti:

Antti Laaksonen kirjoitti:

Uutiset täytyy tallentaa tiedostoon tai tietokantaan.

Katsopa tätäkin tiedostoa:
https://www.ohjelmointiputka.net/uutiset.dat

Kato ku aattelin että yhtä textarean sisältöä vois muuttaa aina submit-nappulaa painamalla. Oon muistaakseni nähny sellasen jossai.

Tallennat sen textarean sisällön tekstitiedostoon, kun painaa submit-nappulaa, ja sivun latauduttua lataat siitä tekstitiedostosta sisällön textareaan.

ankzilla [01.01.2009 21:47:52]

#

Newb kirjoitti:

ankzilla kirjoitti:

Antti Laaksonen kirjoitti:

Uutiset täytyy tallentaa tiedostoon tai tietokantaan.

Katsopa tätäkin tiedostoa:
https://www.ohjelmointiputka.net/uutiset.dat

Kato ku aattelin että yhtä textarean sisältöä vois muuttaa aina submit-nappulaa painamalla. Oon muistaakseni nähny sellasen jossai.

Tallennat sen textarean sisällön tekstitiedostoon, kun painaa submit-nappulaa, ja sivun latauduttua lataat siitä tekstitiedostosta sisällön textareaan.

Rakastan sua <33

Miten mä en tota ite hokannu... :P

Edit: Oih, kattokaas: http://ankzilla.com/php/uutiset/index.php
Salasana on grzn

Marbo [02.01.2009 08:36:13]

#

ankzilla kirjoitti:

Edit: Oih, kattokaas: http://ankzilla.com/php/uutiset/index.php
Salasana on grzn

Eipä mee muuten sisälle? Oot vissii si vaihtanu passun?

ankzilla [02.01.2009 15:26:22]

#

Marbo kirjoitti:

ankzilla kirjoitti:

Edit: Oih, kattokaas: http://ankzilla.com/php/uutiset/index.php
Salasana on grzn

Eipä mee muuten sisälle? Oot vissii si vaihtanu passun?

Niin joo oon. :D Toi mahollisuus oli teille avoinna parin minuutin ajan :D

Lebe80 [02.01.2009 15:34:16]

#

Osoite olisi varmaan kannattanut sitten muokata aikarajan jälkeen pois...

ankzilla [02.01.2009 16:18:29]

#

Lebe80 kirjoitti:

Osoite olisi varmaan kannattanut sitten muokata aikarajan jälkeen pois...

No jos noin hiostaa, niin salasana on tällä hetkellä: hehe

Grez [02.01.2009 16:24:13]

#

Tuskin ketään hiostaa, mutta onhan se kohteliasta muita käyttäjiä kohtaan olla jättämättä kuolleita linkkejä.

ankzilla [02.01.2009 17:50:16]

#

Grez kirjoitti:

Tuskin ketään hiostaa, mutta onhan se kohteliasta muita käyttäjiä kohtaan olla jättämättä kuolleita linkkejä.

Ku en arvannu et mun amatööriskriptit kiinnostais muita ku Marboa. :)

Edit: Kerokaas mitä erikoista on .dat -päätteessä?

Marbo [02.01.2009 18:49:12]

#

ankzilla kirjoitti:

Grez kirjoitti:

Tuskin ketään hiostaa, mutta onhan se kohteliasta muita käyttäjiä kohtaan olla jättämättä kuolleita linkkejä.

Ku en arvannu et mun amatööriskriptit kiinnostais muita ku Marboa. :)

Edit: Kerokaas mitä erikoista on .dat -päätteessä?

No oha se nyt mukava kattoo mitä sait aikaa ku ekaks et ees tienny miten tekisit yms..

Eipä toimi taaskaa tuo salasana. Eli linkin voi poistaa.

Triton [02.01.2009 19:12:38]

#

ankzilla kirjoitti:

Edit: Kerokaas mitä erikoista on .dat -päätteessä?

Toi .dat-pääte merkitsee eri yhteydessä eri asiaa, esim. videopuolella se on joku aputiedosto, äänipuolella taas kysymyksessä on digital audio tape eli tallennusmedia... Mutta tietääkseni sitä käytetään myös ihan datan tallentamiseen (kuten tekstin). En sitten tiedä, että käytetäänkö sitä txt-tiedostojen sijasta ihan vain sen nimen
kuvaavuuden takia...

Jos olen väärässä, niin oikaiskaa...:)

Blaze [02.01.2009 19:25:29]

#

ankzilla kirjoitti:

Edit: Kerokaas mitä erikoista on .dat -päätteessä?

Ei mitään.

Sitä kai käytetään usein kun halutaan tallentaa jotain epämäärästä dataa.

ankzilla [02.01.2009 21:38:32]

#

Mites näitä triidejä poistetaan?

Triton [02.01.2009 22:04:16]

#

ankzilla kirjoitti:

Mites näitä triidejä poistetaan?

Eli jos sulla yksi uutinen per rivi, niin poistat vaan sen rivin...Tein joskus tälläsen funktion, jolla voi muokata riviä, niin tätä voi varmaan soveltaa sun ongelmaas:

<?php
        //$file_path = tiedoston_osoite, $row = rivin_numero ja
        //$replace_text = korvattava_teksti
        function file_row_replace($file_path,$row,$replace_text) {

			$file = file($file_path);
			//Otetaan tiedoston rivit talteen korvattavaan riviin asti
			for ($i = -1; $i < $row-1; $i++) {
				$tmp[$i+1] = trim($file[$i+1]);
			}
			//Tallennetaan korvattava rivi
			$tmp[$row] = $replace_text;
			//Otetaan tiedoston rivit talteen, jotka tulevat korvattavan rivin jälkeen
			for ($i = $row+1; $i < count($file); $i++) {
				$tmp[$i] = trim($file[$i]);
			}
			//Päivitetään tiedoston rivit
			$file = fopen($file_path,"w");
				for ($i = 0; $i < count($tmp); $i++) {
					fwrite($file,"$tmp[$i]\n");
				}
			fclose($file);
		}

?>

Varmasti on järkevämpiäkin tapoja...

ankzilla [02.01.2009 22:30:04]

#

Naurahdin hieman väärinkäsityksellesi. ;D

Tarkoitin Ohjelmointiputkan triidiä. Triid = thread = aihe

Hehe ;D

Triton [02.01.2009 22:33:43]

#

Aaa...mä en taas kunnolla edes keskittyny...sorry :D

edit. mut ehkä tosta on jollekkin silti hyötyä ;D

Blaze [02.01.2009 22:46:17]

#

ankzilla kirjoitti:

Mites näitä triidejä poistetaan?

Kertomalla moderaattorille, että tahtoo sen pois. Normikäyttäjät ei voi poistaa ketjuja.

Metabolix [02.01.2009 22:52:13]

#

ankzilla kirjoitti:

Mites näitä triidejä poistetaan?

Ei poisteta.

Triton kirjoitti:

Varmasti on järkevämpiäkin tapoja...

Joo. Tällainen tiivistelmä tuli hatusta:

<?php
function muuta_rivi($tiedosto, $rivinumero, $korvaus) {
  $f = file($tiedosto);
  $f[$rivinumero] = "$korvaus\n";
  file_put_contents($tiedosto, $f);
}
?>

Triton [02.01.2009 23:07:14]

#

Metabolix kirjoitti:

Triton kirjoitti:

Varmasti on järkevämpiäkin tapoja...

Joo. Tällainen tiivistelmä tuli hatusta:

<?php
function muuta_rivi($tiedosto, $rivinumero, $korvaus) {
  $f = file($tiedosto);
  $f[$rivinumero] = "$korvaus\n";
  file_put_contents($tiedosto, $f);
}
?>

Olipahan tuo mun systeemi aika purkkaviritelmä, mut sulla taitanee olla php:stä enemmän kokemusta :D

tsuriga [02.01.2009 23:11:42]

#

Implodee vielä tohon ähvään ni avot.

Metabolix [02.01.2009 23:54:03]

#

tsuriga kirjoitti:

Implodee vielä tohon ähvään ni avot.

Ei tarvitse sitäkään. :)

https://www.php.net/file_put_contents:

You can also specify the data parameter as a single dimension array. This is equivalent to file_put_contents($filename, implode('', $array))

ankzilla [03.01.2009 14:14:54]

#

Mä en taas ymmärrä yhtään mistä puhutte.. :(

Ainoa ongelma enään on, miten saan salasanatiedoston piiloon, jos pistän koodin levitykseen?

Md5-hashista tuskin on hyötyä, jos joku, joka on ladannut skriptin tietää, minkä nimisessä tiedostossa salasana sijaitsee.

Pawe [03.01.2009 14:19:27]

#

Hashaa se salasana joka on siinä tiedostossa

temu92 [03.01.2009 15:22:18]

#

ankzilla kirjoitti:

Md5-hashista tuskin on hyötyä, jos joku, joka on ladannut skriptin tietää, minkä nimisessä tiedostossa salasana sijaitsee.

Siitä juuri on hyötyä. MD5 hashin kanssa kun menee sillä tavalla ettei siitä enää saa avattua hashattya riviä auki. Joten ei ole mitään hätää kunhan salasana on järkevästi kirjoitettu, eli ei pelkästään pieniä kirjaimia ja lisäksi numeroitakin kannattaa olla. Erilaisilla rainbow-taulukoilla saa nimittäin helpommat md5 hashit selville.

Ja se salasanan tarkistus meneekin näin sitten:

tarkistus.php

<?php
	$password		= trim(file_get_contents("sala.sana"));
	$user_password	= md5($_POST['password']);

	if($password == $user_password){
		echo "Olet kirjautunut sisään";
	}
?>

sala.sana (joka on md5-hashatty "salasana")

e7e941b1f09f266540c6780db51d5f58

EDIT: Juu, hups. Korjasin sen nyt :)

kayttaja-2499 [03.01.2009 15:38:54]

#

Hashaatko sie hashatun salasanan ja vertaat sitä selkokieliseen salasanaan?
Vai olenko mie aivan pihalla?

Triton [03.01.2009 15:39:07]

#

ankzilla kirjoitti:

Ainoa ongelma enään on, miten saan salasanatiedoston piiloon, jos pistän koodin levitykseen?

Md5-hashista tuskin on hyötyä, jos joku, joka on ladannut skriptin tietää, minkä nimisessä tiedostossa salasana sijaitsee.

Voithan aina muuttaa tämän salasanatiedoston nimeä omassa versiossasi, sitä paitsi kyllä se salasanatiedosto tulisi salata .htaccessilla...

Metabolix [03.01.2009 17:18:53]

#

MD5:n purkamisessa ei ole merkitystä salasanan sisällöllä. Purkaminen on mahdotonta ja arvaaminen mahdollista, ja eiköhän taulukoista löydy jo aika paljon näitä aS43hiJn-salasanojakin. Toki perinteinen salasana kissa2 on helpompi arvata kuin satunnainen merkkijono.

Oikea tapa tehdä MD5:stä turvallisempi on käyttää salasanan lisäksi "suolaa" eli lisätä salasanan perään jokin muille tuntematon merkkijono ennen MD5-summan laskemista. Jos siis salasana on "kissa2", lisätään tähän ensin ylläpitäjän salainen teksti "12345", jolloin tulee "kissa212345". Kun tästä lasketaan MD5-summa, saadaan tietenkin eri tulos kuin pelkästä "kissa2":sta. Jos sitten MD5-summa päätyy julkisuuteen ja joku onnistuu selvittämään siitä sanan "kissa212345", hän ei pääsekään kirjautumaan tällä vaan pitäisi vielä arvata, millä tavalla tämä teksti liittyy alkuperäiseen salasanaan "kissa2".

MD5-summa tallennetaan rekisteröinnin yhteydessä, ja samalla tavalla lasketaan uusi summa kirjautumisen yhteydessä. Summaa sitten verrataan tallennettuun summaan.

<?php
$hash = md5($_POST["salasana"]."12345");
if ($hash != hae_hash_tietokannasta($_POST["kayttajanimi"])) {
  die("Virheellinen salasana!");
}
?>

Jos palvelimen PHP-tuki tuntuu luotettavalta, salasanat voi piilottaa PHP-tiedostoon, jonka alussa estetään tiedoston suorittaminen. Tällaista tiedostoa voi kuitenkin lukea ja kirjoittaa aivan normaaleilla tiedostonmuokkauskomennoilla, kunhan huolehtii, että estorivi tiedoston alussa pysyy kohdallaan.

<?php die("Tiedostoa ei voi hakea selaimella."); ?>
Akseli|1234567890ABCDEF1234567890ABCDEF
Bertta|1234567890ABCDEF1234567890ABCDEF

ankzilla [03.01.2009 18:05:37]

#

Kiitos! Toi viimenen skriptinpätkä tuli tarpeeseen todellakin!

tsuriga [03.01.2009 21:18:32]

#

Metabolix kirjoitti:

Jos sitten MD5-summa päätyy julkisuuteen ja joku onnistuu selvittämään siitä sanan "kissa212345", hän ei pääsekään kirjautumaan tällä vaan pitäisi vielä arvata, millä tavalla tämä teksti liittyy alkuperäiseen salasanaan "kissa2".

Mikä on kyllä sitten tuon tiivistesumman lähteen julkistamisen jälkeen melko triviaalia / laskenta-ajassa mitattuna hetken huvi. Suola on tarkoitettu vähentämään tiivistesumman julkisuuden todennäköisyyttä.

Metabolix [03.01.2009 21:27:16]

#

tsuriga kirjoitti:

Mikä on kyllä sitten tuon tiivistesumman lähteen julkistamisen jälkeen melko triviaalia / laskenta-ajassa mitattuna hetken huvi.

Joo, olin hieman epäselvä. On tietysti hyvin mahdollista, ettei summasta aukeakaan "kissa212345" vaan jokin muu sana, josta tulee sama summa. Lisäksi salasanalle voi tehdä paljon muutakin kuin esittämäni perinteisen suolauksen, jolloin tuo jälkimmäinenkin laskenta-aika pitkittyy.

rautamiekka [14.01.2009 20:40:17]

#

Tuon MD5-hashinkin kanssa varmaan pätee "jos ihminen jotain teki, ihminen sen myös murtaa" ?

temu92 [14.01.2009 20:43:11]

#

No MD5-hashia ei teoriassa voi purkaa auki, ainut keino saada selville se mitä siinä lukee on brute force, johon monet rainbow-taulukot auttavat nopeuttamalla hakua sisältämällä jo useita tuhansia valmiiksi laskettuja MD5-hasheja. Mutta kuten joku joskus sanoi, sitten kun saadaa tarpeeksi nopeat tietokoneet siihen brute forceen niin MD5 on paras pakkausmetodi, usean gigan tiedostot saadaan mahtumaan 32 tavuun!

Ja jos tuntee itsensä epävarmaksi sen suhteen riittääkö pelkkä MD5, on paras keino käyttää useita eri hashays algoritmeja, suolausta ja sun muuta sellaista. Esimerkiksi seuraavasta koodinpätkästä saatavista hasheista on jo todella vaikeaa saada selville alkuperäistä viestiä:

<?php
	$viesti	= "kissakävelee";
	$hash	= md5(sha1(base64_encode(gz_inflate($viesti."suolataan_niin_maistuu_paremmalta", 1))));
?>

vehkis91 [14.01.2009 20:44:57]

#

No nykyään kaikki murtuu brute forcella, mutta jos on pitkä salasana, sekä suola niin tuon murtaminen saattaa kestää vuosia.

Antti Laaksonen [14.01.2009 21:14:05]

#

temu92 kirjoitti:

Mutta kuten joku joskus sanoi, sitten kun saadaa tarpeeksi nopeat tietokoneet siihen brute forceen niin MD5 on paras pakkausmetodi, usean gigan tiedostot saadaan mahtumaan 32 tavuun!

Tässä olisi tosin vakavana ongelmana, kuinka löytää oikea alkuperäinen tiedosto lukuisista tiedostoista, jotka tuottavat saman tiivisteen. Esimerkiksi merkkijonon "OHJELMOINTIPUTKA" voi periaatteessa "pakata" muotoon "O", mutta joku saattaa "purkaa" pakkauksen niin, että tulos onkin "OMELETTI". Tässä pakkaustapa olisi sellainen, että merkkijonosta poistetaan kaikki merkit ensimmäistä lukuun ottamatta.

vehkis91 kirjoitti:

No nykyään kaikki murtuu brute forcella, - -

Ennenkin murtui, ainoastaan ennen kesti vielä kauemmin. :)

Lebe80 [15.01.2009 12:56:30]

#

vehkis91 kirjoitti:

No nykyään kaikki murtuu brute forcella, mutta jos on pitkä salasana, sekä suola niin tuon murtaminen saattaa kestää vuosia.

Lisäksi (epä)säännöllisesti salasanan vaihtoa vaan, niin saadaan hieman lisäaikaa.

Grey [15.01.2009 15:54:14]

#

Lebe80 kirjoitti:

Lisäksi (epä)säännöllisesti salasanan vaihtoa vaan, niin saadaan hieman lisäaikaa.

Paitsi jos uusi salasana sattuu olemaan juuri se joka on seuraavana rainbow-tablessa..

-Grey-

Lebe80 [15.01.2009 16:34:58]

#

no tietenkin, mutta on todennäköisempää, että pitkällä aikavälillä törmätään ennemmin salasanaan, jota ei ole koskaan muutettu, kuin salasanaan, jota vaihdetaan silloin tällöin.

ankzilla [20.01.2009 17:00:13]

#

Toi Brute Forcehan on aika näppärä, mutta eikös se ole laiton?
Omasta mielestäni ainakin olisi, mutta enpä vaivautunut enempää Googlettamaan...

Download -linkkii? -Google didn't answer me.

Triton [20.01.2009 17:06:37]

#

ankzilla kirjoitti:

Toi Brute Forcehan on aika näppärä, mutta eikös se ole laiton?
Omasta mielestäni ainakin olisi, mutta enpä vaivautunut enempää Googlettamaan...

Download -linkkii? -Google didn't answer me.

Miksi se olisi laiton? Sama juttu, että eihän P2P-ohjelmatkaan ole laittomia, vaan niiden sisältö (mikä siis on tekijänoikeusilla suojattu)... Voihan brute force -ohjelmia käyttää muuhunkin kuin hakkerointiin. Eihän esim. oman tietokoneen salasanan selvittäminen ole laitonta...vai ;)

Päärynämies [20.01.2009 17:12:16]

#

Tuo brute forcehan on vaan nimitys tietynlaiselle ongelmanratkaisumetodille. Toki sitä voi laittomiin tarkoituksiinkin käyttää.

ankzilla [20.01.2009 18:30:50]

#

Päärynämies kirjoitti:

Tuo brute forcehan on vaan nimitys tietynlaiselle ongelmanratkaisumetodille. Toki sitä voi laittomiin tarkoituksiinkin käyttää.

Mä ainaki veikkaisin että harva sitä lailliseenkaan tarkoitukseen käyttää. :P

Dexter [20.01.2009 20:33:03]

#

Mistäs tuon brute forcen saa? onko se turvallinen ees? en tarttekkaa =)

vehkis91 [20.01.2009 20:45:09]

#

No esim john the ripper käyttää brute forcea arvatessaan salasanoja. Jos joku on julkaisut funktion joka käyttää brute force, eli testaa kaikki mahdolliset vaihtoehdot mitä on.

Sami [20.01.2009 20:55:46]

#

long nelio = 94745483026554831l;
for (long i = 0; ; ++i) {
  if (i*i == nelio) {
     // luvun nelio neliöjuuri on i
     break;
  } else if (i*i > nelio) {
     // luvun nelio neliöjuuri on väliltä (i-1)..i
     break;
  }
}

Siinä sulle bruteforce. :)

Metabolix [20.01.2009 20:59:48]

#

ankzilla kirjoitti:

Mä ainaki veikkaisin että harva sitä lailliseenkaan tarkoitukseen käyttää. :P

Itse olen ratkaissut brute force -menetelmällä mm. monta Putkapostia. Aivan yhtä hyvin voisit väittää, ettei kukaan käytä fyysistä "raakaa voimaa" laillisiin tarkoituksiin, mikä on selvästi täysin järjetön väite.


Sivun alkuun

Vastaus

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

Tietoa sivustosta