Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Controlli di sicurezza prima di una query

    Ciao ragazzi scusatemi sto cercando di capire una cosa:
    io ho un form da cui invio tramite "POST" una textbox ed una textarea quindi poi dato che devo eseguire una query di INSERT volevo fare dei controlli di sicurezza oltre che farli passare per delle funzioni che mi servono per manipolare il testo.
    A questo punto ho utilizzato htmlentities e addslashes ma non riesco a capire se il modo in cui le ho utilizzate è corretto o no e soprattutto se in questo modo riesco ad evitare sql / form injection

    ecco il codice:

    Codice PHP:
    $titolo $_POST['titolo'];
    $textArea $_POST['textArea'];
        
    $titolo htmlentities($titolo);
        
    $titolo addslashes($titolo);
        
        
        
    $textArea urldecode($textArea);        // decodifico ciò che mi è arrivato
        
    $textArea spaziaturaTag($textArea);    // eseguo la spaziatura dei tre caratteri "<>
        
    $textArea htmlentities($textArea);    // trasformo tutto in entità html
        
    $textArea testo_in_url($textArea);    // rilevo delle url nel testo e le trasformo in cliccabili
        
    $textArea nl2p($textArea);            // metto il testo tra tag 

    </p>
        
    $textArea eliminaTagVuoti($textArea);    // elimino tutti i tag che sono rimasti vuoti
        
    $textArea addslashes($textArea);        // aggiungo gli slash per evitare problemi
        

    // query di INSERT<-----

    # funzione che trasforma il testo in url cliccabili
    function testo_in_url($stringa){
      
    // conversione tramite sostituzione con espressioni regolari
      
    return preg_replace("~(http|https)://(.*?)(\s|\n|[,.?!](\s|\n)|$)~""<a href=\"$1://$2\" rel=\"nofollow\">$1://$2</a>$3"$stringa);
    }

    # funzione che trasforma i ritorni a capo con tag 

    </p>
    function 
    nl2p($text) {
      return 
    "

    str_replace("\n""</p>

    "
    $text) . "</p>";


    # funzione che elimina i tag vuoti
    function eliminaTagVuoti($html)
    {
      
    $pattern "/<[^\/>]*>([\s]?)*<\/[^>]*>/";
      return 
    preg_replace($pattern''$html);


    function 
    spaziaturaTag($testo)
    {
        return 
    preg_replace('#([<>"])#'' $1 ',$testo);


  2. #2
    Bhe... si, cosi è sicuro, ma se vuoi essere più sicuro, una buona soluzione e di iniettare del codici sql nel tuo form, per verificare e correggere eventuali vulnerabilità del tuo script.

    In'oltre, se usi, un db mysql credo che tutte quelle funzioni li potrai sostituire direttamente con mysql_real_escape_string(), ma credo che sia la stessa cosa.

  3. #3
    Allora veniamo a noi ho fatto questo:

    Codice PHP:

    $titolo 
    $_POST['titolo'];
    $textArea $_POST['textArea'];

        
    $titolo htmlspecialchars($titolo);
        
    $titolo strip_magic($titolo);
        
    $titoloPerDb mysql_real_escape_string($titolo);

        
    $textArea spaziaturaTag($textArea);    // eseguo la spaziatura dei tre caratteri "<>
        
    $textArea htmlspecialchars($textArea);
        
    $textArea testo_in_url($textArea);    // rilevo delle url nel testo e le trasformo in cliccabili
        
    $textArea nl2p($textArea);            // metto il testo tra tag 

    </p>
        
    $textArea eliminaTagVuoti($textArea);    // elimino tutti i tag che sono rimasti vuoti
        
    $textArea strip_magic($textArea);        // aggiungo gli slash per evitare problemi
        
    $textAreaPerDb mysql_real_escape_string($textArea);


    --->
    QUERY<----

    function 
    strip_magic($value)
    {
        
    $value = (get_magic_quotes_gpc()) ? stripslashes($value) : $value;
        return 
    $value;

    Che ne pensate?

  4. #4
    Io insisto nel suggerire caldamente l'utilizzo della libreria PDO e dei prepared statements ed essere cosi' totalmente al sicuro da qualunque tipo di SQL injection (oltre ad avere mille altri vantaggi).

    Forse a forza di ripeterlo questo forum si convincera' che non ha senso usare le funzioni mysql_* quando esiste un'alternativa migliore, piu' completa e piu' sicura

  5. #5
    ciao kb grazie per la risposta, si l'avevo letto in altre discussioni (ho preferito aprirne un' altra per non riesumare qualcosa di troppo vecchio) ma sinceramente non so proprio come si usa ciò che mi hai suggerito, devo vedere bene come funziona e come devo utilizzarlo per i miei scopi.... Spero sia abbastanza intuitivo...

  6. #6
    Sicurezza e semplicita' non vanno d'accordo. Se vuoi scrivere codice sicuro, devi studiare bene molte cose soprattutto se vuoi fare tutto quanto con le semplici funzioni mysql_*. Ti sembrano intuitive perche' funzionano in maniera diretta, ma scrivere codice sicuro usando quelle funzioni e' sicuramente molto piu' complesso che imparare ad usare PDO (che tutti ritengono complessa, ma non lo e' affatto).

  7. #7
    Ho trovato un articolo molto buono( e breve ) dove spiegano come iniziare ad utilizzarlo anzi se può essere utile a qualcuno lascio il link

    PDO

    Sicuramente per conoscere tutte le sue potenzialità dovrò studiarmelo per bene dai link che mi hai dato e lo farò..

    Il problema è che ho già scrito quasi tutto con il metodo mysql tradizionale e ho paura che devo ricominciare da 0 se voglio utilizzare PDO..

  8. #8
    Per me quel codice va bene.

    Cmq sia, se vuoi non preferisci utilizzare la libreria pdo credo che vale la mia prima risposta, ma se vuoi utilizzare quella libreria, cosa che anche io ora sto vedendo, ti può essere utile questa guida:

    http://www.mrwebmaster.it/php/artico...-pdo_1178.html

    Ma scusate la domanda, pdo è una libreria scaricabile o attivabile dal server, perché su internet, se non sbaglio, o visto entrambi le cose, quale di questa è vera?

    P.S.: Azz... per quando riguarda la guida all'utilizzo di pdo mi anno preceduto

  9. #9
    E' lo stesso link che ho postato io

    La libreria è inclusa nelle ultime versione di PHP come dice la guida, in alcuni casi va attivata dal php.ini e per farlo ti spiega quali righe decommentare!

  10. #10
    Allora credo che in alcuni casi non convenga, visto che deve essere attivata dal server, se il server la ha attivata ovviamente. meglio scaricarla, strano, io ho visto un link che permetteva di scaricarla, allora cos'èra?

    P.S.: Come scritto sopra, o non ho visto il post da te postato o evidentemente quando hai postato io stavo scrivendo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.