Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 04-02-08, 12:32   #1 (permalink)
User
 
Data di registrazione: Jan 2008
Messaggi: 168
Primi esperimenti per login utenti

Ciao a tutti conosco da un po' di tempo il php e adesso sto cercando di applicarlo a mysql per una gestione dei login e registrazioni. Ho iniziato a fare qualche prova per il login, premetto che non sono andato a guardarmi come si fa o a copiare cose già fatte, quindi potrei aver fatto una cosa di bassissimo livello. Però per incominciare ho voluto provare a ragionarci su un po' per capire meglio, poi se esistono degli algoritmi migliori li vado a guardare. Per adesso non ho ancora considerato la sicurezza. vi posto il codice delle pagine che ho fatto di prova:


Pagina di login:

Codice:
<html>
<body>
<form method="post" action="accesso.php">
  <label>Utente:
  <input name="utente" type="text" id="utente" maxlength="20" />
  </label>
  <p>Password:<label>
    <input name="pass" type="password" id="pass" maxlength="20" />
    </label>
  </p>
  <p>
    <label>
    <input type="submit" name="Submit" value="Invia" />
    </label>
  </p>
</form>
</body>
</html>
Pagina di accesso:

Codice:
<?php
$utente=$_POST['utente'];
$pass=$_POST['pass'];
$db_host = "localhost";
$db_user = "root";
$db_password = "";
$db_name = "database";

$db =  mysql_connect($db_host, $db_user, $db_password);
if (! $db)
 echo "Errore durante la connessiona la database.";

 mysql_select_db($db_name) or exit ("errore durante la selezione del database");

$sqlcmd = "SELECT * ";
$sqlcmd .= "FROM utenti ";
$sqlcmd .="WHERE user='$utente' AND pass='$pass' ";
$risultato =  mysql_query( $sqlcmd );
if (! $risultato) 
exit ("errore nell'interrogazione: $sqlcmd");
if (mysql_num_rows ($risultato)==0)
{
exit ("Utente o Password errati");
$accesso="no";
}
else
$accesso="ok";

session_start();

$_SESSION['accesso']=$accesso;

?>


<html>
<head>
<meta  http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento senza titolo</title>
</head>
<body>
<a href="pagina1.php"> pagina 1 </a>
</body>
</html>
Pagina1

Codice:
 <?php
session_start();
$accesso=$_SESSION['accesso'];
if ($accesso!="ok")
exit ("Accesso non effettuato");
?>


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento senza titolo</title>
</head>
<body>
Pagina visibile
<br />
<a href="logout.php">logout</a>
</body>
</html>
Pagina di logout:
Codice:
<?php
session_start();
session_destroy();
?>
<html>
sessione terminata
</html>
Accetto tutti i vostri commenti e aiuti!!
Grazie
drimmy non in linea   Rispondi citando
Vecchio 04-02-08, 12:59   #2 (permalink)
User
 
Data di registrazione: Jan 2008
Messaggi: 168
La prima domanda che mi sorge è:
Se non chiudo la connessione al database nella pagina accesso, quando passo alla pagina1 la connessione rimane aperta o la devo rifare? Per ora la chiudo ad ogni pagina e la riapro la pagina dopo

Ultima modifica di drimmy : 04-02-08 13:29.
drimmy non in linea   Rispondi citando
Vecchio 04-02-08, 14:07   #3 (permalink)
ModSenior
 
L'avatar di Thedarkita
 
Data di registrazione: Aug 2006
Ubicazione: Messina
Messaggi: 6,439
Invia un messaggio tramite Skype a Thedarkita
La connessione va fatta in ogni pagina quindi conviene fare un file di configurazione ed includerlo in tutte le pagine

per quanto riguarda lo script sarebbe più corretto scrivere:
al posto di :
Codice PHP:
$sqlcmd .="WHERE user='$utente' AND pass='$pass' "
questo:
Codice PHP:
$sqlcmd .="WHERE user='$_POST[utente]' AND pass='$_POST[pass]' "

cosi eviti anche problemi con le impostazioni dei server
Thedarkita non in linea   Rispondi citando
Vecchio 04-02-08, 15:20   #4 (permalink)
User
 
Data di registrazione: Feb 2008
Messaggi: 91
attento devi filtrare gli imput seno è automatica una sqlinjection!
GreyFox non in linea   Rispondi citando
Vecchio 04-02-08, 15:34   #5 (permalink)
ModSenior
 
L'avatar di Thedarkita
 
Data di registrazione: Aug 2006
Ubicazione: Messina
Messaggi: 6,439
Invia un messaggio tramite Skype a Thedarkita
Quote:
GreyFox Visualizza il messaggio
attento devi filtrare gli imput seno è automatica una sqlinjection!

ha scritto che per adesso tralasciava la sicurezza...
Thedarkita non in linea   Rispondi citando
Vecchio 04-02-08, 20:01   #6 (permalink)
User
 
Data di registrazione: Jan 2008
Messaggi: 168
Quote:
GreyFox Visualizza il messaggio
attento devi filtrare gli imput seno è automatica una sqlinjection!
Adesso cerco di ottimizare anche la sicurezza, puoi spiegarmi meglio? grazie
drimmy non in linea   Rispondi citando
Vecchio 04-02-08, 20:46   #7 (permalink)
ModSenior
 
L'avatar di Thedarkita
 
Data di registrazione: Aug 2006
Ubicazione: Messina
Messaggi: 6,439
Invia un messaggio tramite Skype a Thedarkita
Per la sicurezza devi filtrare i simboli come ' e " che posso modificarti la query

