casa » Salud » Datos divertidos sobre el sexo de los que nadie más te ha hablado. Datos divertidos sobre el sexo que nadie te ha dicho antes El final completo es fácil 4

Datos divertidos sobre el sexo de los que nadie más te ha hablado. Datos divertidos sobre el sexo que nadie te ha dicho antes El final completo es fácil 4

Necesitas definir el mejor momento concebir, prevenir embarazos no deseados o averiguar cuándo será mejor tener relaciones sexuales con su pareja? Anteriormente, las mujeres tenían que ir a su médico para una consulta, pero ahora tienen un nuevo mejor amigo: un teléfono inteligente.

V últimos años Hay muchas aplicaciones para mujeres que te permiten rastrear fácilmente tus días fértiles y cuándo ovulas, y tomar notas personales. Además, tienen muchas otras funciones. Una de esas aplicaciones es Glow, que ya utilizan 47 millones de mujeres. Glow te permite rastrear cosas como el estado de ánimo de las mujeres y la calidad y frecuencia del sexo. Gracias a esta aplicación, fue posible obtener estos Datos interesantes sobre la vida íntima de mujeres de todo el mundo.

Los mejores países para las mujeres

1. ¿Echas de menos la intimidad? Vaya a Canadá. Resulta que los canadienses tienen relaciones sexuales un 45% más a menudo que los usuarios promedio de aplicaciones.

2. Pero tenga cuidado: Canadá es un gran lugar para quedar embarazada. Las mujeres canadienses pueden quedar embarazadas un 21% más fácilmente que el resto.

3. Las mujeres australianas también tienen relaciones sexuales con frecuencia, un 37% más que el promedio de usuarios de aplicaciones.

4. No hace falta decir que las mujeres en Australia también tienen buenas posibilidades de quedar embarazadas. Los tienen un 14% más altos que otros usuarios.

5. Estados Unidos - un buen lugar para ser feliz. Las mujeres estadounidenses tienen un 16% más de probabilidades que otras mujeres de tener relaciones sexuales.

6. ¿El peor lugar para ser feliz? America latina. Aquí las mujeres tienen relaciones sexuales un 4% menos que el usuario medio de una aplicación.

Apetitos sexuales

1. El apetito sexual de una mujer coincide con el suyo ciclo mensual... El primer día de su ciclo es el primer día de su período, que dura aproximadamente cinco días. Por lo tanto, las mujeres están menos interesadas en el sexo de uno a cinco días al mes.

2. Muchas mujeres informan un cambio en el nivel de energía o el estado de ánimo durante este tiempo, y esto generalmente se asocia con una disminución del deseo sexual. Además, las mujeres están menos interesadas en el sexo durante toda una semana después de la menstruación.

3. La mayoría de las mujeres comienzan a tener relaciones sexuales nuevamente a los 12 días de su ciclo.

4. Muchas mujeres mantienen relaciones sexuales regulares entre el día 12 y el 14 del ciclo. La aplicación Glow llama a estos días "la cima de la sexualidad".

5. De hecho, las mujeres se sienten más sexys los días 13 y 14 de su ciclo. Pero aquí está lo interesante: no necesariamente obtienen el mejor y más satisfactorio sexo en este momento.

6. La mayoría de las mujeres disfrutan del sexo en el último día 30 de su ciclo. Este día en el Resplandor está marcado como el "pico de los orgasmos".

¿Están las mujeres satisfechas?

1. Las mujeres se sienten más felices los días 15 y 16 de su ciclo, así como cuando han tenido mucho sexo en los días anteriores.

2. Los usuarios de Glow han registrado 7,6 millones de contactos sexuales en dos años.

3. Esto significa que cada minuto al menos siete mujeres que usan la aplicación Glow mantienen relaciones sexuales.

4. Por cierto, los usuarios también han informado estar enamorados 2 millones de veces. La aplicación también rastrea los ciclos sexuales y la fertilidad de 88,000 parejas.

5. Desafortunadamente, a pesar de los contactos sexuales existentes, no todas las mujeres están satisfechas con ellos. Casi un tercio de las mujeres están dispuestas a renunciar al sexo en lugar de a un teléfono inteligente.

