Perché i PHP $ _REQUEST sono considerati malvagi?

3

In base al foglio cheat OWASP PHP :

Using $_REQUEST is strongly discouraged. This super global is not recommended since it includes not only POST and GET data, but also the cookies sent by the request. All of this data is combined into one array, making it almost impossible to determine the source of the data. This can lead to confusion and makes your code prone to mistakes, which could lead to security problems.

Capisco perché questa è una cattiva pratica dal punto di vista della programmazione, ma non capisco le implicazioni sulla sicurezza di questo. Dal momento che l'attaccante - la persona che invia la richiesta - ha il pieno controllo su tutti e tre - ottieni variabili, inserisci variabili e cookie - Non vedo che differenza faccia.

Un problema che ho potuto vedere è se ad es. un WAF controlla la stringa di query per comportamento sospetto, quindi l'utente malintenzionato consegna il payload in un cookie. Ma ci sono altri problemi? Qualcuno può darmi un esempio concreto di come l'utilizzo di $_REQUEST possa causare una vulnerabilità?

    
posta Anders 12.10.2017 - 13:20
fonte

1 risposta

4

Questo perché amplia l'ambito delle richieste XSS riflettenti alle richieste POST, poiché la maggior parte degli script non controlla esplicitamente il verbo HTTP.

Immagina di avere il seguente codice in uno script che di solito si aspetta una richiesta POST:

<?php
if (($order = $orders->fetch($_REQUEST['id'])) === FALSE)
{
    die('Could not find order number ' . $_REQUEST['id']);
}
...

Se sono stati utilizzati $_POST , la vulnerabilità XSS sarebbe ancora presente, ma potrebbe essere attivata solo da un utente che accede prima a una pagina controllata da un utente malintenzionato in modo che un modulo possa inviare l'exploit tramite POST. Invece, l'autore dell'attacco deve solo convincere la vittima a fare clic su un collegamento come:

http://example.com/vulnerable.php?id=<script>alert(document.cookie);</script>

È anche una preoccupazione per altri attacchi di confusione verbale, in cui due parti dello script fanno giudizi separati sul verbo usato (ad esempio si presuppone che si tratti di un GET, l'altro di un POST) con conseguente comportamento imprevisto.

    
risposta data 12.10.2017 - 13:46
fonte

Leggi altre domande sui tag