Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kirjautumissivun ongelma

Sivun loppuun

jarspa [12.11.2005 10:13:06]

#

Olen tehnyt kirjautumis systeemin sivuilleni mutta se ei vaan jostain syystä lähde vörkkimään. Käyttäjätunnukset ja salasanat salasanankäsittelijä hakee sql-kannasta. Osaisiko joku neuvoa mikä koodissani mättää.

kirjaudu.php koodi:

<?php
<h3 align="center">Kirjautuminen</h3>
<form name="form2" method="post" action="salakasittelija.php">
  <table width="250" border="0" align="center" background="kuvat/tausta.jpg">
    <tr background="kuvat/tausta.jpg">
      <td width="146"><div align="center">Tunnus</div></td>
      <td width="144"><div align="center">Salasana</div></td>
    </tr>
    <tr background="kuvat/tausta.jpg">
      <td><div align="center">
          <input name="tunnus" type="text" id="tunnus" size="20">
        </div></td>
      <td><div align="center">
          <input name="salasana" type="password" id="salasana" size="20">
        </div></td>
    </tr>
    <tr background="kuvat/tausta.jpg">
      <td colspan="2"><div align="center">
          <input type="submit" name="Submit" value="Kirjaudu sis&auml;&auml;n">
        </div></td>
    </tr>
  </table>
</form>
?>

salakasittelija.php koodi:

<?php
$yhteys=mysql_connect("localhost","","") or die ("Tietokantayhteyttä ei voitu avata");
mysql_select_db("***") or die ("Tietokantaa ei voitu avata");

$kysely=mysql_query("SELECT salasana FROM tunnukset WHERE tunnus='$tunnus'");

$rivi=mysql_fetch_row($kysely);
$oikea=($rivi[0]);

if ($salasana==$oikea)
	{
    session_register("tunnus");
          $_SESSION["tunnus"]="$tunnus";
          $_SESSION["salasana"]="$salasana";
          setcookie("evaste",$_POST['tunnus'];()+60*1) // luodaan eväste 1 minuutiksitime
	echo("<html>\n<head>\n");
	echo("<meta http-equiv=\"Refresh\" content=\"0;url=****\index.php\">\n");
	echo("</head>\n</html>");
	}
	else
	{
	print "Väärä tunnus tai salasana!!";
	}
?>

kasetti [12.11.2005 10:50:11]

#

Jos palvelimella on register globals off (toivottavasti) niin joudut tuolla salakasittelija.php:n alussa ottamaan nuo lähetetyt arvot tyyliin:

$tunnus   = $_POST['tunnus'];
$salasana = $_POST['salasana'];

Lisäksi kannattaa tutkia onko noita arvoja edes lähetetty (if isset), jolloin tietokantakyselyä ei tarvi suorittaa.

ajv [12.11.2005 10:55:45]

#

Niin ja se perustietoturva:

