L'uso di mod_rewrite
rende impossibile l'iniezione di array PHP ( manomissione dei parametri dei parametri web ) quando le chiavi sono sconosciuti (e difficili da indovinare)?
Diciamo che abbiamo il seguente URL:
https://example.com/product.php?id=1&action=show
example.com ha deciso di riscrivere gli URL in una versione più carina come:
https://example.com/product/1
Pertanto usano il seguente RewriteRule
:
RewriteRule ^/product/(.*)$ /product.php?id=$1&action=show [L]
Ora le chiavi sono id
e action
e quei valori sono 1
e show
. Capisco che i valori saranno riscritti, nessuna protezione è comunque coinvolta. Le iniezioni sono ancora possibili e così via. Ma le chiavi non possono essere cambiate presumendo che siano sconosciute. In questo esempio ho usato le chiavi ipotizzabili id
e action
ma potevano anche essere due chiavi completamente lunghe e casuali.
Ora la mia domanda riguarda le chiavi. Potrei iniettare uno o più []
nel parametro per fare in modo che il valore di quel id
sia un array PHP invece di una stringa. In questo modo:
https://example.com/product.php?id[]=1&action=show
Per un URL riscritto non è possibile farlo a meno che non si conosca la chiave. Ho ragione? In questo esempio, il seguente sarà ancora possibile perché la chiave è facile da indovinare. L'esempio di seguito che l'URL conoscerà avrà la chiave id
due volte e utilizzerà l'ultimo con il% co_de iniettato.
https://example.com/product/1?id[]=1
Ma presumendo che le chiavi non fossero conosciute e facili da indovinare. Diciamo:
RewriteRule ^/product/(.*)$ /product.php?7b8d164d7820713ef5be524d2bde7828999c78d6=$1&28c4abba80b7a2038328e54a81f51367ead9172a=show [L]
Suppongo che non ci sia modo di iniettare []
senza conoscere i tasti.
Inoltre, quando controlli l'URL corrente nel tuo script PHP per i caratteri []
e ?
puoi impedire i bypass come &
. A mio parere, l'iniezione di matrice o l'alterazione della chiave non sono più possibili solo il valore può essere modificato. Giusto?