Come posso evitare XSS su un input $ _POST?

1

Ho già seguito il suggerimento qui e ha aggiunto:

/* Prevent XSS input */
$_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

nella parte superiore del mio file PHP. Ma la mia domanda è, è il modo in cui utilizzo $ _POST su questo input richiesto sicuro?

if (empty($_POST['number']) || !isset($_POST['number'])) {
    $this->setStatusMessage($translator->translate('please enter your number.'));
    $this->setStatus(KDatabase::STATUS_FAILED);

    return false;
}else{
    $this->telefonnummer = $_POST['number'];
}
    
posta YoKoGFX 10.03.2018 - 23:45
fonte

1 risposta

2

Non pensare a proteggere i tuoi input per prevenire XSS - dovrebbe riguardare tutto l'output.

XSS e altre vulnerabilità di iniezione del codice si verificano quando i dati non sono correttamente convertiti in escape o convertiti per il contesto in cui verranno utilizzati.

Il modo in cui lo fai dipende dalla tecnologia di output e dal contesto. Come AndrolGenhald ha menzionato nei commenti, se stai trasmettendo direttamente da PHP, senza usare una libreria di template, e vuoi usare una variabile nel contesto del codice HTML, dovresti passare attraverso htmlspecialchars . Con altri contesti e tecnologie la risposta sarà diversa. Devi trovare il modo corretto di sfuggire ai dati per ogni contesto.

Se puoi assicurarti di eseguire sempre l'escape dei dati sull'output, non utilizzare FILTER_SANITIZE_STRING. Questo irreversibilmente strappa diverse cose dalla stringa, piuttosto che renderle semplicemente sicure. Su un sito ben fatto come StackExchange sono libero di inviare il codice <script>alert('XSS')</script> , e non viene rimosso, viene semplicemente codificato in modo che il browser lo visualizzi in modo sicuro invece di eseguirlo.

Il codice nella tua domanda non include alcun output, quindi non può essere di per sé vulnerabile a XSS. Devi mostrare il codice che produce un output se vuoi sapere se lo fa in modo sicuro.

    
risposta data 15.03.2018 - 23:37
fonte

Leggi altre domande sui tag