¿El uso de mod_rewrite
hace que la inyección de matriz PHP ( manipulación de claves de parámetros web ) sea imposible cuando las claves son desconocidos (y difíciles de adivinar)?
Supongamos que tenemos la siguiente URL:
https://example.com/product.php?id=1&action=show
example.com decidió reescribir las URL a una versión más bonita como:
https://example.com/product/1
Para eso usan el siguiente RewriteRule
:
RewriteRule ^/product/(.*)$ /product.php?id=$1&action=show [L]
Ahora las claves son id
y action
y esos valores son 1
y show
. Entiendo que los valores se volverán a escribir, de todos modos no hay protección. Las inyecciones siguen siendo posibles y así sucesivamente. Pero las claves no se pueden cambiar suponiendo que son desconocidas. En este ejemplo, utilicé las claves adivinables id
y action
, pero también podrían ser dos claves completamente largas y aleatorias.
Ahora mi pregunta es sobre las llaves. Podría inyectar uno o varios []
en el parámetro para hacer que el valor de ese id
sea una matriz de PHP en lugar de una cadena. Así:
https://example.com/product.php?id[]=1&action=show
Para una URL reescrita, no es posible hacerlo a menos que conozca la clave. Estoy en lo cierto En este ejemplo, lo siguiente será posible porque la clave es fácil de adivinar. En el siguiente ejemplo, la URL sabrá que tiene la clave id
dos veces y usará la última con el []
inyectado.
https://example.com/product/1?id[]=1
Pero suponiendo que las claves no eran conocidas y fáciles de adivinar. Digamos:
RewriteRule ^/product/(.*)$ /product.php?7b8d164d7820713ef5be524d2bde7828999c78d6=$1&28c4abba80b7a2038328e54a81f51367ead9172a=show [L]
Supongo que entonces no hay forma de inyectar []
sin conocer las claves.
Además, cuando verifica la URL actual en su script PHP para los caracteres ?
y &
, puede evitar omisiones como https://example.com/product/1?id[]=1
. En mi opinión, la inyección de matriz o la modificación de la clave ya no es posible, solo se puede cambiar el valor. ¿Correcto?