Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: haspu - 20.01.11 - klo:20.09
-
Nyt olisi ylimääräinen silmäpari tarpeen. Osaako kukaan kertoa mitä vikaa alla olevassa koodissa on? Koodin pitäisi tarkistaa löytyykö käyttäjänimi ja salasana tietokannasta, jos löytyy niin salattu.php sivu pitäisi aueta. Nyt en kuitenkaan pääse kirjautumissivusta eteenpäin vaikka käyttäjänimi ja salasana ovat oikein. :-\
login_form.php
<?php
mysql_connect("localhost", "käyttäjänimi", "salasana") or die(mysql_error());
mysql_select_db("tietokanta") or die(mysql_error());
$username = mysql_real_escape_string($_POST["username"]);
$password = mysql_real_escape_string(md5($_POST["password"]));
$select_user = mysql_query("SELECT username, password FROM users WHERE username='$username' AND password='$password'");
if (mysql_num_rows($select_user) != 0)
{
session_start();
session_register('authorized');
$_SESSION['authorized'] = true;
header("Location: salattu.php");
exit;
}
else
{
header("Location: login_form.php");
exit;
}
?>
-
Nyt olisi ylimääräinen silmäpari tarpeen. Osaako kukaan kertoa mitä vikaa alla olevassa koodissa on? Koodin pitäisi tarkistaa löytyykö käyttäjänimi ja salasana tietokannasta, jos löytyy niin salattu.php sivu pitäisi aueta. Nyt en kuitenkaan pääse kirjautumissivusta eteenpäin vaikka käyttäjänimi ja salasana ovat oikein. :-\
login_form.php
<?php
mysql_connect("localhost", "käyttäjänimi", "salasana") or die(mysql_error());
mysql_select_db("tietokanta") or die(mysql_error());
$username = mysql_real_escape_string($_POST["username"]);
$password = mysql_real_escape_string(md5($_POST["password"]));
$select_user = mysql_query("SELECT username, password FROM users WHERE username='$username' AND password='$password'");
if (mysql_num_rows($select_user) != 0)
{
session_start();
session_register('authorized');
$_SESSION['authorized'] = true;
header("Location: salattu.php");
exit;
}
else
{
header("Location: login_form.php");
exit;
}
?>
Kokeilisin noin:$select_user = mysql_query("SELECT username, password FROM users WHERE username='".$username."' AND password='".$password."'");
On sellainen kutina että yksinkertaisessa lainausmerkissä ei muuttujaa laajenneta.
Helppo tapa tarkistaa:
echo "SELECT username, password FROM users WHERE username='".$username."' AND password='".$password."'";
ja
echo "SELECT username, password FROM users WHERE username='"username' AND password='$password'";
-
Tämä tuntuu olevan oikea tapa mutta en vieläkään pääse eteenpäin.
echo "SELECT username, password FROM users WHERE username='".$username."' AND password='".$password."'";
Voisiko vika olla tässä koodissa
salattu.php
<?php
if ($_SESSION['authorized'] != true)
{
header("Location: login_form.php");
exit;
}
?>
<html>
<body>
Testi...
</body>
</html>
-
Tämä tuntuu olevan oikea tapa mutta en vieläkään pääse eteenpäin.
echo "SELECT username, password FROM users WHERE username='".$username."' AND password='".$password."'";
Voisiko vika olla tässä koodissa
salattu.php
<?php
if ($_SESSION['authorized'] != true)
{
header("Location: login_form.php");
exit;
}
?>
<html>
<body>
Testi...
</body>
</html>
Mitä ilmeisimmin se härö majailee sitten tuon session käsittelyssä. (Jos siis olet varmistanut että se kantayhteys toimii kuten uskot)
Kaipa joku tuntee myös sessioiden salatun elämän ;(
Mihon menee kun/jos kirjoitat osoiteriville tuon login_form.php:n?
-
<?php
if ($_SESSION['authorized'] != true)
{
header("Location: login_form.php");
exit;
}
?>
<html>
<body>
Testi...
</body>
</html>
Sitten vain debuggaamaan...
<?php
echo $_SESSION['authorized'];
if ($_SESSION['authorized'] != true)
{
header("Location: login_form.php");
exit;
}
?>
<html>
<body>
Testi...
</body>
</html>
<?php
mysql_connect("localhost", "käyttäjänimi", "salasana") or die(mysql_error());
mysql_select_db("tietokanta") or die(mysql_error());
$username = mysql_real_escape_string($_POST["username"]);
$password = mysql_real_escape_string(md5($_POST["password"]));
$select_user = mysql_query("SELECT username, password FROM users WHERE username='$username' AND password='$password'");
if (mysql_num_rows($select_user) != 0)
{
session_start();
session_register('authorized');
$_SESSION['authorized'] = true;
echo "Yrittää mennä salattuun...";
header("Location: salattu.php");
exit;
}
else
{
header("Location: login_form.php");
exit;
}
?>
Molemmissa debuggauksissa tulee header-errori, mutta näätpähän vähän rajoittaa ongelmaa...
Edit - Muuten käyttäisin PDO:ta tietokannoissa, jos et ole kirjoittanut pitkiä stooreja vanhentuneella tavalla.
Edit 2 - ... ja käyttäisin suolaa salasanassa Esim. $password = mysql_real_escape_string(md5($_POST["password"].$_POST["user"]."lisää suolaa"));
-
<?php
$password = mysql_real_escape_string(md5($_POST["password"]));
Ihan sellaisena offtopiccina mutta jos teet tuon noin päin että ensin pistät MD5:ksi POST-datan ja sitten vasta sen mysql_real_escape_stringin läpi ajat niin eikös siitä tule eri tulos kuin jos ajaisit md5( mysql_real_escape_string( $_POST['password'] ) ); jos käyttäjällä on jotain sellaisia merkkejä mitkä pitää escapettaa?
EDIT: Koetin tuota alkuperäistä koodiasi ja itselläni se ainakin skulaa ihan ongelmitta. Koeta echottaa montako riviä hakutuloksia tulee jotta näet tuleeko sieltä mitään alkuunkaan.