Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kirjautuminen Ohjelmointiputkaan PHP-koodilla

riksu [02.11.2015 16:08:44]

#

Yritin tehdä koodivinkin avulla sisäänkirjautumisen ohjelmointiputkaan, mutta epäonnistuin. Pyydän Metabolixia tekemään korjaukset ja kommentit ohjelmaan, jotta ymmärtäisin jotain siitä cURLista. Kiitoksi etukäteen vaivasta.

<?php
function kirjautuu_ohjelmointiputkaan($tunnus, $salasana) {

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_USERAGENT, "PHP");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_FAILONERROR, 1);
	curl_setopt($ch, CURLOPT_ENCODING, "");
	curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
	curl_setopt($ch, CURLOPT_COOKIEJAR, "/dev/null");
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

	curl_setopt($ch, CURLOPT_REFERER, "https://www.ohjelmointiputka.net");
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array("username" => $tunnus, "password" => $salasana)));
	curl_setopt($ch, CURLOPT_URL, "https://www.ohjelmointiputka.net/");
	$tmp = curl_exec($ch);
	if ($tmp === false || strpos($tmp, "Kirjautuminen epäonnistui") !== false) {
		$ok = false;
		trigger_error("Kirjautuminen epäonnistui!");
	} else {echo ("Sisäänkirjautuminen onnistui!");

	}
	curl_close($ch);
	return $ok;
}
kirjautuu_ohjelmointiputkaan("oma tunnus", "oma salasana");
?>

peran [02.11.2015 17:05:09]

#

Toimisikohan muuttamalla tämä:

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array("username" => $tunnus, "password" => $salasana)));

Täksi ?

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array("tunnus" => $tunnus, "salasana" => $salasana)));

En jaksa testata...

TuomasK [02.11.2015 17:06:54]

#

Tässä sinun nykyisessä koodissa sinä yrität kirjautua sisään lähettämällä tunnuksen ja salasanan putkan etusivulle.

Tälläinen on putkan etusivun kirjautumislomakkeen alku:

...
<h2>Kirjautuminen</h2>
<form action="/sisaan.php" method="post">
...

Lomakkeen kohde on siis sivu osoitteessa https://www.ohjelmointiputka.net/sisaan.php. Tuolle sivulle sinun tulee siis lähettää kirjautumispyyntö. Muuten tuo koodi näyttäisi olevan oikein, mutta en ole testannut toimiiko.


Edit: Peran on myös oikeassa, tuota virhettä en huomannutkaan

riksu [03.11.2015 22:00:31]

#

Semmonen siitä tuli, kiitoksia avusta (hyvää harjoitusta minulle):

<?php
function kirjautuu_ohjelmointiputkaan($tunnus, $salasana) {

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_USERAGENT, "PHP");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_FAILONERROR, 1);
	curl_setopt($ch, CURLOPT_ENCODING, "");
	curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
	curl_setopt($ch, CURLOPT_COOKIEJAR, "/dev/null");
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

	curl_setopt($ch, CURLOPT_REFERER, "https://www.ohjelmointiputka.net/");
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array("tunnus" => $tunnus, "salasana" => $salasana)));
	curl_setopt($ch, CURLOPT_URL, "https://www.ohjelmointiputka.net/sisaan.php/");
	$tmp = curl_exec($ch);
	if ($tmp === false || strpos($tmp, "Kirjautuminen epäonnistui") !== false) {
		$ok = false;
		trigger_error("Kirjautuminen epäonnistui!");
	} else {echo ("Sisäänkirjautuminen onnistui!");

	}
	curl_close($ch);
	return $ok;
}
kirjautuu_ohjelmointiputkaan("oma tunnus", "oma salasana");
?>

Tuloksena tuli "Sisäänkirjautuminen onnistui!" Toivottavasti toimii oikein.

Nimittäin, kun kokeilin vaihta rivin

curl_setopt($ch, CURLOPT_URL, "https://www.ohjelmointiputka.net/sisaan.php/");

riviksi

curl_setopt($ch, CURLOPT_URL, "https://www.ohjelmointiputka.net/");

onnistui myös sisäänkirjautuminen ja sen lisäksi ei ollut väliä, millainen oli tunnus tai salasana, kaikki kävi - "Sisäänkirjautuminen onnistui!" viesti tuli aina.

Mod. lisäsi kooditageja!

Metabolix [03.11.2015 22:13:39]

#

riksu, ei tietenkään oikeasti onnistu kirjautuminen väärällä osoitteella. Tuo koodi tarkistaa ainoastaan, että sivunlataus onnistuu eikä sivulla ole tekstiä ”Kirjautuminen epäonnistui”. Tämä ei ole mikään yleispätevä tapa kirjautumisen tarkistukseen, vaan nuo ehdot on suunniteltu yhden tietyn sivuston yhtä tiettyä kirjautumissivua varten. (Vinkki: se sivusto ei ole Ohjelmointiputka, ja se sivu ei ole sivuston etusivu.) Kun olet vaihtanut koodiin väärän osoitteen, tarkistuksen tulos ei pidä paikkaansa. Sattumalta tarkistus toimii kuitenkin oikein Ohjelmointiputkan kirjautumisessa.

Tarinan opetus: Et voi kopioida koodia ja muuttaa hätäisesti paria kohtaa, vaan pitää lukea ja ymmärtää koko koodi ja muuttaa siitä kaikki olennaiset kohdat. Kun yrität muokata koodia, jota et ymmärrä, on oma syysi, jos se toimii väärin.

The Alchemist [04.11.2015 11:36:05]

#

Kirjautumisen onnistumisen tarkistamiseen yksi keino olisi tutkia, asettaako palvelin evästeitä kirjautumisen yhteydessä. Evästeen asettaminen on yleensä merkki onnistuneesta kirjautumisesta.

Poikkeuksiakin on, monet sivustot varmasti vahingossa pyrkivät asettamaan uuden evästeen kirjautumisen epäonnistuttua, ja monet varmasti ovat luoneet session jo anonyymille käyttäjälle ja käyttävät samaa sessiota (siten myös samaa sessioevästettä) kirjautumisen jälkeenkin. Luulisin kuitenkin, että aika hyvällä prosentilla tuolla pääsee eteenpäin.

riksu [06.11.2015 11:58:36]

#

The Alchemist kirjoitti:

Kirjautumisen onnistumisen tarkistamiseen yksi keino olisi tutkia, asettaako palvelin evästeitä kirjautumisen yhteydessä. Evästeen asettaminen on yleensä merkki onnistuneesta kirjautumisesta.

Hyvä ajatus ja kiitos vinkistä. Mutta voisiko, joku ystävällisesti näyttää esimerkin evästeen käytöstä kirjautumisen tarkistamiseen? Joku koodipätkä, missä on kommentit mukana selvitystä varten. Esim. miten ja mistä eväste haetaan.

Vastaus

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

Tietoa sivustosta