puoi usare la funzione addslashes per aggiugnere gli \ davanti a questi simboli e quindi evitare questi codici dannosi
Thedarkita non in linea   Rispondi citando
Vecchio 04-02-08, 21:25   #8 (permalink)
User
 
Data di registrazione: Jan 2008
Messaggi: 168
puoi farmi un esempio? grazie
drimmy non in linea   Rispondi citando
Vecchio 04-02-08, 22:44   #9 (permalink)
ModSenior
 
L'avatar di Thedarkita
 
Data di registrazione: Aug 2006
Ubicazione: Messina
Messaggi: 6,439
Invia un messaggio tramite Skype a Thedarkita
Link alla guida ufficiale del php:
it2.php.net/addslashes
Thedarkita non in linea   Rispondi citando
Vecchio 04-02-08, 23:12   #10 (permalink)
User
 
Data di registrazione: Jan 2008
Messaggi: 168
grazie appena ho tempo gli do un'occhiata!
drimmy non in linea   Rispondi citando
Vecchio 04-02-08, 23:13   #11 (permalink)
User
 
Data di registrazione: Feb 2008
Messaggi: 91
attento fai anche un filtraggio per simboli come % < > ' " * e nella pagina stessa che interroga il db perche senno possono essere bypassati editando una richiesta http manualmente...inoltre per evitare proxy o spammer utilizza o le lettere delle immagini (come quella per registrarti qui) oppure un'applet in java che prenda l'ip privato del visitatore ...

un esempio di funzione per validare un campo puo essere:

Codice PHP:
function quote_smart($value)
{

if (
get_magic_quotes_gpc()) {
$value stripslashes($value);
}

if (!
is_numeric($value)) {
$value "'" mysql_real_escape_string($value) . "'";
}
return 
$value;

GreyFox non in linea   Rispondi citando
Vecchio 05-02-08, 15:30   #12 (permalink)
User
 
Data di registrazione: Jan 2008
Messaggi: 168
Quote:
GreyFox
attento devi filtrare gli imput seno è automatica una sqlinjection!
Ho approfondito l'argomento e una sqlinjection è molto pericolosa quanto semplice da fare, quindi è indispensabile metterla fuori uso. Adesso vedo cosa mi avete consigliato di fare e provo a sistemarlo

Quote:
GreyFox
attento fai anche un filtraggio per simboli come % < > ' " * e nella pagina stessa che interroga il db perche senno possono essere bypassati editando una richiesta http manualmente.
Come faccio?


Quote:
GreyFox
inoltre per evitare proxy o spammer utilizza o le lettere delle immagini (come quella per registrarti qui) oppure un'applet in java che prenda l'ip privato del visitatore
A questo penserò quando preparo la pagina per le registrazioni.
drimmy non in linea   Rispondi citando
Vecchio 05-02-08, 15:32   #13 (permalink)
User
 
Data di registrazione: Jan 2008
Messaggi: 168
Al termine del lavoro posto il codice ben commentato di tutte le pagine. Così da poter essere utilizzata da tutti coloro che vogliono una sezione privata nel proprio sito.
drimmy non in linea   Rispondi citando
Vecchio 05-02-08, 16:05   #14 (permalink)
User
 
Data di registrazione: Jan 2008
Messaggi: 168
Quote:
Thedarkita Visualizza il messaggio
La connessione va fatta in ogni pagina quindi conviene fare un file di configurazione ed includerlo in tutte le pagine

per quanto riguarda lo script sarebbe più corretto scrivere:
al posto di :
Codice PHP:
$sqlcmd .="WHERE user='$utente' AND pass='$pass' "
questo:
Codice PHP:
$sqlcmd .="WHERE user='$_POST[utente]' AND pass='$_POST[pass]' "
cosi eviti anche problemi con le impostazioni dei server

Ho fatto il file config.php che includo in tutte le pagine, per la query non ho capito la differenza...
drimmy non in linea   Rispondi citando
Vecchio 05-02-08, 16:16   #15 (permalink)
User
 
Data di registrazione: Jan 2008
Messaggi: 168
Ho aggiunto il filtro addslashes per evitare la sqlinjection e in effetti funziona, riporto il codice completo della pagina accesso:

Codice PHP:
<?php
$utente
=$_POST['utente'];
$pass=$_POST['pass']; // ricevo i dati dal form di login
$utenteaddslashes  ($utente); 
$passaddslashes  ($pass); //filtraggio utente e pass per evitare sqlinjection

include 'configdb.php';

$sqlcmd "SELECT * ";
$sqlcmd .= "FROM utenti ";
$sqlcmd .="WHERE user='$utente' AND pass='$pass' "//select per ricerca dell'user & pass all'interno della tabella
$risultato mysql_query$sqlcmd ); // invio query al db
if (! $risultato)   //controllo interrogazione database
exit ("errore nell'interrogazione: $sqlcmd");

if (
mysql_num_rows ($risultato)==0)  //controllo presenza user e pass nella tabella
{
exit (
"Utente o Password errati");
$accesso="no";  //accesso non effettuato
}
else
$accesso="ok";  //accesso effettuato

session_start();
$_SESSION['accesso']=$accesso;  //salva lo stato di accesso per le seguenti pagine della sessione e il nome utente e pass
$_SESSION['utente']=$utente;
$_SESSION['pass']=$pass;

mysql_close($db);
?>
drimmy non in linea   Rispondi citando
Rispondi
Tags: , ,



Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 12:57.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.