symfony - array - twig documentation
ValidaciĆ³n(vs) SanitizaciĆ³n en Symfony2+Twig? (4)
No debe preocuparse en absoluto por la desinfección de las entradas, Doctrine es inmune a la inyección de sql
Por defecto, se escapa todo el resultado. Entonces, incluso si $ text tiene etiquetas de script, se escapará; visible como texto pero no ejecutado por el navegador. Y si desea hacer clic en http://example.com , existen complementos jquery que pueden hacer eso por usted.
Yo solo pondría la validación, hay
new Symfony/Component/Validator/Constraints/Url() ;
disponible para ti
Necesito que los usuarios ingresen el URI de su sitio web personal en su perfil para que otros usuarios puedan verlo y hacer clic en él. Me preocupa que esto pueda conducir a ataques XSS si la salida no se desinfecta correctamente.
Como en este esquema muy simplista a continuación:
Estoy usando el marco completo de Symfony2 , Doctrine como ORM y Twig como motor de plantillas. Sé que Symfony proporciona algunas herramientas de Validación increíbles, y que TWIG proporciona escapes de salida automáticos (que no es necesario en este caso particular), así como algunos filtros para la desinfección de salida .
He leído lo siguiente sobre cómo Symfony2 y Twig manejan la desinfección :
Doctrine viene con sanitización para inyecciones de bases de datos (SQL). Aparte de esto, no hay una sanitización de entrada recomendada / proporcionada a nivel de controlador en Symfony2. Sin embargo, al usar Twig en la vista, la desinfección de salida está disponible.
Como ejemplo, en CakePHP sin embargo:
La desinfección de datos se implementa como una Utility que se puede acceder desde cualquier lugar (controlador, componente, modelo ... incluso vista). Sigue un enfoque de desinfectar todo con un conjunto fijo de filtros de desinfección predefinidos. Es posible desinfectar entradas específicas con reglas dedicadas, pero parece que no se fomentan. Las reglas existentes se concentran en inyecciones de SQL y HTML y en filtrar los caracteres Unicode sospechosos generales.
1 ¿Cómo manejan los usuarios de symfony2 + twig
sanitización de entrada ? ¿ Descartan por completo la desinfección de las entradas y, por ejemplo, solo confían en la validación ? ¿O escriben su propia función de utilidad para filtrar las entradas del usuario? o tal vez usar una biblioteca como owasp-esapi-php ?
2 ¿Cómo manejan los usuarios de symfony2 + twig
sanitización de salida ? ¿Confían solo en los filtros provistos por el motor twig? Por ejemplo, ¿hay alguna herramienta que pueda usarse para desinfectar un URI ingresado por el usuario, algo similar a esto ?
3 En esta ubicación, ¿cómo manejaría el almacenamiento de la base de datos y la visualización de un URI ingresado por el usuario como en el ejemplo anterior, le importaría en absoluto la desinfección de la entrada? o ¿usaría la desinfección de salida solamente y almacenaría el URI como está?
Creo que Symfony y CakePHP son frameworks y el proceso de salvar no puede conocer correctamente el contexto de entrada y lo que guardará en DB. El desarrollador conoce el contexto, si es URL, HTML, SQL, etc., incluso al generar datos, por lo que a menudo se elige la desinfección de la salida, y si el desarrollador desea implementar la desinfección de la entrada, siempre puede usar algunas herramientas existentes.
Puede usar HTML Purifier para "purificar" todas las entradas de usuario.
El uso de los validadores de formularios proporcionados por Symfony verifica la integridad de los datos suministrados a la base de datos de su aplicación.
Debería considerar agregar una prueba para un patrón de url, hay various
Otros usuarios ya han señalado que estás a salvo contra varios componentes que usan attax (csrf, validación de tipo / propiedad (Symfony-form), sql-injection (Doctrine) y xss (twig) y, por supuesto, autenticación de acceso diferente)
Por lo tanto, para el ataque específico sobre el cual es necesario que el usuario malintencionado envíe una secuencia de comandos y que un usuario deficiente lo visualice y ejecute, puede evitar fácilmente que esto entre en su aplicación con una simple expresión regular de ellos.
preg_replace (''/ (<'' .''script ''.''>) (. *) (</ ''.''script''. ''>) / g'', '''', $ text);
Por lo tanto, creo que es seguro no confiar en el saneamiento de la salida, hay muchas razones, por ejemplo, no usa twig porque su aplicación está basada en un punto final o por alguna razón necesita llamar al filtro en campos de texto o quizás ni siquiera tiene influencia en la pantalla porque los tercios muestran los datos cada uno en el camino.
También hay un buen paquete de Symfony2 que permite a los usuarios implementar el filtrado de entrada en entidades que usan Anotaciones. Me gusta esto :
/**
* @Filter/StripTags()
* @Filter/Trim()
* @Filter/StripNewlines()
*
* @var string
*/
public $email;
El paquete: dms-filter-bundle