Sicurezza dati form per insert e select in database

Malware

Utente Attivo
19 Lug 2012
112
0
0
Di discussioni come questa se ne vedono a palate per il web, ma non sono riuscito a farmi un'idea chiara.

Nel mio small project devo neutralizzare i dati che gli utenti mandano in input dato che in internet niente è sicuro [cit. Borgo Italia :) ].

Questi dati sono pochi (per ora):
-Username
-Password
-Email
-Testo dei messaggi

Io per ora uso una cosa semplice tipo questa per il login o registrazione:
-Tolgo gli apostrofi (sostituisco "'" con "") (li permetto solo nei messaggi)
-controllo lunghezza min e max
-htmlentities
-addshashes

E per le mail nella registrazione devo ancora aggiungere la funzione per controllare che abbia il formato valido

Mentre per il testo dei messaggi:
-htmlentities
-addslashes

Ora parto con le domande:
1. L'addslashes nel login è inutile se tolgo gli apostrofi vero?
2. Con un metodo del genere quanto sarei sicuro da 1 a 10?
3. Ho visto che alcuni considerano addslashes deprecato. Molti giocano con "get_magic_quotes_gpc()": se è attivo usano stripshashes (dicono che get_magic_quotes non sia perfetto) e poi utilizzano mysql_real_escape_string; se invece è disattivo usano semplicemente mysql_real_escape_string.
Questo ragionamento andrebbe bene dato che il mio host non mi permette di modificare php.ini

Ragazzi è da tutto il pomeriggio che leggi post su post ma niente da fare.
Chiedo qui perchè per altre cose mi sono chiarito bene le idee.
Grazie in anticipo
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
considera che è ferragosto e molti sono in spiagga.
comunque cominciamo:
più che togliere intanto io verificherei i dati immessi e se non sono adeguati li farei reinserire senza nemmeno avvicinarsi al db.
es per verificare user e pass potresti usare una funzione di questo tipo
PHP:
//$testo=testo da verificare, $mi lunghezza minima del testo, $ma lunghezza massima
function ver_testo($testo,$mi,$ma){
    $pattern="/^[a-zA-Z0-9]{".$mi.",".$ma."}$/";//al pattern poi puoi eggiungere eventuali carratteri particolari es l'undescore
    if(preg_match($pattern, $testo)){
        //testo ok
        return TRUE;
    }else{
        return FALSE;
    }
}
per l'email
PHP:
$verifica=filter_var($email, FILTER_VALIDATE_EMAIL);//restituisce TRUE se email ok, altrimenti FALSE

per un testo lungo userei
PHP:
$tag_ammessi="<br> <br /> <p>";// strip_tags toglie tutti i tag con esclusione degli ammessi se ci sono
$testo=strip_tags($testo, $tag_ammessi);//strip_tags($testo)toglie tutti i tag es <a></a> e <script></script>
fatto questo (ti scrivo in pseudo codice)
se controlli == TRUE salvi (o fai quello che devi fare)
altrimenti rimandi l'utente al form pulito per un nuovo tentativo

ultimo per ora: la pass dovrebbe essere salvata nel db codificata, come minimo con sha1

comunque se cerchi nel forum trovi diversi post sull'argomento
comunque siamo qui
 

Malware

Utente Attivo
19 Lug 2012
112
0
0
Ciao e grazie per la risposta!

Ho alcuni dubbi:

-Ok per la email;
-Ok per l'username;
-Per la pass uso md5, dici che è meglio fare un md5(sha1($pass))?
-Per il testo, io lascio scrivere tutti i tag che un utente vuole scrivere, ma poi li rendo inoffensivi usando htmlentities. Va bene ugualmente?
-Non hai mai usato addslashes: lo metto sempre vero? E per il discorso di get_magic_quotes_gpc() e mysql_real_escape_string? cosa mi consiglieresti?

