- Home
- Categorie
- Coding e Sistemistica
- PHP
- SQL injection
-
SQL injection
Ragazzi io sono un nuovo utente e sono uno studente di economia informatica: sto affrontando il mio ultimo esame che guarda caso consiste nel realizzare un'applicazione in php/mysql quindi vi prego di non deridermi troppo se vi faccio delle domande da lamer... sono qui per imparare! Una delle richieste del mio prof è la protezione del login riguardo alla SQL injection(tramite l'utilizzo di mysql_real_escape_string): io ci ho provato e ,anche guardando gli esempi ke ci ha fornito lui, dovrebbe essere tutto ok ma in realtà l'utente non viene mai autenticato! Sarà qualke cavillo nel codice ma ci sto smanettando da 2 giorni e non riesco proprio a capire!!! qualcuno di buon cuore gli dà un'okkiata? tnk u so much!!!
p.s. ma alla fine mysql_real_escape_string cosa restituisce? un valore o un booleano? (tra i commenti ci sono delle linee di codice ovvero quelle scritte senza utilizzare mysql_real_escape_string e in quel modo la pagina mi funziona a meraviglia!)
eccovi il codice della pagina di login... se avete anke altri consigli... sono tutt'orekki!
-
ciao KickFlip e benvenuto,
nessun problema per le domande da niubbo: se ti può consolare io studio economia bancaria e dei mkt finanziari e il php è solo un hobbyTi posso consigliare di guardare la guida ufficiale di php per cercare informazioni precise rispetto ad una funzione.
passiamo al codice:
[php]
<?php
session_start(); //inizia la sessione
if (isset($_POST['user']) && isset($_POST['passwd'])) // se sono state fornite username e password allora...
{
require_once('Connections/mysql.php'); //richiede il file che contiene i dati e funzioni per connessione mysql
mysql_select_db($database_mysql, $mysql); //seleziona il db da usare
$user=mysql_real_escape_string($_POST['user']);
$passwd=sha1($_POST['passwd']); //metti $passwd=sha1(trim($_POST['password']));
$query_login = "select name from users where name='$user' and pwd='$passwd'";
$login = mysql_query($query_login, $mysql); //
if($login){ // qui prosegui
}elseif(!$login){ //qui in caso di errore...
/*
evita die() perchè non sai mai come finisce...
e non ti riesce a gestire la cosa
*/}
// or die(mysql_error()); //interroga il db per cercare untenti e password con i dati forniti
$row_login = mysql_fetch_assoc($login);
$totalRows_login = mysql_num_rows($login); //qui andrebbe $row_login e non $row
if ($totalRows_login != 0) // esiste almeno un record con quei dati: autenticazione riuscita
{
//$_SESSION['user']=$_POST['user']; //setto la variabile di sessione user e salto menù interno
$_SESSION['user']='true' ;
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/privmenu.php");
}
else
{
// i dati utente sono sbagliati... ricomincia autenticazione setto il messaggio di errore da visualizzare e richiamo login.php
$_SESSION['message']='ERROR: Unknown User';
$_SESSION['user']=$_POST['user'];
$_SESSION['passwd']=$_POST['passwd'];
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/login.php");
// qui aggiungerei un comodo exit();} }
else
{
// username e password non sono state fornite... visualizzo la form di immissione dati
?><HTML>
<BODY>
<BR><BR><BR><BR>
<H1 align="center">LOGIN</H1>
<div align="center"><BR>
<BR>
<BR>
<?php
if (isset($_SESSION['message'])) {
echo $_SESSION['message'];
session_unregister('message');
session_unregister('user');
session_unregister('passwd');
// il comando precedente è più generale di unset($_SESSION['message'])
// che funziona solo quando register_globals e` disabilitato}
?>
</div>
<P align="center">
<BR><BR>
<FORM action="login.php" method="POST"><BR><BR>
Username: <INPUT type="text" name="user" size=10><br><br>
Password: <INPUT type="password" name="passwd" size=10><br><br>
<BR><BR><BR>
<INPUT type="submit" value="Login">
</FORM>
</BODY>
</HTML><?php
}
?>
[/php](le modifiche te le ho commentate)
ciao a presto
-
grazie mille... ora finalmente ho capito! spero di poter fare qualke domandina più intelligente in futuro... per il momento abbiate pazienza!! mi rimetto al lavoro... la scadenza incombe...
-
grazie mille... ora finalmente ho capito! spero di poter fare qualke domandina più intelligente in futuro... per il momento abbiate pazienza!! mi rimetto al lavoro... la scadenza incombe...