Prevención de un ataque de WordPress XSS: Guía completa para la validación, saneamiento y escape de datos

Cuando se trata de garantizar su sitio web de WordPress como desarrollador, probablemente lo más impactante que puede hacer es asegurarse de que siempre limpie sus datos de los usuarios. Esto generalmente significa dos cosas, la validación o la higiene en el camino a su sistema. Y él escapó de ella en la salida, reduciendo la posibilidad de un ataque de WordPress XSS. Los ataques de secuencias de comandos de sitios cruzados de WordPress son una de las formas más comunes en que las personas comprometen los sitios. Así que hoy discutiremos cómo funciona. En una encuesta reciente sobre las vulnerabilidades reveladas en WordPress, lo hice para la seguridad de WordPress con confianza (mi curso de seguridad de WordPress), el tipo más común de vulnerabilidad (aproximadamente 33%) fue secuencia de comandos entre sitios. Las vulnerabilidades de secuencias de comandos entre sitios (XSS a menudo acortados) son aquellas en las que haces que un atacante ejecute JavaScript no autorizado para ser rodado en tus páginas, ya que no ha podido escapar o desinfectar parte de la base de datos de aplicaciones. Usted.
Hoy nos abordaremos de lo peligrosa que es la secuencia de comandos entre los sitios y cómo hacer validación, higiene y escape en WordPress. Pero antes de hacerlo, puedes registrarte para obtener un video realmente interesante del curso, que me muestra que tengo un verdadero ataque de WordPress XSS. Realizar lo fácil que es para un “codo de piratería” para mí seguir con éxito un tutorial de guiones entre sitios, le hace comprender mejor por qué su código no es tan importante.
¿Qué es exactamente un ataque de WordPress XSS?

Esencialmente, un ataque de secuencias de comandos entre los sitios de WordPress es aquel en el que un mal actor puede inyectar algún código en la experiencia de su visitante sin su conocimiento o aprobación. Esto es peligroso, porque JavaScript es una parte cada vez más fuerte e importante de los sitios web y las aplicaciones web. Debido a cuántos datos están disponibles para un atacante que realiza con éxito un ataque XSS, debe tener mucho cuidado de hacer todo lo posible para evitarlo. El caso principal de las vulnerabilidades de secuencias de comandos entre los sitios, como la mayoría de los problemas de programación, es la confianza también Genial en la fuente de sus datos desde la perspectiva de una persona racional y amigable, es fácil pensar que si tiene un campo de “nombre”, las únicas cosas que obtendrá en ese campo se asemejan a los nombres humanos. Pero haga esta suposición sobre su propio riesgo. Desde el punto de vista de seguridad, debe ser un poco paranoico: suponga que un hombre o un bot dará su nombre es alerta (‘xss’); y asegúrese de que no suceda nada malo en su aplicación si ellos lo hacen. . Una ventana aleatoria de JavaScript que dice “XSS” es el resultado más inofensivo de este tipo de ataque.
Las alertas al azar no deseadas no son excelentes; Son bastante molestos y casi con certeza te hará sentir que tu sitio era “pirata” si no estás familiarizado con ellos. Pero no soy lo peor que puede suceder en un ataque de cookies de XSS, robo de datos, redirección forzada no deseada y el reemplazo de los enlaces de la página también son triviales fáciles de ejecutar si logras ver con el éxito de un ataque XSS. en un sitio web. El tipo de ataques de WordPress XSS son generalmente dos tipos de ataques de WordPress XSS: aquellos en los que su servidor web puede ayudar al atacante y aquellos en los cuales. Esto se descompone desde un punto de vista técnico en tres clases: XSS almacenado, reflejado y basado en DOM.
Un ataque de secuencias de comandos entre sitios almacenados (o persistentes) es, en mi opinión, el peor tipo. La razón por la que es malo es que cada vez que se carga una página en su sitio, tiene el riesgo real de que lo malo hecho por el atacante se ofrezca a todos los visitantes de su sitio. En un ataque almacenado, su servidor web aceptó con gusto los datos que incluyen un ataque de WordPress XSS y luego muestra ese código de ataque a todos. Un ejemplo de vulnerabilidad almacenada XSS: en el pasado, algunos CMS han permitido que las personas agregen JavaScript a los comentarios en los sitios web. Cuando esto esté permitido, cada visitante a quien el comentario contiene JS será víctima del ataque XSS. Cada. Único. Una.
Reflect XSS también utiliza la participación de su servidor de su servidor en el ataque almacenado XSS se refleja mediante un ataque de secuencias de comandos entre sitios reflejados. Ambos involucran su servidor, pero un ataque reflejado difiere en que no se almacena en el servidor. Más bien, existe un ataque XSS reflejado cuando su servidor no toma la entrada de un usuario y no limpia y proporciona adecuadamente los datos antes de mostrar esa entrada al usuario. Un ejemplo, en un sitio de WordPress (al que muy pocos deben ser susceptibles) es cuando un tiempo de búsqueda contiene etiquetas . La URL para un tiempo de búsqueda en un sitio de WordPress generalmente aparece en la URL, como https://wshout.com/?s=Security. Pero no es muy difícil para un atacante enviar algo como https://wpshout.com/?s= Alert (1); . Cuando su sitio (tema en su mayoría) no está protegido, realmente verá una ventana emergente de JavaScript en el sitio. (Esto no sucede aquí en WPShout, porque entrará en conflicto con el nivel de protección de seguridad que tenemos. 🤓)