$tunnus = mysql_real_escape_string($_POST['tunnus]);

Ja jos on magic_quotes_gpc päällä, niin silloin

$tunnus = mysql_real_escape_string(stripslashes($_POST['tunnus]));

niin ei pääse käyttäjä vahingossakaan ajamaan omia lauseitaan tietokantaan.

Muutenkin kyllä miettisin uudestaan, mitä sinne sessioon tallentaa. Jos tallennat sinne tunnus/salasana-parin tuollaisenaan, saattaa niitä päästä suht helpostikkin lueskelemaan serveriltä. Eli kirjautumisen yhteydessä luot sessiotunnuksen (esim unqid()) ja tallennat sen kantaan ja saman sessiotunnuksen laitat sessioon. Sen jälkeen jokaisella sivunlatauksella tarkistat löytyykö sessiota ja jos löytyy, niin löytyykö se myös kannasta.

kasetti [12.11.2005 13:29:27]

#

Tietoturvaan vielä jatkoa sen verran että salasanatkin kannattanee tallentaan kantaan salattuna (esim. MD5).

jarspa [12.11.2005 13:52:33]

#

kasetti kirjoitti:

Tietoturvaan vielä jatkoa sen verran että salasanatkin kannattanee tallentaan kantaan salattuna (esim. MD5).

Niin ajattelinkin toteuttaa...

Meitsi [12.11.2005 14:38:21]

#

Kannattaisi ehkä lukea uudestaan joku tutoriaali jossa käsitellään html:än upottamista php:hen. :P

Metabolix [12.11.2005 14:46:08]

#

Eli toisin sanoen, kirjaudu.php:stä php-tagit pois HTML:n ympäriltä, koska se on HTML:ää eikä PHP:tä.

jarspa [12.11.2005 16:28:27]

#

Metabolix kirjoitti:

Eli toisin sanoen, kirjaudu.php:stä php-tagit pois HTML:n ympäriltä, koska se on HTML:ää eikä PHP:tä.

No eipä ne ole koodissa!!! Lisäsin ne vaan tänne foorumiin et toi koodi näyttäis järkevämmältä...

<h3 align="center">Kirjautuminen</h3>
<form name="form2" method="post" action="salakasittelija.php">
  <table width="250" border="0" align="center" background="kuvat/tausta.jpg">
    <tr background="kuvat/tausta.jpg">
      <td width="146"><div align="center">Tunnus</div></td>
      <td width="144"><div align="center">Salasana</div></td>
    </tr>
    <tr background="kuvat/tausta.jpg">
      <td><div align="center">
          <input name="tunnus" type="text" id="tunnus" size="20">
        </div></td>
      <td><div align="center">
          <input name="salasana" type="password" id="salasana" size="20">
        </div></td>
    </tr>
    <tr background="kuvat/tausta.jpg">
      <td colspan="2"><div align="center">
          <input type="submit" name="Submit" value="Kirjaudu sis&auml;&auml;n">
        </div></td>
    </tr>
  </table>
</form>

ONKS NYT HYVÄ!?

Metabolix [12.11.2005 16:39:07]

#

Nyt taitaa jollakulla olla hieman väärä asenne.

hunajavohveli [12.11.2005 16:46:24]

#

Ei nyt kannata ruveta tuollaisesta asiasta meuhkaamaan, mutta kieltämättä php-väritys kävisi kyllä HTML:äänkin. Värityksestä voisi poistaa vaatimuksen, että koodi on oltava tagien sisällä.

jarspa [12.11.2005 17:36:21]

#

No ei nii... :)

ajv [12.11.2005 17:54:34]

#

No selvisikö ongelma? Kerro toki hieman tarkemmin mikä tuossa ei toimi.

jarspa [12.11.2005 22:09:12]

#

ajv kirjoitti:

No selvisikö ongelma? Kerro toki hieman tarkemmin mikä tuossa ei toimi.

No en oikein tiedä... evästeen asettamisen riville parse errori tulee...

jgz [12.11.2005 22:28:00]

#

rivi 15 ainakin näyttää tältä

setcookie("evaste",$_POST['tunnus'];()+60*1) // luodaan eväste 1 minuutiksitime

eli katsopas missä tuo puolipiste on!

Metabolix [12.11.2005 23:01:30]

#

Ja mitkä ihmeen tyhjät sulut tuossa samassa on?

jarspa [13.11.2005 08:52:07]

#

Metabolix kirjoitti:

Ja mitkä ihmeen tyhjät sulut tuossa samassa on?

Joo siitä oli jäänyt time funktio pois ja puolipiste väärässä paikassa... mut ei kyl toimi vieläkään. Muutin rivin seuraavanlaisesti:

<?php
setcookie("evaste",$_POST['tunnus'],time()+60*1);
?>

ipe [13.11.2005 18:11:05]

#

Ainakin olet käyttänyt sessioneita vaikka session_start() puuttuu..

jarspa [14.11.2005 12:10:41]

#

ipe kirjoitti:

Ainakin olet käyttänyt sessioneita vaikka session_start() puuttuu..

Minne toi session_start() komento laitetaan? Tai siis mihin kohtaan...

jarspa [14.11.2005 17:27:38]

#

Nyt mun mielestä tossa on kaikki oikein mut ei toimi vieläkään... heh...

<?php
session_start();
		  $_SESSION["tunnus"]="$tunnus";
          $_SESSION["salasana"]="$salasana";
          setcookie("evaste",$_POST["$tunnus"],time()+ 60 * 1); // luodaan eväste 1 minuutiksitime
	echo("<html>\n<head>\n");
	echo("<meta http-equiv=\"Refresh\" content=\"0;url=index.php\">\n");
	echo("</head>\n</html>");
?>

Juice [14.11.2005 20:33:29]

#

Kokeilepa näin (register_globals pois päältä, uudelleenohjaus headerilla)

<?php
session_start();
$_SESSION["tunnus"] = $_POST['tunnus'];
$_SESSION["salasana"] = $_POST['salasana'];
setcookie("evaste",$_POST['tunnus'],time()+ 60); // luodaan eväste 1 minuutiksi
header("Location: index.php");
?>

Vinkki: Tutustu $_GETin ja $_POSTin saloihin tarkemmin, $_POST["$tunnus"] hakisi kenttää nimeltä $tunnus, $_POST["tunnus"] kenttää nimeltä tunnus.

Lebe80 [15.11.2005 10:52:32]

#

[fiilausta]
mutta eikös php käsittele lainausmerkkien ( " ) sisällä dollarialkuiset tekstit saman nimisinä muuttujina ;)

Taas hipsujen ( ' ) sisällä dollarimerkki tulostuu.
[/fiilausta]

Muista sitten kryptata salasanat ennen tallentamista sessioneihin mahdollisten tietoturva-aukkojen takia.

Eli mieluummin

function salaa($txt){
return sha1("avain".$txt).md5("avain".$txt);
}
$_SESSION["tunnus"] = $_POST['tunnus'];
$_SESSION["salasana"] = salaa($_POST['salasana']);

Juice [15.11.2005 18:31:47]

#

Lebe80 kirjoitti:

mutta eikös php käsittele lainausmerkkien ( " ) sisällä dollarialkuiset tekstit saman nimisinä muuttujina ;)

Kyllä, mutta on nopeampaa ja selkeämpää laittaa nuo suoraan kuin ruveta parsimaan niitä. Ihmettelen, miksi monet kokeneetkin koodarit laittavat $foo = "$bar";

ipe [16.11.2005 10:01:23]

#

jarspa kirjoitti:

ipe kirjoitti:

Ainakin olet käyttänyt sessioneita vaikka session_start() puuttuu..

Minne toi session_start() komento laitetaan? Tai siis mihin kohtaan...

Lueppa vaikka ihan tän putkan opas sessiosta. Ite käytän nyrkkisääntöä, että session_start() aina ylimmäksi. En sitten tiedä onko se aina ihan viisasta, mutta ainakin toiminut on :P

jarspa [16.11.2005 15:55:21]

#

joo luin ja nyt toimii kaikki niinku pitää...

tsuriga [16.11.2005 16:06:34]

#

Juice kirjoitti:

<?php
session_start();
$_SESSION["tunnus"] = $_POST['tunnus'];

Miksikäs tuossa käytetään $_SESSIONissa indeksissä " ja $_POSTissa '?;) Juu itteki ihmettelen aina $foo = "$bar";

Juice [16.11.2005 18:41:15]

#

No, tuo $_SESSION["tunnus"] oli valmiina, oma tapani on laittaa hipsuilla, koska siitä saa hyvän mielen, koska tietää niiden olevan pari millisekuntia nopeampia, jos sitäkään :)


Sivun alkuun

Vastaus

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

Tietoa sivustosta