6. Pero eso todavía significa que dos tercios preferirían renunciar a los teléfonos antes que al sexo.

Hola. Mi nombre es Sasha Barannik. En Mail.Ru Group, gestiono el departamento de desarrollo web con 15 empleados. Hemos aprendido a crear sitios para decenas de millones de usuarios y estamos tratando tranquilamente con varios millones de audiencias diarias. Yo mismo he estado haciendo desarrollo web durante aproximadamente 20 años, y durante los últimos 15 años he estado programando principalmente en PHP. Aunque las capacidades del lenguaje y el enfoque de desarrollo han cambiado mucho durante este tiempo, comprender las principales vulnerabilidades y poder defenderse de ellas siguen siendo las habilidades clave de cualquier desarrollador.

Hay muchos artículos y guías de seguridad en Internet. Este libro me pareció bastante detallado, a la par que lacónico y comprensible. Espero que le ayude a aprender algo nuevo y a que sus sitios sean más fiables y seguros.

P. S. El libro es extenso, por lo que la traducción se distribuirá en varios artículos. Entonces empecemos ...

¿Otro libro sobre seguridad PHP?

Hay muchas formas de comenzar un libro sobre seguridad PHP. Desafortunadamente, no he leído ninguno de ellos, así que tendré que resolverlo mientras escribo. Quizás empezaré con lo más básico y espero que todo salga bien.

Si observamos una aplicación web abstracta lanzada en línea por la empresa X, podemos suponer que contiene una serie de componentes que, si se piratean, podrían causar un daño significativo. Cual, por ejemplo?

  1. Daño a los usuarios: obtener acceso a correo electrónico, contraseñas, datos personales, detalles tarjetas bancarias, secretos comerciales, listas de contactos, historial de transacciones y secretos profundamente guardados (como alguien que llama a su perro Shiny). La filtración de estos datos perjudica a los usuarios (particulares y empresas). Las aplicaciones web que hacen un mal uso de dichos datos y los sitios que utilizan la confianza del usuario en su beneficio también pueden ser perjudiciales.
  2. Daño a la propia empresa X: debido al daño causado a los usuarios, la reputación se deteriora, se debe pagar una compensación, se pierde información comercial importante, surgen costos adicionales, por infraestructura, mejora de la seguridad, liquidación de consecuencias, costos legales, grandes beneficios para los altos directivos despedidos, etc.
Me centraré en estas dos categorías, ya que incluyen la mayoría de las molestias que un sistema de seguridad de aplicaciones web debería prevenir. Todas las empresas que se enfrentan a graves violaciones de seguridad escriben rápidamente en los comunicados de prensa y en los sitios web lo sensibles que son para ella. Así que le aconsejo que sienta la importancia de este problema con todo su corazón de antemano, antes de afrontarlo en la práctica.

Desafortunadamente, los problemas de seguridad a menudo se tratan de manera retroactiva. Se cree que lo más importante es crear una aplicación que funcione y que satisfaga las necesidades de los usuarios, con un presupuesto y un marco de tiempo aceptables. Este es un conjunto de prioridades perfectamente comprensible, pero la seguridad no se puede ignorar para siempre. Es mucho mejor tenerlo en cuenta en todo momento, implementando soluciones específicas durante el desarrollo, cuando el costo de los cambios aún es pequeño.

La naturaleza secundaria de la seguridad es en gran medida el resultado de una cultura de programación. Algunos programadores comienzan a sudar frío ante la idea de una vulnerabilidad, mientras que otros pueden cuestionar la existencia de una vulnerabilidad hasta que puedan demostrar que no es una vulnerabilidad en absoluto. Entre estos dos extremos, hay muchos programadores que simplemente se encogen de hombros porque las cosas aún no les han salido mal. Les resulta difícil comprender este extraño mundo.

Dado que el sistema de seguridad de una aplicación web debe proteger a los usuarios que confían en los servicios de la aplicación, es necesario conocer las respuestas a estas preguntas:

  1. ¿Quién quiere atacarnos?
  2. ¿Cómo pueden atacarnos?
  3. ¿Cómo podemos detenerlos?

¿Quién quiere atacarnos?

