Pagina 7 di 8 primaprima ... 5 6 7 8 ultimoultimo
Visualizzazione dei risultati da 61 a 70 su 76

Discussione: Purga stringhe PHP

  1. #61
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da k.b Visualizza il messaggio
    Come funziona internamente PDO non e' importante...
    Penso invece che lo sia (importante), perché il meccanismo usato da drupal 7 mi sembra molto simile a PDO, e questo mi ha preoccupato un bel pò.
    ...due azioni separate, quindi i valori (passati dall'utente) non si mescolano mai con la stringa che contiene i comandi della query, di fatto eliminando il problema delle injection alla radice.
    Non credo, perché per quanto ne so mysql non è in grado di eseguire questo tipo di comandi.
    Cioè alla fine diventa una singola stringa, che viene passata in un'unica volta a mysql.
    Se questo è vero (e penso che lo sia, o meglio non ho ancora trovato gli statement preparati per mysql, lanciabili per capirci da phpmyadmin) i "magici" statement preparati non sono poi così sicuri al 100%, almeno per mysql, ma non sono così esperto da dimostrarlo.

    E chi e' piu' probabile che abbia varchi? La tua funzione che trasforma "alterazione" in "azione" o il codice sviluppato da decine di persone e utilizzato e testato da decine di migliaia nel mondo per anni?
    Direi entrambi, visto che il codice sviluppato da blablabla si trova molto spesso pieno di voragini.
    Pochi o anche pochissimi progetti opensource nascono con "in mente" fin da subito la sicurezza, la stragrande maggioranza parte come progettini del week end (facebook, wordpress, mysql, php per citare quelli che conosco meglio) ,e POI diventano diffusissimi a livello mondiale ma insicuri per default, e via con patch e patchini.

    Ad esempio or ora mi sono fatto una funzioncina che controlla le liste (quelle con la ,) prima di fare explode, tanto per essere sicuro che qualche "strana" stringa passata da qualche furbacchione venga bloccata prima ancora dell'elaborazione.
    Certo niente di fantascientifico, ma il problema dei [] dovrebbe essere risolto (almeno per liste di numeri interi)
    codice:
    function islista($i_stringa)
    {
     if (!isset($i_stringa))
     {
      return false;
     }
     else
     if (empty($i_stringa))
     {
      return false;
     }
     else
     {
      $risultato = true;
      for ($i = 0; $i <strlen($i_stringa); $i++) 
      {
       if  (($i_stringa[$i]!==',') && (!ctype_digit($i_stringa[$i])))
       {
        $risultato=false;
        break;
       } 
      }
      if ($i_stringa[strlen($i_stringa)-1]===',')
      {
       $risultato=false;
      }
      
      return $risultato;
     }
    }
    NOTA: ma sono tutte necessarie quelle graffe? Negli if si può fare direttamente
    codice:
    if (a==b)
     echo "ciao";
    else
    echo "pippo";
    ?
    In tutti gli esempi che trovo in giro sulla rete ci sono le graffe, ma senza sembra funzionare ugualmente

    Ovviamente, ma lo fa quando manda l'output al browser, non quando salvi i dati nel database. E' la differenza fondamentale che sto cercando di farti capire.
    Infatti l'ho recepito, almeno parzialmente, perché all'upload dei dati continuo a purgare senza pietà il nome del file senza se e senza ma
    Ultima modifica di brancomat; 14-09-2015 a 19:12

  2. #62
    Quote Originariamente inviata da brancomat Visualizza il messaggio
    Non credo, perché per quanto ne so mysql non è in grado di eseguire questo tipo di comandi.
    Cioè alla fine diventa una singola stringa, che viene passata in un'unica volta a mysql.
    Se questo è vero (e penso che lo sia, o meglio non ho ancora trovato gli statement preparati per mysql, lanciabili per capirci da phpmyadmin) i "magici" statement preparati non sono poi così sicuri al 100%, almeno per mysql, ma non sono così esperto da dimostrarlo.
    Quindi non solo sei ignorante, ma hai pure l'arroganza di contestare cose che non conosci senza nessuna base solo perche' "non credi".
    Davvero un ottimo atteggiamento per chi vuole imparare.

  3. #63
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    Scusate se mi intrometto. La discussione è molto interessante (anche se non ho letto tutto).

    Se io immetto per esempio "drdropop tatableble pippo" la funzione di purga mi crea un bel "drop table pippo". Quindi una stringa non si sana con un unico richiamo alla funzione di purga.

    @brancomat. Fossi in te ascolterei quello che ti hanno detto e ripetuto.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #64
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Scusate se mi intrometto. La discussione è molto interessante (anche se non ho letto tutto).

    Se io immetto per esempio "drdropop tatableble pippo" la funzione di purga mi crea un bel "drop table pippo". Quindi una stringa non si sana con un unico richiamo alla funzione di purga.

    @brancomat. Fossi in te ascolterei quello che ti hanno detto e ripetuto.
    ti ringrazio per la segnalazione, ma ci ero già arrivato (come sopra già scritto).
    Basta modificarla un poco.
    Ho già fatto quello che mi hanno detto e ripetuto, ci ho messo circa 2 minuti, ho sostituito tutti gli eco con write.
    Se basta quello per avere un sito sicuro (così come sostenuto) ora ne ho uno blindatissimo, tanto meglio

  5. #65
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da k.b Visualizza il messaggio
    Quindi non solo sei ignorante, ma hai pure l'arroganza di contestare cose che non conosci senza nessuna base solo perche' "non credi".
    Davvero un ottimo atteggiamento per chi vuole imparare.
    Visto che sono tanto ignorante, per favore spiegami se PDO usa questa tecnica
    https://dev.mysql.com/doc/refman/5.0...tatements.html
    oppure no.

  6. #66
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Visto che sono tanto ignorante, per favore spiegami se PDO usa questa tecnica
    https://dev.mysql.com/doc/refman/5.0...tatements.html
    E' dal primissimo post che te lo abbiamo detto! Ci prendi in giro?

  7. #67
    Quote Originariamente inviata da brancomat Visualizza il messaggio
    Visto che sono tanto ignorante, per favore spiegami se PDO usa questa tecnica
    https://dev.mysql.com/doc/refman/5.0...tatements.html
    oppure no.
    Non so, tu che cosa ne dici? http://php.net/manual/en/pdo.prepared-statements.php

  8. #68
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    E' dal primissimo post che te lo abbiamo detto! Ci prendi in giro?
    Scusa sarò anche ignorante, ma stai confondendo gli statement PDO con quelli mysql.

    Visto che mi piace controllare questo codice PHP, scritto or ora (lascia stare che è fatto coi piedi, è un pezzo preso dal codice vero)
    codice:
            
        $gf_tabella=DB_NAME.'.wanazioni';
        try 
        {
            $conn = new PDO(DB_DSN,DB_USER,DB_PASSWORD);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
        } 
    
            
            try 
            {
        $statement = $conn->prepare("INSERT INTO ".$gf_tabella."
                    (data,utente,tipoazione,id,payload1,payload2,payload3,nomecomputer,idwan,idlinkriga)   
                    VALUES 
                    (now(),:utente,'PRESAINCARICO',:id,:utente,concat('In data ',now()),:computer,:ip,:idwan,upper(sha1(uuid())))    ");
                }
        $utente="Pippo";
        $value=100;
        $miocomputer="pluto";
        $idwan=0;
        $ip='127.0.0.1';
        
            $statement->bindParam(':utente', $utente);
                $statement->bindParam(':id', $value);
                $statement->bindParam(':computer', $miocomputer);
                $statement->bindParam(':idwan', $idwan);
                $statement->bindParam(':ip', $ip);
        
                try
                {
                    $statement->execute();
                    echo "tutto OK";
                    
                }
    usa gli statement PDO, e quindi è "supersicuro", ed è inutile sapere come funziona (secondo le teorie di chi ne sa di più).

    Bene, attivando il log delle query il comando sopra diventa questo (fatto fresco fresco)
    codice:
    C:\Program Files\MariaDB 5.5\bin\mysqld.exe, Version: 5.5.34-MariaDB-log (mariadb.org binary distribution). started with:
    TCP Port: 3306, Named Pipe: (null)
    Time                 Id Command    Argument
    150914 20:23:02        1 Connect    root@localhost as anonymous on dbz
                1 Query    INSERT INTO dbz.wanazioni
                    (data,utente,tipoazione,id,payload1,payload2,payload3,nomecomputer,idwan,idlinkriga)   
                    VALUES 
                    (now(),'Pippo','PRESAINCARICO','100','Pippo',concat('In data ',now()),'pluto','127.0.0.1','0',upper(sha1(uuid())))
                1 Quit
    che come vedi è una normalissima insert ACCODATA (giustapposta o come si dice) , non è uno statement preparato mysql.

    Evidentemente PDO si limite a "accodare" per i fatti suoi costruendo la query creando una stringa esattamente come si fa con lo sconsigliatissimo metodo mysql "vecchio", non genera un "vero" statement preparato per mysql.

    Il risultato netto, però, è che se "riescere a prendedere in giro PDO" (ad esempio come con il buco drupal, che usa un metodo che a me ignorante sembra pressochè identico) ottieni un NORMALISSIMO comando mysql del tipo soggetto a SQL injection.

    Può accadere questo? Non lo so, sono indubbiamente ignorante, però mi piace cercar di capire come funzionano davvero le cose, senza limitarmi a "l'hanno scritto in 1000 e sarà perfetto", quando poi passo i pomeriggi a decrittare faticosamente siti che demoliscono le presunte certezze.

  9. #69
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Tutta questa discussione mi ricorda questo scherzo:
    After experiencing difficulties with his computer, a poor, incognizant user called the system maker's technical support line for assistance...

    Technician: Hello. How can I help you today?

    Customer: There's smoke coming from the power supply on my computer...

    Technician: Looks like you need a new power supply...

    Customer: No, I don't! I just need to change the startup files...

    Technician: Sir, what you described is a faulty power supply. You need to replace it...

    Customer: No way! Someone told me that I just had to change the system startup files to fix the problem! All I need is for you to tell me the right command...

    For the next ten minutes, in spite of the technician's efforts to explain the problem and its solution, the customer adamantly insisted that he was right. So, in frustration, the technician responded...

    Technician: I'm sorry. We don't normally tell our customers this, but there's an undocumented DOS command that will fix the problem...

    Customer: I knew it!

    Technician: Just add the line 'LOAD NOSMOKE.COM' at the end of the CONFIG.SYS file and everything should work fine. Let me know how it goes...

    About ten minutes later, the technician received a call back from the customer...

    Customer: It didn't work. The power supply is still smoking...

    Technician: Well, what version of DOS are you using?

    Customer: MS-DOS 6.22... Technician: Well, that's your problem. That version of DOS doesn't include NOSMOKE. You'll need to contact Microsoft and ask them for a patch. Let me know how it all works out...

    When nearly an hour had passed, the phone rang again...

    Customer: I need a new power supply...

    Technician: How did you come to that conclusion?

    Customer: Well, I called Microsoft and told the technician what you said, and he started asking me questions about the make of the power supply...

    Technician: What did he tell you?

    Customer: He said my power supply isn't compatible with NOSMOKE...
    Quindi: si, in realtà tutti noi costruiamo applicazioni insicure di default, che tutti possono violare. In tutti i nostri post ti abbiamo dato consigli sbagliati perché se qualcuno iniziasse a fare le cose nel modo giusto tutto il nostro business crollerebbe immediatamente, e questo non lo possiamo permettere. Alcune volte nei grandi progetti opensource c'è qualcuno che queste falle le trova, ma se i sicari non riescono a raggiungerlo prima che lui apra un ticket pubblico siamo purtroppo costretti a patcharlo. Un'altra vulnerabilità viene però aggiunta al suo posto, per mantenere un certo equilibrio nell'ecosistema.

  10. #70
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da k.b Visualizza il messaggio
    Non so, hai provato a mettere
    codice:
    general-log
    general-log-file=z:\queries.log
    log-output=file
    dentro my.ini e vedere cosa succede?
    Io sì, e sopra c'è il risultato.
    Magari me lo puoi spiegare?

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.