Verificación de etiquetado de formularios CSRF
La comprobación de etiquetado de formularios de falsificación entre sitios (CSRF) etiqueta cada formulario web enviado por un sitio web protegido a los usuarios con un formulario único e impredecible y, a continuación, examina los formularios web devueltos por los usuarios para asegurarse de que el ID de formulario proporcionado es correcto. Esta comprobación protege contra los ataques de falsificación de solicitudes entre sitios. Esta comprobación solo se aplica a las solicitudes HTML que contienen un formulario web, con o sin datos. No se aplica a las solicitudes XML.
La comprobación de etiquetado de formularios del CSRF evita que los atacantes utilicen sus propios formularios web para enviar grandes volúmenes de respuestas a formularios con datos a sus sitios web protegidos. Esta comprobación requiere una capacidad de procesamiento de la CPU relativamente pequeña en comparación con otras comprobaciones de seguridad que analizan los formularios web en profundidad. Por lo tanto, es capaz de gestionar ataques de gran volumen sin degradar gravemente el rendimiento del sitio web protegido ni del propio Web App Firewall.
Antes de habilitar la comprobación de etiquetado del formulario CSRF, debe tener en cuenta lo siguiente:
- Debe habilitar el etiquetado de formularios. La comprobación CSRF depende del etiquetado del formulario y no funciona sin él.
- Debe inhabilitar la función de almacenamiento en caché integrado de NetScaler para todas las páginas web que contengan formularios protegidos por ese perfil. La función de almacenamiento en caché integrado y el etiquetado de formularios CSRF no son compatibles.
- Debe considerar la posibilidad de habilitar la comprobación de referencias. La comprobación de referencias forma parte de la comprobación de URL de inicio, pero evita la falsificación de solicitudes entre sitios, no las infracciones de la URL de inicio. La comprobación de referencias también supone menos carga para la CPU que la comprobación de etiquetado de formularios CSRF. Si una solicitud infringe la comprobación de referencias, se bloquea inmediatamente, por lo que no se invoca la verificación de etiquetado del formulario CSRF.
- La comprobación de etiquetado de formularios CSRF no funciona con formularios web que utilizan diferentes dominios en la URL de origen del formulario y en la URL de la acción del formulario. Por ejemplo, el etiquetado de formularios CSRF no puede proteger un formulario web con una URL de origen del formulario
http://www.example.com
y una URL de acción de formulario dehttp://www.example.org/form
.pl, porque example.com y example.org son dominios diferentes.
Si utiliza el asistente o la GUI, en el cuadro de diálogo Modificar verificación de etiquetado del formulario CSRF, en la ficha General, puede habilitar o inhabilitar las acciones Bloquear, Registrar, Aprender y Estadísticas.
Si utiliza la interfaz de línea de comandos, puede introducir el siguiente comando para configurar la comprobación de etiquetado del formulario CSRF:
set appfw profile <name> -CSRFtagAction [**block**] [**log**] [**learn**] [**stats**] [**none**]
Para especificar las relajaciones para la comprobación de etiquetado del formulario CSRF, debe utilizar la GUI. En la ficha Cheques del cuadro de diálogo Modificar verificación de etiquetado de formularios CSRF, haga clic en Agregar para abrir el cuadro de diálogo Agregar verificación de etiquetado de formularios CSRF, o seleccione una relajación existente y haga clic en Abrir para abrir el cuadro de diálogo Modificar verificación de etiquetado de formularios CSRF. Cualquiera de los dos cuadros de diálogo proporciona las mismas opciones para configurar una relajación.
Se genera una alerta al establecer el límite de sesión de NetScaler Web App Firewall en un valor de 0 o inferior, ya que dicha configuración afecta a la funcionalidad de comprobación de protección avanzada que requiere una sesión de Web App Firewall que funcione correctamente.
Los siguientes son ejemplos de relajaciones de cheques de etiquetado de formularios CSRF:
Nota: Las siguientes expresiones son expresiones URL que se pueden utilizar tanto en las funciones URL de origen del formulario como en las URL de acción del formulario.
-
Elija las URL que comiencen por
http://www.example.com/search.pl?
y contengan cualquier cadena después de la consulta, excepto una consulta nueva:^http://www[.]example[.]com/search[.]pl?[^?]*$ <!--NeedCopy-->
-
Elija direcciones URL que comiencen por
http://www.example-español.com
y tengan rutas y nombres de archivo compuestos por letras mayúsculas y minúsculas, números, caracteres especiales que no sean ASCII y símbolos seleccionados en la ruta. El carácter ñ y cualquier otro carácter especial se representan como cadenas UTF-8 codificadas que contienen el código hexadecimal asignado a cada carácter especial del juego de caracteres UTF-8:
^http://www[.]example-espa\xC3\xB1ol[.]com/(([0-9A-Za-z]|\x[0-9A-Fa-f][0-9A-Fa-f])
([0-9A-Za-z_-]|\x[0-9A-Fa-f][0-9A-Fa-f])\*/)\*([0-9A-Za-z]|\x[0-9A-Fa-f][0-9A-Fa-f])([0-9A-Za-z_-]|\x[0-9A-Fa-f][0-9A-Fa-f])*[.](asp|htp|php|s?html?)$
<!--NeedCopy-->
- ¿Elegir todas las URL que contienen la cadena /search.cgi? :
^[^?<>]\*/search[.]cgi?[^?<>]\*$
<!--NeedCopy-->
Importante
Las expresiones regulares son potentes. Si no está muy familiarizado con las expresiones regulares en formato PCRE, compruebe las expresiones regulares que escriba. Asegúrese de que definen exactamente la URL que quiere agregar como excepción, y nada más. El uso descuidado de los caracteres comodín, y especialmente de la combinación punto-asterisco (.*) y comodín, puede producir resultados que no desea, como bloquear el acceso a contenido web que no tenía intención de bloquear o permitir un ataque que, de otro modo, la verificación habría bloqueado.
Sugerencia
Cuando el encabezado de referencia EnableValidate esté activado en la acción URL de inicio, asegúrese de que la URL del encabezado de referencia también se añada a StartURL.
Nota
Cuando NetScaler alcanza el límite de appfw_session_y se habilitan las comprobaciones de CSRF, la aplicación web se bloquea.
Para evitar que se congelen las aplicaciones web, reduzca el tiempo de espera de la sesión y aumente el límite de la sesión mediante los siguientes comandos:
Desde la CLI: > configure la configuración de appfw —sessionTimeout 300 Desde shell: root @ns # nsapimgr_wr.sh -s appfw_session_limit=200000
Registrar y generar alarmas SNMP cuando se alcanza appfw_session_limit le ayuda a solucionar problemas y depurar.