Grazie mille
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
-Per la pass uso md5, dici che è meglio fare un md5(sha1($pass))?
dovrebbe essere sufficiente sha1, ho sentito comunque che ci sono delle lib di codifica migliori ma non le conosco, spero che alex legga questo post e ti sappia dire
-Per il testo, io lascio scrivere tutti i tag che un utente vuole scrivere, ma poi li rendo inoffensivi usando htmlentities. Va bene ugualmente?
dipende, se es fai scrivere il testo con uno dei wisi che es aggiungono lo stong, se togli tutto elimini anche lo strong, con strip_tags puoi decidere quali tag lasciare e quali eliminare
io usa addslashes quando salvo nel db e stripslashes quando leggo e visualizzo, non uso mysql_real_escape_string, anche se so che con le pdp ci sono mezzi diversi
 

marco_rx

Utente Attivo
19 Dic 2010
129
0
0
Per la pass uso md5, dici che è meglio fare un md5(sha1($pass))?
L'ideale sarebbe criptare la password con un salt:
PHP:
$cryptedPassword = sha1(sha1($salt) . sha1($password));
In alternativa se vuoi fare una cosa più semplice ma abbastanza sicura usa sha512 per criptare la password:
PHP:
$cryptedPassword = hash('sha512', $password);


Per il testo, io lascio scrivere tutti i tag che un utente vuole scrivere, ma poi li rendo inoffensivi usando htmlentities. Va bene ugualmente?
Dipende dalle tue esigenze, se vuoi consentire l'utilizzo di alcuni tag usa strip_tags, altrimenti htmlentities può andar bene.


on hai mai usato addslashes: lo metto sempre vero? E per il discorso di get_magic_quotes_gpc() e mysql_real_escape_string? cosa mi consiglieresti?
Per evitare questi problemi potresti usare classi per l'astrazione come pdo, che sono soluzioni nettamente migliori.
Altrimenti per quanto riguarda get_magic_quotes_gpc e mysql_real_escape_string fai cosi (addslashes non lo vedo necessario se utilizzi mysql_real_escape_string):
PHP:
// verifichi se il magic quote è attivo, nel caso lo fosse elimini i backslash inseriti da php con stripslashes
if(get_magic_quotes_gpc()) {
    $username = stripslashes($username);
    $email    = stripslashes($email);
    // eventuali altri dati
}

// fatto questo effettui l'escape di eventuali caratteri pericolosi con mysql_real_escape_string
$username = mysql_real_escape_string($username);
$email    = mysql_real_escape_string($email);
// eventuali altri dati
 
Ultima modifica:

Malware

Utente Attivo
19 Lug 2012
112
0
0
L'ideale sarebbe criptare la password con un salt:
PHP:
$cryptedPassword = sha1(sha1($salt) . sha1($password));
In alternativa se vuoi fare una cosa più semplice ma abbastanza sicura usa sha512 per criptare la password:
PHP:
$cryptedPassword = hash('sha512', $password);



Dipende dalle tue esigenze, se vuoi consentire l'utilizzo di alcuni tag usa strip_tags, altrimenti htmlentities può andar bene.



Per evitare questi problemi potresti usare classi per l'astrazione come pdo, che sono soluzioni nettamente migliori.
Altrimenti per quanto riguarda get_magic_quotes_gpc e mysql_real_escape_string fai cosi:
PHP:
// verifichi se il magic quote è attivo, nel caso lo fosse elimini i backslash inseriti da php con stripslashes
if(get_magic_quotes_gpc()) {
    $username = stripslashes($username);
    $email    = stripslashes($email);
    // eventuali altri dati
}

// fatto questo effettui l'escape di eventuali caratteri pericolosi con mysql_real_escape_string
$username = mysql_real_escape_string($username);
$email    = mysql_real_escape_string($email);
// eventuali altri dati


