Sessionsproblem

Tråden skapades och har fått 8 svar. Det senaste inlägget skrevs .
1

Har fått lite problem med sessioner, får meddelandet:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/xxxx/xxxxxx.yy/admin/login.php on line 11

Warning: Cannot modify header information - headers already sent by (output started at /home/d11214/vadkostardet.nu/admin/login.php:11) in /home/xxxx/xxxxxx.yy/admin/login.php on line 23

koden i logon.php är:
<?php
session_start ();

require "../lib/library.lib";

// Data base connection structure
$connectionid = OpenDatabaseConnection();
$sql = "SELECT ". "UserID, UserName, Surname, GivenName ". "FROM ". "Users ". "WHERE ". "(UserName like '".$_REQUEST["name"]."') AND ". "(Password = '".md5 ($_REQUEST["pwd"])."')";
$result = mysql_query ($sql);

if (mysql_num_rows ($result) > 0) {
// Pick out user data in an array.
$data = mysql_fetch_array ($result);

// Create and register session variables
$_SESSION["user_id"] = $data["UserID"];
$_SESSION["user_nickname"] = $data["UserName"];
$_SESSION["user_nachname"] = $data["Surname"];
$_SESSION["user_vorname"] = $data["GivenName"];

header ("Location: intern.php");
} else {
header ("Location: index.php?error=1");
}
?>

Vet någon vad problemet är?

  • Medlem
  • Göteborg
  • 2007-03-08 20:18

Jag tror din server har börjat skicka responsen till klienten redan innan du hinner sätta headern. Eftersom headern är det första som skall ut i responsen måste detta ske innan något har åkt iväg till klienten. Det skall finnas en property som anger detta, borde hete något i stil med flush. Jag skall googla lite.

  • Medlem
  • Göteborg
  • 2007-03-08 20:24

Fast när jag läser koden lite noggrannare kan det nog vara så att det är felmeddelandet till klienten som skapas och skickas innan headern hinner iväg. Om du fixar det första felet först så borde det andra lösa sig.

Ursprungligen av klas:

Fast när jag läser koden lite noggrannare kan det nog vara så att det är felmeddelandet till klienten som skapas och skickas innan headern hinner iväg. Om du fixar det första felet först så borde det andra lösa sig.

Japp, jag lyckades lösa problemet. Det visade sig att sessionsanropet inte låg längst upp i andra filer, så när det kom längst upp (ja, även före doctype) så försvann problemet!
Tack Klas!

Felet beror som sagt på din SQL. mysql_error() är en bra funktion.

Jag kan dessutom upplysa dig om att du har ett säkerhetshål i form av SQL-injection i din kod. Vad tror du händer om någon försöker logga in med %')-- som användarnamn?

Ursprungligen av DrRotmos:

Felet beror som sagt på din SQL. mysql_error() är en bra funktion.

Jag kan dessutom upplysa dig om att du har ett säkerhetshål i form av SQL-injection i din kod. Vad tror du händer om någon försöker logga in med %')-- som användarnamn?

På andra ställen har jag anropat mysql_error() vid fel. Just vid den kodsnutten syntes den inte.
Tack, DrRotmos, för upptäckten om säkerhetshålet! Hur täppar man till det hålet? Vore tacksam för tips om att göra inloggningen säkrare!

Använd funktionen mysql_real_escape_string() för varje sträng från användaren som du lägger in i din SQL-kod.

Ursprungligen av DrRotmos:

Använd funktionen mysql_real_escape_string() för varje sträng från användaren som du lägger in i din SQL-kod.

Nu är detta fixat för samtliga strängar som spara data i SQL databasen. Fungerar perfekt.
Tack, DrRotmos.

För mer info om säkerhet i PHP kan jag ju rekommendera phpsec.org.

De tar upp lite allt möjligt.

1
Bevaka tråden