Dichiarazione di dati puliti

0
$clean = array();

$email_pattern = '/^[^@\s<&>]+@([-a-z0-9]+\.)+[a-z]{2,}$/i';

if (preg_match($email_pattern, $_POST['email'])) 
{ 
$clean['email'] = $_POST['email']; 
}

Il codice di esempio sopra ( Origine ) utilizza un array chiamato $clean per memorizzare il valore filtrato da% codice%. È considerato una buona pratica di sicurezza. Quali sono i vantaggi dell'utilizzo di un simile approccio?

    
posta user1463541 19.01.2013 - 13:58
fonte

1 risposta

1

Usando questo approccio rispetto a quale? Non convalida l'input? Convalida l'input ma lo memorizzi in $_POST ?

  1. La mancata convalida dell'input è dannosa per la sicurezza, poiché significa che ti fidi completamente di qualsiasi utente. Nota che la validazione lato client non conta, poiché l'elusione è elementare.

    A proposito, qui la convalida è incompleta e in particolare incoraggia gli attacchi DOS. Se una persona malintenzionata invia un valore molto grande per il campo, la sua valutazione con l'espressione regolare richiederà un'enorme quantità di tempo e risorse, portando infine a una negazione del servizio se la richiesta viene ripetuta abbastanza volte.

    Nel caso particolare dell'indirizzo e-mail, la convalida è anch'essa errata. Ma spetta a te decidere se sei pronto per utilizzare reale, Espressione regolare conforme allo standard RFC822 invece di incollarla con una non corretta.

  2. Memorizza i valori su $_POST , ad esempio facendo qualcosa del tipo:

    if (!AppController::ValidateEmail($_POST['email']))
    { 
        unset($_POST['email']);
    }
    

    è meno rischioso, poiché i valori di $_POST non vengono riassegnati dall'utente, ma presentano ancora uno svantaggio: stai utilizzando una variabile che è in ambito globale. Ciò significa che se si sta chiamando del codice tra il momento in cui si convalidano gli input e quando li si utilizza, questo codice intermedio può modificare i dati di $_POST e introdurre valori imprevisti.

risposta data 19.01.2013 - 15:20
fonte

Leggi altre domande sui tag