Pagina 1 di 8 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 76

Discussione: Purga stringhe PHP

  1. #1
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290

    Purga stringhe PHP

    "lurkando" un po' su questo sito e su internet ho messo insieme queste funzioni che, nelle mie intenzioni, andrebbero usate per stampare a video informazioni prese dall'utente (tipo il nome utente e così via attinti da una sessione) o per "sanitizzare" gli input (GET e POST)

    codice:
    function purgastringa($i_stringa,$i_lunghezzamassima)
    {
     if (!isset($i_stringa) || (trim($i_stringa)==="")) 
      return;
     if ($i_lunghezzamassima<=0)
      return;
     $i_stringa=str_ireplace('INSERT','',$i_stringa);
     $i_stringa=str_ireplace('DELETE','',$i_stringa);
     $i_stringa=str_ireplace('UPDATE','',$i_stringa);
     $i_stringa=str_ireplace('LIKE','',$i_stringa);
     $i_stringa=str_ireplace('CREATE','',$i_stringa);
     $i_stringa=str_ireplace('DROP','',$i_stringa);
     $i_stringa=str_ireplace('ALTER','',$i_stringa);
     $i_stringa=str_ireplace('GRANT','',$i_stringa);
     $i_stringa=str_ireplace('TABLE','',$i_stringa);
     $i_stringa=str_ireplace('EXISTS','',$i_stringa);
      
      
     $i_stringa = trim($i_stringa);
     
     $s = str_split($i_stringa, 1);
     $minimo=min(strlen($i_stringa),$i_lunghezzamassima);
     
     for($i=0; $i < min(strlen($i_stringa),$i_lunghezzamassima); $i++)
      if ((!ctype_alnum($s[$i])) && ($s[$i]!==' ') && ($s[$i]!=='!'))
       $s[$i]='';
        return implode(array_slice($s,0,$minimo));
    }
    function write($i_stringa,$i_lunghezza=30)
    {
     echo purgastringa($i_stringa,$i_lunghezza);
    }
    In pratica il classico echo ("ciao utente".$_SESSIONE...) diventerebbe qualcosa del genere write("ciao utente ".$_SESSIONE...)

    Può avere senso, o mi sto complicando la vita?
    Vorrei "distruggere" tutti i possibili sql injection (in ingresso) e XSS (in uscita) ...

  2. #2
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Può avere senso
    No, nessuno.
    Vorrei "distruggere" tutti i possibili sql injection (in ingresso) e XSS (in uscita) ...
    Se ci fosse una magica funzione che "sanitizzasse" () tutti i tuoi input e output, utilizzeremmo tutti quanti quella. Bhè, in realtà php per qualche tempo ha avuto una opzione chiamata "magic-quotes", ormai deprecata ed eliminata, incaricata di filtrare magicamente tutti gli input, ed è stata fonte di imbarazzo per anni.

    Prendi la tua purgastringa Cosa fa? Elimina qualche parola chiave di qualche linguaggio e addizionalmente togliere i caratteri non alfanumerici. Ma perché? Perché dovresti negare ai tuoi utenti la possibilità di scrivere "I like cheese!" o di scegliersi un qualsiasi nickname che contenga altri caratteri, qualche lettera accentata, una emoji, etc.?

    Quindi come dovresti fare per proteggerti? E' sufficiente capire cosa si fa. Se stampi del testo in una pagina html, devi sapere che alcuni caratteri hanno un significato particolare. < e > ad esempio vengono utilizzati per dichiarare un tag (, etc.). In questo contesto, per evitare XSS, puoi convertire quei caratteri in delle entità che le rappresentano ma hanno un altro significato: http://php.net/manual/it/function.ht...alchars.phpNel contesto SQL non va bene, lì altri caratteri hanno altri significati. http://stackoverflow.com/questions/6...ction-in-phpSe devi eseguire un comando con http://php.net/manual/en/function.exec.php , e vuoi passare delle stringhe come argomenti, allora dovrai farlo in modo appropriato: http://php.net/manual/en/function.escapeshellcmd.php

    E così via.

  3. #3
    Utente di HTML.it L'avatar di MiWebDesign
    Registrato dal
    Sep 2015
    residenza
    Palermo
    Messaggi
    38
    Ciao brancomat,

    sinceramente secondo me non ha senso creare queste funzioni self-made, ormai con le versioni di PHP che ci sono hai già tutto pronto.

    Per esempio puoi usare la funzione filter di PHP5 e gli passi il tipo di filtro da applicare, ed è nativo
    Creazione e Realizzazione di Siti Web di Mi Web Design

  4. #4
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Per esempio puoi usare la funzione filter di PHP5 e gli passi il tipo di filtro da applicare, ed è nativo
    Sconsiglio di usare filter. Dovresti fare l'escape dei caratteri. Sono due cose molto diverse: con la prima rimuovi certe parti della stringa, le modifichi secondo qualche regola o la validi secondo alcuni formati, con la seconda fai in modo che certi caratteri speciali non vengano interpretati diversamente da come vorresti.

    Se, aggiornando il campo email della vostra tabella utenti, pensate che per prevenire sql injection sia sufficiente controllare (con filter_var) che il valore dato dall'utente sia una email valida, allora vi meritate l'injection.
    Ultima modifica di .Kurt; 12-09-2015 a 12:23

  5. #5
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da MiWebDesign Visualizza il messaggio
    Ciao brancomat,

    sinceramente secondo me non ha senso creare queste funzioni self-made
    e perchè mai? non è che la libreria PHP abbia chissà quali capacità voodoo, intendo rispetto a un programma qualsiasi

  6. #6
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    No, nessuno.Sì
    Prendi la tua purgastringa Cosa fa? Elimina qualche parola chiave di qualche linguaggio e addizionalmente togliere i caratteri non alfanumerici. Ma perché? Perché dovresti negare ai tuoi utenti la possibilità di scrivere "I like cheese!" o di scegliersi un qualsiasi nickname che contenga altri caratteri, qualche lettera accentata, una emoji, etc.?
    Francamente di emoji, caratteri strani o inglese non è che mi interessi più di tanto.
    La domanda è più modesta, ovvero
    "con una funzione del genere sto sicuro sia per quanto riguarda injection che xss?"
    Se la risposta è SI' allora per me va bene.
    Di corsi di sicurezza PHP ne ho letti mille e sono davvero complicatissimi e difficilissimi da mettere in pratica, per una scelta che non capisco (quella di lasciar liberi di inserire qualsiasi cosa).

    Forse come principiante PHP paradossalmente vedo le cose più "chiaramente".
    Forse.

  7. #7
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    e perchè mai? non è che la libreria PHP abbia chissà quali capacità voodoo, intendo rispetto a un programma qualsiasi
    La differenza tra una funzione/libreria scritta da te ed una scritta da una pluralità di esperti dovrebbe essere abbastanza evidente. Per lo stesso motivo nessuno si sognerebbe di costruirsi una funzione fatta in casa per criptare/decriptare informazioni sensibili, o di usare un browser costruito dal mio vicino di casa.

    La domanda è più modesta, ovvero
    "con una funzione del genere sto sicuro sia per quanto riguarda injection che xss?"
    Se la risposta è SI' allora per me va bene.
    Più che quotare il mio precedente messaggio non so che dirti.

  8. #8
    Utente di HTML.it L'avatar di MiWebDesign
    Registrato dal
    Sep 2015
    residenza
    Palermo
    Messaggi
    38
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Sconsiglio di usare filter. Dovresti fare l'escape dei caratteri. Sono due cose molto diverse: con la prima rimuovi certe parti della stringa, le modifichi secondo qualche regola o la validi secondo alcuni formati, con la seconda fai in modo che certi caratteri speciali non vengano interpretati diversamente da come vorresti.
    Sorry Kurt ma non sono d'accordo, specie sul "Dovresti fare l'escape dei caratteri" come se filter_var non lo facesse.

    Ecco cosa fa filter_var: http://www.w3schools.com/php/filter_sanitize_string.asp

    O sono tonto io o quello che vedo è proprio l'escape dei caratteri/tag HTML, correggimi se sbaglio.


    Se, aggiornando il campo email della vostra tabella utenti, pensate che per prevenire sql injection sia sufficiente controllare (con filter_var) che il valore dato dall'utente sia una email valida, allora vi meritate l'injection.
    A dirla tutto per verificare il campo email basta verificare l'esistenza MX DNS (cosa di due righe in PHP) così sei sicuro che non ti basta inserire: cacca@cacca.it per superare il controllo, quindi lasciamo stare escape e check caratteri ti basta mettere quella condizione.
    Ultima modifica di MiWebDesign; 13-09-2015 a 03:18
    Creazione e Realizzazione di Siti Web di Mi Web Design

  9. #9
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    specie sul "Dovresti fare l'escape dei caratteri" come se filter_var non lo facesse.
    Te lo confermo, filter_var non lo fa, non è il suo scopo: https://www.google.it/webhp?sourceid...in+programming

    A dirla tutto per verificare il campo email basta verificare l'esistenza MX DNS (cosa di due righe in PHP) così sei sicuro che non ti basta inserire: cacca@cacca.it per superare il controllo, quindi lasciamo stare escape e check caratteri ti basta mettere quella condizione.
    No, è insufficiente. Validare una email è una delle cose più difficili da fare. Email come "Abc\@def"@example.com sono valide e potrebbero essere usate. Volete proteggervi da sql injection? Usate le stramaledettissime prepared statements: http://stackoverflow.com/questions/6...jection-in-php
    Questo ovviamente vale anche per te, visto che è un problema presente anche nel tuo portfolio: http://www.marcoingraiti.it/portfoli...()),9%20--%20#

  10. #10
    Utente di HTML.it L'avatar di MiWebDesign
    Registrato dal
    Sep 2015
    residenza
    Palermo
    Messaggi
    38
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Questo ovviamente vale anche per te, visto che è un problema presente anche nel tuo portfolio: http://www.marcoingraiti.it/portfoli...()),9%20--%20#
    Non mi stupisce, Non ho mai controllato nulla nel mio sito, il calzolaio ha sempre le scarpe bucate.

    Grazie per avermelo fatto notare
    Creazione e Realizzazione di Siti Web di Mi Web Design

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.