La respuesta a la primera pregunta es muy sencilla: todo y todo. Sí, todo el universo quiere enseñarte una lección. ¿Un niño con una computadora overclockeada que ejecuta Kali Linux? Probablemente ya te ha atacado. ¿Un hombre suspicaz al que le gusta meterse en sus ruedas? Probablemente ya haya contratado a alguien para que te ataque. ¿API REST confiable a través de la cual obtiene datos cada hora? Probablemente fue pirateado hace un mes para brindarle datos infectados. ¡Incluso yo puedo atacarte! Así que no tienes que creer ciegamente en este libro. Considere que estoy mintiendo. Y encontrar un programador que me lleve al agua potable y exponga mis malos consejos. Por otro lado, tal vez él también te va a piratear ...

El significado de esta paranoia es facilitar la categorización mental de todo lo que interactúa con su aplicación web ("Usuario", "Hacker", "Base de datos", "Entrada no confiable", "Administrador", "API REST") y luego asignar un índice de confianza para cada categoría. Obviamente, no se puede confiar en "Hacker", pero ¿qué pasa con "Base de datos"? "Entrada insegura" recibió su nombre por una razón, pero ¿realmente filtrarías una publicación de blog del feed Atom de confianza de tu colega?

Aquellos que se toman en serio la piratería de aplicaciones web aprenden a aprovechar este pensamiento, la mayoría de las veces atacando fuentes de datos vulnerables, sino más bien las de confianza, que tienen menos probabilidades de tener una buena seguridad. Esta no es una decisión aleatoria: en vida real los sujetos con un índice de confianza más alto son menos sospechosos. Son estas fuentes de datos a las que presto atención principalmente cuando analizo una aplicación.

Volvamos a las "Bases de datos". Suponiendo que un pirata informático pueda obtener acceso a una base de datos (y nosotros, las personas paranoicas, siempre asumimos eso), nunca se podrá confiar en ella. La mayoría de las aplicaciones confían en las bases de datos sin ninguna pregunta. Desde fuera, la aplicación web parece un todo, pero por dentro es un sistema de componentes separados que intercambian datos. Si consideramos que todos estos componentes son confiables, si uno de ellos es pirateado, todos los demás se verán comprometidos rápidamente. Tales problemas de seguridad catastróficos no se pueden resolver con la frase "Si la base es pirateada, aún perdemos". Puede decirlo, pero no es en absoluto un hecho que tendrá que hacer esto si inicialmente no confía en la base y actúa en consecuencia.

¿Cómo pueden atacarnos?

La respuesta a la segunda pregunta es una lista bastante extensa. Puede ser atacado desde cualquier lugar de donde cada componente o capa de su aplicación web obtenga sus datos. Básicamente, las aplicaciones web simplemente procesan datos y los mueven de un lugar a otro. Solicitudes de usuario, bases de datos, API, feeds de blogs, formularios, cookies, repositorios, variables de entorno PHP, archivos de configuración, nuevamente archivos de configuración, incluso archivos PHP que ejecute; todos ellos pueden potencialmente infectarse con datos para romper la seguridad y causar daños. . De hecho, si los datos maliciosos no están explícitamente presentes en el código PHP utilizado para la solicitud, es probable que vengan como una "carga útil". Se asume que a) usted escribió el código fuente PHP, b) fue revisado apropiadamente yc) los representantes de organizaciones criminales no le pagaron.

Si usa fuentes de datos sin verificar que los datos sean completamente seguros y aptos para su uso, entonces está potencialmente expuesto a un ataque. También debe verificar que los datos recibidos coincidan con los datos que está enviando. Si los datos no están completamente seguros para su retiro, usted también tendrá serios problemas. Todo esto se puede expresar como una regla de PHP “Comprobar entrada; filtrar la salida ".

Estas son fuentes obvias de datos que debemos controlar de alguna manera. Las fuentes también pueden incluir repositorios del lado del cliente. Por ejemplo, la mayoría de las aplicaciones reconocen a los usuarios asignándoles ID de sesión únicos, que pueden almacenarse en cookies. Si un atacante obtiene el valor de la cookie, puede hacerse pasar por otro usuario. Y aunque podemos reducir algunos de los riesgos asociados con la interceptación o falsificación de datos del usuario, no podemos garantizar la seguridad física de la computadora del usuario. Ni siquiera podemos garantizar que los usuarios encuentren "123456" la contraseña más estúpida después de "contraseña". Se agrega un toque adicional por el hecho de que hoy las cookies no son el único tipo de almacenamiento del lado del usuario.

