Matrice in richieste HTTP GET / POST

0

Nella programmazione del server PHP, le richieste GET / POST codificate URL vengono analizzate in tipo "array" associativo al momento della ricezione. Per la maggior parte del tempo, gli argomenti di query possono essere considerati stringhe, tuttavia a volte determinati argomenti di query vengono analizzati in matrici annidate.

Ad esempio:

query.php?a=123&b[]=456&b[]=789

viene analizzato come

[ 'a'=>"123", 'b'=>["456","789"] ]

Poiché molte funzioni in PHP sono tolleranti ai guasti in modi estremamente inaspettati, vorrei chiedere l'esperienza di questo sito: è generalmente accettabile rifiutare a priori le query senza stringa, evitarle il più possibile e utilizzare interrogare i prefissi dei parametri?

Inoltre, quali sono le pratiche di programmazione consigliate in questo senso?

Motivo per cui chiedere

Recentemente, ho visto un video di YouTube, in cui qualcuno ha utilizzato uno schema di crittografia nazionale per verificare il comando della shell controllato dal client. Ha usato un nonce in argomento POST su hmac con la stringa di comando. Quando il nonce è array, la funzione hmac ha successo verbalmente e la sicurezza viene ignorata. Proviene da un'immagine di Twitter che dice approssimativamente "questo codice PHP contiene un bug mortale".

Aggiorna

In sostanza, ho voluto chiedere, quali sono i modelli generali "sani" della stringa di query. Dato che questo sarebbe troppo ampio e per lo più basato sull'opinione pubblica, dovrebbe essere incluso solo come note a margine nelle risposte.

    
posta DannyNiu 22.02.2018 - 03:29
fonte

1 risposta

1

Sei l'autore del sito web o altrimenti del codice lato server - puoi decidere cosa sia una stringa di query valida o meno. Perché dovresti preoccuparti di ciò che è accettabile? La tua prima responsabilità è progettare la tua API in modo che si comporti come previsto ed essere sicuro, non offrire "cortesia" nell'accettare qualsiasi tipo di input. Al contrario, gli utenti abituali vogliono sapere come hai definito l'API, e gli avversari sono desiderosi di sapere cosa ti manca.

È perfettamente accettabile, ed è anche un strong requisito per validare l'input dell'utente, sempre. Il video spiega un problema con un bug, in quanto l'autore dello snippet non difendeva da un comportamento inaspettato di PHP. Era attesa una stringa e una matrice è stata passata, l'input non è stato convalidato, si è verificato un problema.

Le best practice includono sempre che se stai prendendo input da fonti esterne, devi convalidare, disinfettare o altrimenti verificarlo prima di fare qualsiasi cosa con esso, in base alle regole che hai impostato per la tua API.

P.S .: per chi è interessato, questo è il video a cui fa riferimento OP: video

    
risposta data 22.02.2018 - 09:46
fonte

Leggi altre domande sui tag