validaterequest net false example asp asp.net security validation http webforms

false - ¿Los formularios web de ASP.NET validan el valor del botón de opción?



validaterequest asp net 4 (1)

Con una pequeña cantidad de experimentación, he determinado lo siguiente:

  1. El "Valor" de los botones de opción de arriba se pasa en la forma / publicación, y puede manipularse fácilmente. En mi aplicación de prueba alteré el valor configurándolo con un jquery, pero podría modificarse fácilmente en Paros o con MITM (suponiendo que no hay cifrado).

  2. El valor que se pasa en el formulario / publicación no es el mismo valor que devuelve rboControl.Value. De hecho, la única forma de obtenerlo es con Request.Form ["field name"].

  3. El valor que se devuelve de rboControl.Value siempre es el valor en el marcado en sí. Por lo tanto, no es vulnerable a la manipulación.

  4. El valor que se devuelve desde rboControl.Checked parece ser equivalente a la expresión (rboControl.Value == Request.Form ["Field Name"]). Si el valor no coincide con ninguno de los controles, ninguno de ellos devuelve Checked = true.

  5. Todas las afirmaciones anteriores son verdaderas independientemente de si el estado de vista está habilitado para el control en cuestión.

  6. Todas las afirmaciones anteriores son verdaderas independientemente de si ha habilitado la validación de eventos de página.

Entonces, para responder mi propia pregunta, SÍ, el valor del botón de opción se valida a través de una lista blanca en el lado del servidor, y esta validación se realiza automáticamente.

Editar:

Hice algunas pruebas más de naturaleza similar pero en controles desplegables. Mismo hallazgo. Además, si tiene activada la validación de evento de página, ASP emitirá una excepción si el valor de formulario / publicación no coincide con el valor de ninguno de los elementos en el marcado de lista desplegable (o agregado mediante programación, como persistió en ViewState). Lo cual, a saber, hace que sea imposible agregar elementos de lista adicionales en el lado del cliente.

Tengo un formulario web ASP.NET que contiene una lista de botones de opción. Cada botón de radio tiene un valor asociado a él. La lista de botones de radio tiene un control de validador para asegurar que al menos un botón esté marcado.

<input name="Country" value="US" id="CountryUS" type="radio" runat="server" /> <input name="Country" value="Other" id="CountryOther" type="radio" runat="server" />

Según lo entiendo, HTTP convierte un botón de radio en un par nombre / valor donde el nombre es el nombre del botón de opción y el valor es el valor asociado (NO es verdadero / falso).

Si el primer botón de opción está marcado, el tráfico HTTP será

Country=US

y si el segundo está marcado, el tráfico HTTP será

Country=Other

En consecuencia, el valor es libre y claro para ser alterado (por ejemplo, con Paros) casi tan fácilmente como la cadena de consulta puede ser manipulada.

Country=Other''+DROP+TABLE+Users

Normalmente, en una página debe llamar a page.Validate () para activar la validación del lado del servidor. En este caso, sin embargo, la validación del botón de opción es simplemente un validador de índice seleccionado. No hay un validador que verifique explícitamente el valor .

¿Cómo sé que el cliente no ha alterado el valor? ¿Está duplicado en ViewState, y ASP.NET lo verifica automáticamente? ¿O puede un pirata informático poner lo que quiera allí e inyectar necesariamente una cadena en mi sistema (a menos que lo valide manualmente en el código)?