Otro riesgo que a menudo se pasa por alto es la integridad de su código fuente. En PHP, es cada vez más popular desarrollar aplicaciones basadas en un número grande Bibliotecas, módulos y paquetes de marco débilmente acoplados. Muchos de estos se descargan de repositorios públicos como Github y se instalan mediante instaladores de paquetes como Composer y su compañero web Packagist.org. Por lo tanto, la seguridad del código fuente depende completamente de la seguridad de todos estos servicios y componentes de terceros. Si Github está comprometido, lo más probable es que se use para distribuir código con un complemento malicioso. Si es Packagist.org, el atacante podrá redirigir las solicitudes de paquetes a sus propios paquetes maliciosos.

Composer y Packagist.org están expuestos actualmente a vulnerabilidades conocidas de detección de dependencias y distribución de paquetes, así que siempre verifique todo lo que esté en producción y verifique la fuente de todos los paquetes con Packagist.org.

¿Cómo podemos detenerlos?

Irrumpir en la seguridad de una aplicación web puede ser ridículamente simple y llevar mucho tiempo. Es justo asumir que cada aplicación web tiene una vulnerabilidad en algún lugar. La razón es simple: todas las aplicaciones son creadas por personas y las personas tienden a cometer errores. Así que la seguridad perfecta es una quimera. Todas las aplicaciones pueden contener vulnerabilidades y la tarea de los programadores es minimizar los riesgos.

Tendrá que pensar detenidamente para reducir la probabilidad de daño de un ataque a una aplicación web. En el transcurso de la historia, hablaré sobre los posibles métodos de ataque. Algunos de ellos son obvios, otros no. Pero en cualquier caso, para poder solucionar el problema, es necesario tener en cuenta algunos principios básicos de seguridad.

Principios básicos de seguridad

Al desarrollar equipos de protección, su eficacia se puede evaluar utilizando las siguientes consideraciones. Algunos ya los he dado arriba.
  1. No confíes en nada ni en nadie.
  2. Asuma siempre el peor de los casos.
  3. Aplicar defensa en profundidad.
  4. Cíñete al principio Keep It Simple Stupid (KISS).
  5. Cíñete al principio de "privilegio mínimo".
  6. Los atacantes perciben la ambigüedad.
  7. Lea la documentación (RTFM), pero nunca confíe en ella.
  8. Si esto no se ha probado, entonces no funciona.
  9. ¡Siempre es tu culpa!
Repasemos todos los puntos brevemente.

1. No te fíes de nada ni de nadie

Como se indicó anteriormente, la posición correcta es asumir que todos y todo lo que interactúa con su aplicación web quieren piratearla. Incluyendo otros componentes o capas de la aplicación que se necesitan para procesar solicitudes. Todo y todo. Sin excepciones.

2. Asume siempre el peor de los casos

Muchos sistemas de seguridad tienen una cosa en común: no importa qué tan bien hechos estén, todos pueden ser violados. Si tiene esto en cuenta, comprenderá rápidamente la ventaja del segundo punto. El peor de los casos ayudará a evaluar el alcance y la gravedad de un ataque. Y si sucede, es posible que pueda mitigar las consecuencias desagradables con protecciones adicionales y cambios arquitectónicos. ¿Quizás la solución tradicional que está utilizando ya haya sido reemplazada por algo mejor?

3. Aplicar defensa en profundidad

La protección multinivel se toma prestada de la ciencia militar, porque la gente se ha dado cuenta de que numerosas paredes, sacos de arena, equipo, chalecos antibalas y frascos, que cubren los órganos vitales de las balas y espadas enemigas, son el enfoque correcto para la seguridad. Nunca se sabe cuál de los siguientes no protegerá, y debe asegurarse de que varios niveles de protección le permitan confiar en más de una fortificación de campo o formación de batalla. Por supuesto, no se trata solo de rechazos individuales. Imagínense a un atacante que trepó por una escalera gigante por una muralla medieval y descubrió que había otra pared detrás de ella, desde donde recibió una lluvia de flechas. Los piratas informáticos sentirán lo mismo.