Ok grazie a entrambi.
Si può chiudere^^
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
aspetto a chiudere (può rispondere/interessare a qualcun'altro).
comunque vorrei fare un'osservazione sulle pass.
il criptaggio della pass può essere più o meno buono, ma se es come pass usi "123456" anche con il criptaggio migliore in 5 sec bucano il tuo db.
analogo discorso se usi il nome del tuo gatto.
il problema principale (in funzione del grado di sicurezza che ti serve) è la creazione di pass lunghe (12 o più caratteri) senza senzo compiuto con numeri lettere maiscole e minuscole e un pizzico di caratteri particolari (_*£)
poi, come detto, tutto dipende dalla sicurezza che vuoi e che ti serve, se devi proteggere il conto in banca è una cosa se invece serve per diminuire lo spam è un'altra
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
devi andare a vedere ini.php, in locale (il tuo) non dovresti avere problemi, in remoto non so è facile che tu non possa accedere
 

Malware

Utente Attivo
19 Lug 2012
112
0
0
Ciao
Il mio host non mi permette di modificare ini.php
Controlleró tramite un file php
Thanks
 
Discussioni simili
Autore Titolo Forum Risposte Data
Leoluca SICUREZZA, GRUPPO DI LAVORO E PROFILI MS Access 2
R Mettere in sicurezza una comunicazione .NET Framework 0
NioMio Aruba Sicurezza certificati e ranking di sicurezza 2019/2020 Hosting 1
E [CERCO] Pubblicità per Ebook tema Sicurezza Informatica Vendere e Acquistare pubblicita' online 1
F [php] sicurezza password form login PHP 2
G [PHP] Quali sono tutte le misure di sicurezza che un sito deve avere? PHP 1
W [PHP] Un dettaglio di logica e approccio sulla sicurezza di un progetto. PHP 9
K xamp impostazioni di sicurezza Web Server 5
W [C#] Sicurezza Client/Server - SOAP o RESTFull API .NET Framework 0
W Windows vs Linux per la sicurezza su ATM Windows e Software 0
A Retribuito: Sviluppatore Asp classico esperto in sicurezza webserver IIS e SQL Offerte e Richieste di Lavoro e/o Collaborazione 0
matteoraggi Sicurezza di un server apache con uso limitato Apache 0
K [php] due domande sulla sicurezza PHP 1
S [PHP] $_SESSION e sicurezza... PHP 2
giorgiolovecchio [WordPress] Risorsa http invalida sicurezza sito WordPress 2
KILLERIX Sicurezza dei database nei siti web Database 2
V [PHP] upload di file in cartella e sua sicurezza PHP 137
romeocharly nuove norme di sicurezza paypal Guadagnare col Sito 3
M Formazione per diventare uno specialista di Sicurezza Informatica Sicurezza e Virus 3
A Sicurezza sito PHP 0
P Errore Codice Sicurezza Guestbook Supporto Mr.Webmaster 0
L Paypal - aggiornamenti alla sicurezza PHP 5
L Sicurezza login e limitazione accessi PHP 3
A Non riesco più a visualizzare il codice sicurezza nel forum Supporto Mr.Webmaster 3
A sicurezza wp login failed WordPress 5
R Security Ninja Core Scanner Plugin Sicurezza WordPress 5
I Problemi di sicurezza php PHP 1
voldemort Sicurezza login $_SESSION attacchi XSS CSRF PHP 0
C Sicurezza Textarea PHP 1
F sicurezza script login PHP 3
Akuma consiglio sicurezza per soluzione problema apici PHP 0
filippino phpBB: spam nonostante captcha e domanda di sicurezza phpBB 0
A consiglio sulla sicurezza PHP 5
E [RISOLTO]Sicurezza attacchi con $_session: come viene gestita nella trasmissione server client ? PHP 5
A ricavare il path alle cartelle e sicurezza PHP 5
M Codice di sicurezza su modulo Classic ASP 25
G MyBB: Sicurezza della pagina e del suo contenuto CMS (Content Management System) 2
L problema gestione utenti e sicurezza persone PHP 3
M creare da soli in sicurezza un sito Offerte e Richieste di Lavoro e/o Collaborazione 4
asevenx problema con codice di sicurezza captcha PHP 2
M Sicurezza delle sessioni PHP 25
F Richiesta pillola su sicurezza jQuery 5
B Sicurezza php/mysql form PHP 2
L Database esterno e sicurezza Database 2
J Come usare certificato SSL per la sicurezza PHP 2
G Vendere e comprare in sicurezza in internet Presenta il tuo Sito 0
L Sicurezza nella registrazione PHP 14
T Sicurezza sito Web PHP 11
B Aumentare livello di sicurezza accesso client area riservata Classic ASP 5
I [CERCO] Articolista per browser game o sicurezza informatica Offerte e Richieste di Lavoro e/o Collaborazione 1

Discussioni simili