Los ataques XSS basados ​​en DOM no son nuestro último tipo de ataque de tipo de secuencia de comandos entre sitios se basa en DOM. Este es un poco menos relevante para la mayoría de los sitios de WordPress, porque involucra el sitio menos de WordPress. Un ataque XSS basado en DOM no pasará por su servidor, así es como difiere de los ataques almacenados y reflejados. Básicamente, los ataques XSS basados ​​en DOM solo son relevantes al escribir JavaScript para sitios de WordPress. Debido a que esta no es una metodología común (aunque es cada vez más así), pasaremos un período de tiempo muy corto hablando de ello. Recomiendo calurosamente el artículo de OWASP y la hoja de prevención para aquellos interesados ​​en obtener más información sobre este tema. Estos métodos (validación, higiene y escape) evitan los tres tipos de ataques XSS. Hoy nos centraremos en las medidas preventivas específicas de WordPress, que generalmente son funciones de PHP personalizadas que WordPress ofrece para proteger contra ataques reflejados y persistentes. Los conceptos que cubrimos al proteger de esta manera también son muy relevantes en un espacio de ataque basado en DOM, pero las medidas preventivas son solo JavaScript. El significado de “escape”, “validación” e “higiene” Hay dos excelentes maneras de evitar un ataque de secuencias de comandos entre sitios: corrección de datos y protección de datos incorrectos.
Hay dos excelentes maneras de evitar un ataque de secuencias de comandos entre los sitios: asegúrese de que todos los datos que acepte corresponden a sus expectativas y asegúrese de que el código que sea un ataque XSS se muestre a los visitantes de una manera que no lo permita.llevar a cabo.Para asegurarse de que los datos coincidan con sus expectativas generalmente tienen dos aspectos: confirmar a un usuario que dio lo que pidió y desinfectar lo que le dio antes de almacenarlos si no lo escucha, o si el evita su validación.
Si alguien le da Alert (1) como edad, puede validar ese valor diciéndoles que no es un valor válido. Puede desinfectar este valor solo alcanzando la edad “1”. Cualquiera funciona y ambos son mejores que uno. En general, diría que eres más seguro con un valor desinfectado que con uno simplemente validado. Pero si su validación o higiene es inadecuada, es mejor asegurarse de deshacerse de este valor de edad antes de mostrar al visitante. El resultado más común de tal esfuerzo sería que le mostraría al usuario su edad (si no podía evitar que enviara el trabajo que no quería) como Alert (1); . Esto sucederá porque el HTML eliminará el valor y transformará signos mayores que menos que en cosas que impiden que el navegador intente ejecutar JavaScript contenido en ellos. Este proceso de asegurarlo se llama “Escape”.
Cómo validar los datos en la validación de WordPress significa asegurarse de que un valor coincida con lo que espera. Por lo general, validará para que pueda hacer que el usuario envíe su solicitud nuevamente cuando falle la validación. Por lo general, validará para que pueda hacer que el usuario envíe su solicitud nuevamente cuando falle la validación. Para la validación, puede usar la función Filter_var PHP, si este es su estilo, a menudo se verá como filtro_var ($ _ get [’email’], filt_validate_ail). Estas funciones son fuertes y tienen la clara ventaja de que funciona fuera de WordPress. Puede ver todos los filtros de validación disponibles en php.net. En todos los casos, si la función le da falso, sabe que los datos no son válidos. Las funciones de WordPress que son específicas de la prevención de los ataques XSS son las más en el campo de higiene. Pero hay algunos que son especialmente útiles para la validación. Mi favorito es IS_EMAIL. Está destinado a hacer lo mismo que la llamada Filter_var que usó en el último párrafo, pero es mucho más conciso (IS_EMAIL ($ _ Get [‘correo electrónico’) es más corto de lo que escribí la última vez y se lee mucho más como el inglés .
La validación puede ser, y a menudo se hace, como el esfuerzo de JavaScript de un usuario. Esto es genial y hay una serie de bibliotecas de JavaScript que he usado en el pasado para ayudarlo. La desventaja es que no hay garantía de seguridad en una biblioteca de validación del lado del cliente. Por lo tanto, generalmente es una buena idea hacer una validación en el lado del servidor. Y si no valida, debe desinfectar en el lado del servidor. Cómo desinfectar los datos en las funciones de higiene de WordPress WordPress a menudo son más fáciles de leer que las funciones básicas de PHP WordPress tienen muchas funciones excelentes para limpiar la entrada de usuarios no confidenciales. Si usted es un desarrollador serio en la prevención de guiones entre sitios, debe conocerlos bien. Pero antes de ingresarlos, es bueno saber que Filter_var del PHP también tiene muchas banderas de desinfección. Su comportamiento se explica ampliamente en esta página del manual de PHP. En el centro de la mayoría de estas operaciones está la mera eliminación de todos los valores de lo que se envía que no son del tipo deseado. Entonces, si ejecuta una llamada de filtre_var ($ val, filter_sanitize_number_int) tendrá todas las letras y otros caracteres que no están -+0123456789 eliminados. Estas llamadas de funciones Filter_VAR son la base de algunas funciones de desinfección de WordPress, pero las funciones de WordPress a menudo son más fáciles de leer. Además, hermoso, aplique muchas convenciones comunes de WordPress para usted. Hay una lista rápida, con explicaciones modestas para cada uno de ellos. En primer lugar, el más común: Sanitize_mail-elimina todos los personajes que no son de un correo electrónico.
Sanitize_File_Name: limpie un nombre de archivo, como agosto_reports.txt.
Sanitize_html_class: se asegura que el nombre de una clase HTML solo tenga caracteres válidos.

Sanitize_Text_field: una forma conveniente de limpiar los campos de texto básicos del formulario.
Sanitize_TextArea_field: como Sanitize_Text_Field, pero manteniendo los nuevos caracteres de línea.
ESC_URL_RAW: llamado estúpido, pero desinfecta las URL antes de almacenarlos o usarlas para tomar datos.
Sanitize_option: una función para limpiar sobre la base de las reglas; que también le brinda la oportunidad de establecer sus propias reglas usando código como add_filter (‘sanitize_option_my_id_option’, ‘intval’); ¿Qué WordPress siempre llamará antes de guardar la opción (porque siempre llama sanitize_option antes de guardar?
SANITIZE_META: un sistema basado en el gancho para limpiar el metele en función de las reglas que define. Similar a Sanitize_option.
WP_KSES – Elimine la marca HTML inaceptable en una cadena: proporcione etiquetas HTML aceptables como el segundo argumento. (KSES es un acrónimo recursivo que significa “KSES elimina los guiones malvados”.)
Y el menos utilizado:
Sanitize_Key: utilizado por WordPress para los nombres de los complementos, rara vez se usa en el desarrollo.
Sanitize_mime_Type – limpia los tipos de MIME, como Image/JPEG.
Sanitize_SQL_Orderby: se asegura que la cadena sea una instrucción SQL “ordenada”.
SANITIZE_TITLE – ¡GOTCHA!Esto no es exactamente para la higiene directa de XSS, como un lector llamado Keith nos alertó.Es para transformar las cuerdas en “Slugs de URL” (ver también: Sanitize_itle_For_Query, Sanitize_Itle_With_Dashes).¡Gracias por atraparlo Keith!Agregó: “Prácticamente Sanitize_Title aplica un filtro del mismo nombre, al que WordPress se suma a SANITIZE_ITLE_WITH_DASHS.Y luego sanitize_itle_for_query solo llame a SANITIZE_ITLE con $ context = ‘Query’ “SANITIZE_USER – Limpie un nombre de usuario para que coincida con los estándares de WordPress.
WP_FILTER_POST_KSES: use WP_KSES sin tener que especificar las reglas, obtenga el mismo conjunto que WordPress usa para publicar contenido.
WP_FILTER_NOHTML_KSES – Elimine todo HTML usando WP_KSES.
Todas estas funciones son de alguna utilidad y pueden ser útiles a la vez, mientras que está desinfectando sus datos en WordPress. Lo principal que debe recordar cuando se trata de higiene es que no tiene desventaja real. Cosas como Sanitize_option son excelentes como una forma de desinfectar un valor cada vez que lo toma con get_option. Esta función de ejecución múltiple puede parecer un poco de desperdicio, pero también es una buena garantía que sus valores no contienen código hostil. También es una gran idea incluir el saneamiento de sus valores en el proceso de toma y configuración. Si se asegura de que siempre use get_user_age o dicha función y esa función asegura que el valor que devuelve es del tipo que implica, tendrá un nivel adicional de seguridad muy beneficioso en su sistema. Cómo deshacerse de los datos en WordPress Escape difiere de la higiene (a veces llamada filtración) de una manera muy importante: no elimina los caracteres, sino que solo los hace más seguros para su uso. La diferencia aquí es sutil y profunda. Lo que significa, esencialmente, es que si la higiene de una edad de
1 produciría un valor de 1, su escape (dependiendo del contexto) da algo como & lt; alert & gt; 1 & lt ; alerta y gt;
. Este último se ve igual para un visitante, pero no es accionado accidentalmente por un navegador. Por lo tanto, esto es mucho más seguro que la alternativa sin escape. Recuerde, aunque Escape puede hacer que la mayoría de los datos sean seguros en WordPress, debería ser su segunda línea de defensa. Recuerde, aunque Escape puede hacer que la mayoría de los datos sean seguros en WordPress, debería ser su segunda línea de defensa. (“Seguridad estratificada” es una excelente práctica y es la razón por la que siempre debe hacer validación/saneamiento y escapar.) Lo que sucede cuando se escapa correctamente es que su documento HTML es muy seguro y está muy bien formado. Lo difícil de escapar es que la forma correcta de deshacerse del contenido depende mucho del contexto. La forma en que se asegura de que un valor se pueda mostrar de forma segura en el medio de una página HTML es diferente de cómo se asegura de que sea seguro para una declaración de atributo HTML o una URL. WordPress proporciona cinco funciones básicas de escape. Son: ESC_HTML – Se utiliza para proteger grandes bloques de contenido HTML
Esc_url: verifique y limpie una URL
ES_JS: le permite escapar de la cadena de texto en la operación JavaScript. Lo encuentro esotérico y nunca lo usé.
ES_ATTR – ¿Qué necesita para los atributos HTML, como acceder a un título o atributo similar?
Esc_texture-for valores que ingresan a un área de texto en html
Existen diferentes alternativas que existen en PHP puro, pero puede usar dentro de WordPress.En general, preferiría las funciones de WordPress: se les llama mejor y, por lo tanto, más fáciles.Pero cosas como PHP HTMLSpecialChars funcionan y se pueden usar.Solo encuentro que ESC_HTML es menos gritando y aclara tanto mi intención como lo que sucederá.(Donde el sustantivo plural de htmlspecialchars es muy opaco en términos de transformación, si lo hay, a lo que debería esperar de esa función). Otra cosa sobre el escape:
En general, quieres hacerlo en el último segundo posible. Hay razones por las que no tiene éxito, pero en general, escapar en el último segundo posible es el mejor porque (1) no evite los otros programas con problemas de escape y (2) no tiene que preocuparse de que otra operación de programación interrumpirá tu escape. (Algunas personas dan consejos similares, pero lo opuesto a la higiene, hacerlo lo antes posible, que es un buen consejo por la misma razón básica). La seguridad nunca se detiene, pero XSS es uno de los problemas más comunes como mencioné en el Comenzando, una encuesta reciente que hice sobre las vulnerabilidades de seguridad en el ecosistema de WordPress encontró que (con un pequeño margen) secuencias de comandos en los sitios era la vulnerabilidad más común. Como desarrollador, comprender qué es XSS y cómo puede evitar que sea vital mantener su sitio seguro tanto para usted como para los visitantes. Pero hay más de XSS que importa para la seguridad. Pero hay más que ataques de WordPress XSS que importan para la seguridad. Algunos de ellos los cubrieron antes, algunos de ellos que escuchaste en WordCamps y publicaciones de blog. Pero algunos de ellos son difíciles de entender y difíciles de pensar con claridad. Es por eso que puse el curso del curso, Seguridad de WordPress con confianza. La seguridad de WordPress con confianza es su guía completa para navegar en el mundo confundido, aterrador y excepcionalmente importante de la seguridad de WordPress.

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

gkOVSBm5B8SgiXmo

Shopify vs WooCommerce – ¿Cuál es la mejor plataforma?(Comparación)

Shopify vs WooCommerce

Leave a Reply

Your email address will not be published. Required fields are marked *