4. Keep It Simple Stupid (KISS)

Los mejores remedios son siempre sencillos. Son fáciles de desarrollar, implementar, comprender, usar y probar. La simplicidad reduce los errores, anima trabajo correcto aplicaciones y facilita la implementación incluso en los entornos más complejos y hostiles.

5. Adherirse al principio de "privilegio mínimo"

Cada participante en el intercambio de información (usuario, proceso, programa) debe tener solo aquellos derechos de acceso que necesita para realizar sus funciones.

6. Los atacantes perciben la ambigüedad

La "seguridad a través de la oscuridad" se basa en la suposición de que si usa la Defensa A y no le dice a nadie qué es, cómo funciona o si existe, entonces mágicamente lo ayuda porque los atacantes están perdidos. De hecho, esto solo ofrece una pequeña ventaja. A menudo, un atacante experto puede averiguar qué acción está tomando, por lo que también debe usar defensas explícitas. Aquellos que están demasiado convencidos de que una protección vaga anula la necesidad de una protección real deberían ser castigados específicamente para deshacerse de las ilusiones.

7. Lea la documentación (RTFM), pero nunca confíe en ella

El manual de PHP es la Biblia. Por supuesto, no fue escrito por Flying Spaghetti Monster, por lo que formalmente puede contener una cierta cantidad de medias verdades, defectos, malas interpretaciones o errores que aún no se han notado o corregido. Lo mismo ocurre con Stack Overflow.

Las fuentes especializadas de conocimientos sobre seguridad (específicas de PHP y no orientadas a PHP) generalmente brindan conocimientos más detallados. Lo más parecido a la Biblia de seguridad PHP es el sitio OWASP, con artículos, tutoriales y consejos que se ofrecen. Si no recomienda hacer algo en OWASP, ¡nunca lo haga!

8. Si esto no se ha probado, entonces no funciona.

Al implementar protecciones, debe escribir todas las pruebas que necesita para validar. Esto incluye fingir ser el hacker por el que llora la prisión. Esto puede parecer descabellado, pero la familiaridad con las técnicas de piratería de aplicaciones web es una buena práctica; aprenderá sobre posibles vulnerabilidades y su paranoia se intensificará. Sin embargo, no es necesario informar a la gerencia sobre la gratitud recién adquirida por piratear la aplicación web. Asegúrese de utilizar herramientas automatizadas para identificar vulnerabilidades. Son útiles, pero, por supuesto, no sustituyen a las revisiones de códigos de calidad ni a las pruebas manuales de aplicaciones. Cuantos más recursos gaste en pruebas, más confiable será su aplicación.

9. ¡Siempre es tu culpa!

Los programadores están acostumbrados a pensar que las vulnerabilidades de seguridad se encontrarán como ataques aislados, con consecuencias insignificantes.

Por ejemplo, las fugas de datos (una forma de piratería bien documentada y generalizada) a menudo se consideran pequeños problemas de seguridad porque no afectan directamente a los usuarios. Sin embargo, la filtración de información sobre versiones de software, lenguajes de desarrollo, ubicación del código fuente, lógica comercial y de aplicación, estructura de la base de datos y otros aspectos del entorno de la aplicación web y las operaciones internas es a menudo importante para un ataque exitoso.

Al mismo tiempo, los ataques a los sistemas de seguridad suelen ser combinaciones de ataques. Por separado, tienen poco valor, pero al mismo tiempo a veces abren el camino a otros ataques. Por ejemplo, la inyección de SQL a veces requiere un nombre de usuario específico, que se puede obtener mediante un ataque de tiempo contra la interfaz de administración, en lugar de la fuerza bruta mucho más cara y visible. A su vez, la inyección SQL le permite implementar un ataque XSS en una cuenta administrativa específica sin llamar la atención con una gran cantidad de entradas sospechosas en los registros.

