- Home
- Categorie
- Coding e Sistemistica
- PHP
- Primi esperimenti per login utenti
-
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 :
[php]$sqlcmd .="WHERE user='$utente' AND pass='$pass' ";[/php]
questo:
[php]$sqlcmd .="WHERE user='$_POST[utente]' AND pass='$_POST[pass]' ";[/php]cosi eviti anche problemi con le impostazioni dei server
-
attento devi filtrare gli imput seno è automatica una sqlinjection!
-
@GreyFox said:
attento devi filtrare gli imput seno è automatica una sqlinjection!
ha scritto che per adesso tralasciava la sicurezza...
-
@GreyFox said:
attento devi filtrare gli imput seno è automatica una sqlinjection!
Adesso cerco di ottimizare anche la sicurezza, puoi spiegarmi meglio? grazie
-
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
-
puoi farmi un esempio? grazie
-
Link alla guida ufficiale del php:
it2.php.net/addslashes
-
grazie appena ho tempo gli do un'occhiata!
-
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:
[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;
}
[/php]
-
@GreyFox said:
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
@GreyFox said:
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?
@GreyFox said:
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.
-
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.
-
@Thedarkita said:
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 :
[php]$sqlcmd .="WHERE user='$utente' AND pass='$pass' ";[/php]questo:
[php]$sqlcmd .="WHERE user='$_POST[utente]' AND pass='$_POST[pass]' ";[/php]
cosi eviti anche problemi con le impostazioni dei serverHo fatto il file config.php che includo in tutte le pagine, per la query non ho capito la differenza...
-
Ho aggiunto il filtro addslashes per evitare la sqlinjection e in effetti funziona, riporto il codice completo della pagina accesso:
[php]
<?php
$utente=$_POST['utente'];
$pass=$_POST['pass']; // ricevo i dati dal form di login
$utente= addslashes ($utente);
$pass= addslashes ($pass); //filtraggio utente e pass per evitare sqlinjectioninclude '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 effettuatosession_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);
?>
[/php]
-
Ciao drimmy
Dato che stai iniziando a parlare di sicurezza allora non dimenticare di criptare la password con md5
-
sha1 anche
se vogliamo rimanere nel ragionamento di criptazione
-
ciao, quando applicherò il lavoro sperimentale che sto facendo ad un sito vero e proprio penso che avrò a disposizione il certificato SSL, c'è qualcosa da fare nella programmazione per quanto riguarda SSL? come criptazione password se creo un algoritmo mio di criptazione? tipo moltiplico per 5,435 (un numero a caso) quando vado a inserire la pass nel db e, quando la vado a leggere, divido per lo stesso numero.
-
le codifiche md5 e sha1 sono irreversibili e quindi dovrebbero essere più sicure...
per quanto riguarda il certificato negli script non devi fare niente