Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Funzione sql injection

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150

    Funzione sql injection

    Salve,

    volevo sapere se questa funzione a cui passo dati provenienti da form compilati dagli utenti serve per prevenire l' sql injection e se è sufficiente, ossia è comunque abbastanza sicura:

    Codice PHP:
    function checkstring ($str){
        
    $forbidden=array("<"// HTML + logical operator
                 
    ">"// HTML + logical operator
                 
    "'"// SQL string operator
                 
    "\""// SQL string operator
                 
    "%"// SQL string operator
    //             "&gt", // special character
    //             "&lt", // special character
                 
    ";" // Commands terminator for lots of prog languages
                 
    );
        for (
    $i=0$i<count($forbidden); $i++) {
        
    $repl=$forbidden[$i];
        
    $str=str_replace("$repl","",$str);
        }
        return (
    $str);


  2. #2

    ..............

    for ($i=0; $i<count($forbidden); $i++) {
    $repl=$forbidden[$i];
    $str=str_replace("$repl","",$str);
    }
    Utilità a parte str_replace fa il suo dovere
    senza for !


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    scusate se mi intrometto...whisher...come mai hai detto utilità a parte?

    ciauzzz

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378

    Re: Funzione sql injection

    Originariamente inviato da greystone
    Salve,

    volevo sapere se questa funzione a cui passo dati provenienti da form compilati dagli utenti serve per prevenire l' sql injection e se è sufficiente, ossia è comunque abbastanza sicura:

    Codice PHP:
    function checkstring ($str){
        
    $forbidden=array("<"// HTML + logical operator
                 
    ">"// HTML + logical operator
                 
    "'"// SQL string operator
                 
    "\""// SQL string operator
                 
    "%"// SQL string operator
    //             "&gt", // special character
    //             "&lt", // special character
                 
    ";" // Commands terminator for lots of prog languages
                 
    );
        for (
    $i=0$i<count($forbidden); $i++) {
        
    $repl=$forbidden[$i];
        
    $str=str_replace("$repl","",$str);
        }
        return (
    $str);

    credo che convenga utilizzare l'array per velocizzare la modifica o l'inserimento di nuovi caratteri.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150
    Fatemi capire ??

    Insomma la funzione che ho postato va bene ho devo ritoccare qualcosa ??

    Perchè vengono esclusi i caratteri &gt ed &lt nella funzione??

    Sono esposti sotto forma di commento nella funzione, non conviene includere anche questi due??

  6. #6
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    Per la SQL Injection devi valutare il tipo di dato che ti aspetti (un intero, una stringa qualsiasi, un pattern, ...) e usare per ciascun caso la tecnica piu appropriata tra:
    - type casting
    - escape delle stringhe con mysql_real_escape_string() e simili
    - eliminazione di caratteri pericolosi con str_replace(), se proprio serve
    - validazione con espressioni regolari con preg_match()

    Vedi:
    http://php.html.it/articoli/leggi/89...sql-injection/

    Per filtrare l'HTML semplicemente htmlentities()

    Ovviamente queste sono indicazioni generiche, ti devi muovere in base al tipo di dato che stai trattando
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150
    Ok, ma comunque se non devo fari grandi controlli e lo script non ha una grande importanza ma basta che sia garantito il minimo, la funzione in questione va bene?

  8. #8
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    Direi di no, perchè non consideri altri caratteri che in SQL hanno un significato (come ad esempio l'underscore _ ), e soprattutto perchè è scorretto filtrare dei caratteri quando puoi farne l'escape.

    Un esempio concreto: se filtri l'apice, un tizio che si chiama "D'Amico" non può firmare il tuo guestbook usando il suo nome e puoi trovare esempi analoghi per tutti gli altri caratteri: se hai ad esempio un campo di testo libero.. dovrà essere veramente libero! Discorso diverso per campi specifici tipo il CAP o il codice fiscale.. e li vai di espressioni regolari
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  9. #9
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    150
    Ok, grazie 1000, allora devo documentarmi bene sull' argomento e vedere mysql_real_escape_string() , ecc... come e quando si usano

  10. #10

    .........

    Per la cronaca
    // Provides: Hll Wrld f PHP
    $vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
    $onlyconsonants = str_replace($vowels, "", "Hello World of PHP");

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

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 © 2024 vBulletin Solutions, Inc. All rights reserved.