El peligro de considerar las vulnerabilidades de forma aislada radica en subestimar su amenaza y, por lo tanto, ser demasiado descuidado con ellas. Los programadores suelen ser demasiado vagos para corregir una vulnerabilidad porque la consideran demasiado insignificante. También se practica transferir la responsabilidad del desarrollo seguro a los programadores o usuarios finales, y a menudo sin documentar problemas específicos: ni siquiera se reconoce la existencia de estas vulnerabilidades.

La aparente insignificancia no es importante. Es irresponsable obligar a los programadores o usuarios a arreglar sus vulnerabilidades, especialmente si ni siquiera se ha informado sobre ellas.

Validación de entrada

La validación de entrada es el perímetro de defensa exterior de su aplicación web. Protege la lógica empresarial central, el procesamiento de datos y la generación de resultados. Literalmente, todo lo que se encuentre fuera de este perímetro, excepto el código ejecutado por la solicitud actual, se considera territorio enemigo. Todas las posibles entradas y salidas del perímetro están vigiladas día y noche por centinelas guerreros que primero disparan y luego hacen preguntas. Adjuntos al perímetro hay "aliados" protegidos por separado (y de aspecto muy sospechoso), incluidos "Modelo", "Base de datos" y "Sistema de archivos". Nadie quiere dispararles, pero si intentan tentar al destino ... bang. Cada aliado tiene su propio perímetro, que puede o no confiar en el nuestro.

¿Recuerdas mis palabras sobre en quién puedes confiar? Nadie ni nada. En el mundo PHP, hay consejos en todas partes para no confiar en la "entrada del usuario". Esta es una de las categorías en términos de grado de confianza. Suponiendo que no se puede confiar en los usuarios, creemos que se puede confiar en todo lo demás. Esto no es verdad. Los usuarios son la fuente de información más obvia y poco confiable porque no los conocemos y no podemos controlarlos.

Criterios de prueba

La validación de entrada es la protección más obvia y más débil para una aplicación web. La gran mayoría de vulnerabilidades se deben a fallas en el sistema de verificación, por lo que es muy importante que esta parte de la protección funcione correctamente. Puede fallar, pero aún así se adhiere a las siguientes consideraciones. Cuando implemente validadores personalizados y utilice bibliotecas de validación de terceros, tenga siempre en cuenta que las soluciones de terceros tienden a realizar tareas comunes y omiten los procedimientos de validación clave que su aplicación puede necesitar. Cuando utilice bibliotecas destinadas a necesidades de seguridad, asegúrese de verificarlas de forma independiente en busca de vulnerabilidades y su correcto funcionamiento. También le recomiendo que recuerde que PHP puede exhibir un comportamiento extraño y posiblemente inseguro. Eche un vistazo a este ejemplo extraído de funciones de filtrado:

Filter_var ("php: //example.org", FILTER_VALIDATE_URL);
El filtro se pasa sin cuestionar. El problema es que la URL php: // aceptada se puede pasar a una función PHP que espera recibir una dirección HTTP remota en lugar de devolver datos del script PHP ejecutable (a través de un controlador PHP). La vulnerabilidad surge porque la opción de filtro no tiene un método para limitar los URI válidos. Aunque la aplicación espera enlaces http, https o mailto y no algún URI específico de PHP. Es necesario por todos los medios evitar esto, un enfoque demasiado general para la verificación.

Cuidado con el contexto

La validación de entrada debe evitar que los datos no seguros ingresen a la aplicación web. Grave escollo: las comprobaciones de seguridad de los datos se realizan normalmente solo para el primer uso previsto.

Digamos que recibí datos que contienen un nombre. Puedo verificarlo fácilmente en busca de apóstrofos, guiones, corchetes, espacios y una gran cantidad de caracteres alfanuméricos Unicode. El nombre son datos válidos que se pueden utilizar para la visualización (primer uso previsto). Pero si lo usa en otro lugar (por ejemplo, en una consulta a la base de datos), aparecerá en un nuevo contexto. Y algunos de los caracteres permitidos en un nombre son peligrosos en este contexto: si el nombre se convierte en una cadena para realizar una inyección SQL.

Resulta que la validación de entrada es intrínsecamente poco confiable. Es más eficaz para recortar valores inequívocamente no válidos. Digamos cuando algo necesita ser un número entero, una cadena alfanumérica o una URL HTTP. Dichos formatos y significados tienen sus limitaciones y, si se controlan adecuadamente, es menos probable que representen una amenaza. Otros valores (texto ilimitado, matrices GET / POST y HTML) son más difíciles de verificar y es más probable que contengan datos maliciosos.

Dado que la mayoría de las veces nuestra aplicación transferirá datos entre contextos, no podemos simplemente verificar todos los datos de entrada y considerar el caso completo. La verificación de entrada es solo el primer circuito de protección, pero de ninguna manera el único.

Junto con la validación de los datos de entrada, un método de protección muy utilizado como el escape. Con su ayuda, los datos se verifican por seguridad al ingresar a cada nuevo contexto. Por lo general, este método se usa para protegerse contra el cross-site scripting (XSS), pero tiene demanda en muchas otras tareas, como herramienta de filtrado.

Escapar protege contra malas interpretaciones por parte del destinatario de los datos salientes. Pero esto no es suficiente: a medida que los datos ingresan a un nuevo contexto, se necesita una verificación específicamente para un contexto específico.

Si bien esto puede percibirse como una duplicación de la validación en la entrada inicial, de hecho, los pasos de validación adicionales son más adecuados para adaptarse al contexto actual cuando los requisitos de datos son muy diferentes. Por ejemplo, los datos que provienen de un formulario pueden contener un porcentaje. En el primer uso, verificamos que el valor sea un número entero. Pero al transferir nuestra aplicación al modelo, pueden surgir nuevos requisitos: el valor debe encajar en un rango determinado, que es obligatorio para que funcione la lógica de negocio de la aplicación. Y si esta verificación adicional no se realiza en el nuevo contexto, pueden surgir problemas graves.

Use solo listas blancas, no listas negras

Las listas negras y las listas blancas son dos enfoques principales para la validación de entrada. Negro significa verificar datos no válidos y blanco significa verificar datos válidos. Es preferible incluirlos en la lista blanca porque solo los datos que esperamos se transmiten durante la validación. A su vez, las listas negras solo tienen en cuenta las suposiciones de los programadores sobre todos los posibles datos erróneos, por lo que es mucho más fácil confundirse, perderse algo o cometer un error.

Cualquier rutina de validación diseñada para hacer que HTML sea seguro para la salida sin escape en una plantilla es un buen ejemplo. Si usamos una lista negra, entonces debemos verificar que el HTML no contenga elementos, atributos, estilos y JavaScript ejecutable peligrosos. Esto es mucho trabajo, y los limpiadores de HTML incluidos en la lista negra siempre logran ignorar combinaciones de códigos peligrosos. Y las herramientas de listas blancas eliminan esta ambigüedad al permitir solo los elementos y atributos permitidos conocidos. Todos los demás simplemente serán separados, aislados o eliminados, sin importar lo que sean.

Por lo tanto, se prefiere la inclusión en listas blancas para cualquier procedimiento de verificación debido a su mayor seguridad y confiabilidad.

Nunca intente arreglar la entrada

La validación de entrada suele ir acompañada de filtrado. Si, durante la validación, simplemente evaluamos la exactitud de los datos (con la emisión de un resultado positivo o negativo), el filtrado cambia los datos validados para que cumplan con reglas específicas.

Esto suele ser algo perjudicial. Los filtros tradicionales incluyen, por ejemplo, eliminar todos los caracteres excepto los números (incluidos corchetes y guiones adicionales) de los números de teléfono o recortar el espacio horizontal o vertical innecesario. En tales situaciones, se realiza una limpieza mínima para evitar errores de visualización o transmisión. Sin embargo, puede dejarse llevar por el uso de filtros para bloquear datos maliciosos.

Una de las consecuencias de intentar corregir los datos de entrada es que un atacante puede predecir el impacto de sus correcciones. Digamos que hay algún valor de cadena no válido. Lo buscas, lo borras y completas el filtrado. ¿Qué pasa si un atacante crea un valor separado por cadenas para burlar su filtro?

ipt>alert(document.cookie);ipt>
В этом примере простая фильтрация по тэгу ничего не даст: удаление явного тэга

Artículo anterior: Artículo siguiente:


© 2015 .
Sobre el sitio | Contactos
| mapa del sitio