Permíteme mostrarte cómo las aplicaciones de React son hackeadas en el mundo real

Rate this content
Bookmark

Los marcos de trabajo frontend modernos como React están bien considerados en su diseño de seguridad de aplicaciones y eso es genial. Sin embargo, todavía hay mucho espacio para que los desarrolladores cometan errores y utilicen APIs inseguras, componentes vulnerables, o en general hagan lo incorrecto que convierte la entrada del usuario en una vulnerabilidad de Cross-site Scripting (XSS). Permíteme mostrarte cómo las aplicaciones de React son hackeadas en el mundo real.

22 min
25 Oct, 2021

Video Summary and Transcription

La seguridad predeterminada de React contra las vulnerabilidades de XSS, explorando y solucionando las vulnerabilidades de XSS en React, explorando caracteres de control y problemas de seguridad, explorando una solución alternativa para el análisis de JSON, y explorando la entrada de JSON y las dependencias de terceros.

Available in English

1. Introducción a la Seguridad en React

Short description:

Hola y bienvenidos a mi charla. Hoy, quiero mostrarles algunas brechas en la codificación de React que deberían conocer. Proporcionaré ejemplos de vulnerabilidades XSS encontradas en Twitter y explicaré la importancia de usar APIs seguras.

♪ Hola y bienvenidos a mi charla. ¿Pensaste que tu aplicación React es segura? Piénsalo de nuevo. Mi nombre es Irantu, y quiero mostrarte hoy algunas brechas que deberías conocer cuando haces codificación en React.

Entonces, ¿por qué estamos aquí hoy? Sé lo que estás pensando ahora mismo. Como, este es el año 2021. ¿O va a ser otra charla sobre XSS? Como, ¿qué quieres de mi vida ahora mismo con XSS en React? Porque pensé que ya lo habíamos superado. Bueno, por eso voy a decir, Hola XSS, mi viejo amigo. Y voy a mostrarte un par de ejemplos que estaba buscando en Twitter, solo para encontrar algunos ejemplos de codificación de personas mostrando algunas de sus cosas de code en React. ¿Y qué están haciendo realmente allí?

Entonces, ¿aquí hay un ejemplo, verdad? Esto es XSS, esto es este año. ¿Qué está pasando, vamos a ver. Parece que alguien está intentando construir un contador. Pero algo está desordenado allí. ¿Estás viendo lo que estoy viendo? Porque cuando me acerco un poco, veo todo el elegante tipo de cosas de use effect. ¿Todavía es elegante? No lo sé, ya es unas cuantas versiones en React. Pero de todos modos, puedes ver que hay una variable de conteo que tal vez viene desde el exterior. La estamos metiendo. No tenemos idea de lo que hay en ella. ¿Está saneada? ¿No lo está? ¿Deberíamos emitir y code? ¿Qué significa incluso emitir y code cosas? Aprenderemos sobre ello en un segundo. Pero como estás viendo, hay una mezcla aquí de APIs de React y las APIs de Dominio como en un rico GML, que no es una forma realmente segura de hacer las cosas. Y esta mezcla realmente causa ataques de scripting entre sitios o vulnerabilidades, como en esta aplicación.

Veamos otro ejemplo. También he visto este caso en Twitter, que también es de este año, no hace mucho tiempo. Así que esta persona estaba tratando de evitar la función de Evaluación en Tiempo de Ejecución Eval básicamente aceptando también la entrada del usuario y ejecutándola. Porque cuando estás haciendo return A plus B y A es un IIFE o una función o lo que sea, bueno, se va a ejecutar. Se va a evaluar. Así que eso realmente no resuelve el problema tampoco. Así que tenemos muchas de esas cosas diferentes. Que si no estamos usando las APIs correctas, no somos conscientes de cuáles son las APIs seguras o cuáles son las APIs inseguras? No estoy hablando solo de, ya sabes, cosas peligrosamente internas de HTML. Estoy hablando de otras cosas también. Y lo verás en un segundo.

2. Introducción a Iran Tal

Short description:

Hola, soy Iran Tal, un Defensor de Desarrolladores en Snyk. Ayudamos a los desarrolladores a construir aplicaciones seguras utilizando código abierto. Si necesitas ayuda con vulnerabilidades o código inseguro, estamos aquí para ayudar. Puedes contactarme en Twitter @Iran_Tal.

Así que presentándome, mi nombre es Iran Tal. Soy un Defensor de Desarrolladores en Snyk donde ayudamos a los desarrolladores a construir aplicaciones de forma segura utilizando código abierto. Así que si estás en tu IDE escribiendo algo de JS code, escribiendo algo de Node.js code, Java, lo que sea, te ayudaremos a encontrarlo, mejoraremos tu experiencia al hacerlo diciéndote en tiempo real, si realmente tienes algunas vulnerabilities y códigos inseguros justo allí. Bueno, esto es realmente genial, pero también estoy haciendo otras cosas. Ya sabes, estrella de GitHub, activista en temas de web security. Así que, ya sabes, Node.js probablemente me envía activamente allí también, haciendo todo tipo de cosas. Pero realmente, si solo quieres contactar y hablar sobre cualquiera de esto o algo más en Twitter, Iran underscore Tal, y contacta y di, hola.

3. Explorando la Seguridad de React y las Vulnerabilidades XSS

Short description:

React es en su mayoría seguro por defecto, pero aún existen algunos huecos para protegerse contra las vulnerabilidades XSS. React codifica la entrada del usuario por defecto, previniendo la ejecución de scripts y asegurando la seguridad. Sin embargo, aún existen posibles trampas y vulnerabilidades de las que hay que estar conscientes. Vamos a explorar estos problemas a través de la codificación en vivo y simulaciones en un sitio web con entrada de usuario. Al entender los riesgos y huecos, podemos mejorar la seguridad de las aplicaciones React.

Entonces, vamos a continuar con esto. React es en su mayoría seguro por defecto, ¿verdad? Al igual que otros frameworks como Vue y Angular, la mayoría de estos hacen las cosas bien en el lado del cliente, ¿verdad? En lo que respecta a XSS y quizás algunas otras cosas cuando algunos frameworks toman, ya sabes, un poco más voluminoso y dan un paso más también. Pero, ¿por qué digo en su mayoría seguro, verdad? ¿Qué está pasando? ¿Por qué está Iran en este escenario ahora diciendo en su mayoría seguro? ¿Qué me queda por proteger? Porque pensé que usar React en realidad me protege de todas estas cosas extrañas de XSS que suceden en mis aplicaciones.

Entonces, para darnos cuenta de eso, necesitamos, ya sabes, explorar algo más. Estoy diciendo que React es en su mayoría seguro por defecto, pero ¿qué significa seguro por defecto? Necesitamos explorar esto un poco y necesitas entender un poco más de la jerga y ahí es donde voy a subir de nivel y simplemente decir qué es XSS para que todos aquí puedan estar en el mismo nivel de juego.

Entonces, cuando escribes este code y lo renderizas en el DOM, la entrada del usuario aquí, como el primer nombre, por ejemplo, ¿qué le sucede? En el caso general donde esta es una entrada de usuario insegura, podría llevar a potenciales, bueno vulnerabilidades, como XSS en la página web, pero con React, estás bastante seguro. Ahora, ¿por qué es eso? Y entonces veamos qué sucede cuando realmente ponemos algo como un script de alerta o fuente de imagen o lo que sea en este fragmento de code JSX. Bueno, en realidad, si miras una página, obtienes algo como esto, que parece un script o cualquier elemento que hubieran puesto allí, pero no lo es. Eso es porque si miras muy cuidadosamente con tu inspector de herramientas de desarrollo en este componente específico, elemento específico en la página, verías que todos esos corchetes angulares, no son corchetes angulares reales. Son en realidad entidades HTML que codifican y le dicen a la página que necesita renderizar, necesita renderizar como los corchetes angulares a la izquierda y a la derecha, pero no son corchetes angulares completos. Por eso es que cuando pones eso en la página y como entrada del usuario, no sucedería nada, ningún script se evaluaría realmente, ninguna evaluación de JavaScript en tiempo de ejecución, porque este no es un elemento HTML real o algo alrededor de él. Y el navegador lo sabe, y esto es lo que quiero decir cuando digo que React es en su mayoría seguro por defecto. React es en su mayoría seguro por defecto significa que sabe codificar. Así que ahora tenemos esta nueva jerga que nos dice lo que esto realmente es. Esto es seguro por defecto si realmente haces codificación de salida por defecto en cualquier entrada de usuario.

Entonces, con eso dicho con este conocimiento, avancemos un poco y averigüemos ahora si React es seguro por defecto, y hace una salida segura de la entrada del usuario, ¿por qué dices que esto es en su mayoría seguro por defecto? ¿Qué me queda aún por proteger y dónde están realmente todos los huecos? Así que vamos a sumergirnos ahora en algo de codificación en vivo juntos y veamos lo que podemos aprender sobre algunas trampas. Y para eso, tengo este sitio web de aplicación construido donde Kate Libby estaba construyendo su perfil de paquete para Opus para algunos mantenedores y cosas así. Así que es algo así como la página web con paquetes en ella. Así que vamos a sumergirnos en algo como esto y veamos cómo se ve. Bueno, necesito mi ID, ahí vamos. Asegurémonos de que todo funcione. Y si lo hace, debería tener, no, este aquí. Bien, genial. Así que este es el sitio web que acabo de construir y parece que está funcionando bastante bien. Tiene algunos elementos en él, como la entrada del usuario aquí, lo siento, como el nombre, la descripción o algo así, enlace a su Twitter, algunas cosas más que puedo usar como testimonios. Así que hay mucha entrada de usuario aquí que podemos usar como base para simplemente simular lo que podría salir mal. Así que echemos un vistazo a esto un poco más. Por ejemplo, esta database tiene todas las cosas de las que estaba hablando aquí. Y esto es lo que vamos a usar para simular lo que podría salir mal. Así que voy a cambiar algunos de ellos, por ejemplo, solo por el bien de las cosas.

4. La Seguridad por Defecto de React Contra XSS

Short description:

React ayuda a proteger contra las vulnerabilidades de XSS por defecto, aplicando codificación de salida a la entrada del usuario y convirtiéndola en entidades HTML.

Entonces puedo cambiar esto a mi nombre aquí. Y una vez que lo hago, ves que se cargan totalidades en la ejecución por todas partes aquí. Eso está bien, pero ¿qué pasa si lo cambio a algo como fuente de imagen X en error alerta uno, y esperemos que eso desencadene un XSS? No lo hace, aquí es donde react realmente te ayuda y asegura las cosas por defecto. Realmente codifica la salida, esto es lo que dijimos con el ejemplo del primer nombre. Por eso, si intentas esas cosas y en realidad no se ejecutan, está bien. Eso es porque está bien, el nombre total aquí en la database es simplemente algo que react sabe que ahora debe aplicar la codificación de salida y cambiar todo esto en entidades HTML. Hasta ahora todo bien.

5. Explorando las Vulnerabilidades XSS en React

Short description:

Intentemos un enlace y cámbielo a algo malicioso. Vemos una vulnerabilidad XSS incluso cuando usamos React. React no protege contra los valores href, así que ten en cuenta esto. Vamos a explorar cómo solucionarlo y las trampas a evitar.

Volvamos a Kate Levy y cambiemos algo más. Esto, intentemos un enlace. Bien, intentemos un enlace, que no es solo un poco de texto. Intentemos y cambiemos esto a bueno, esto está aquí. Entonces esto es si yo, ahí vamos. Solo lo paso por encima. Podrías ver el navegador en la parte inferior izquierda. Esto va a su cuenta de Twitter. Así que voy a cambiar esto a, intentemos ser un poco maliciosos aquí. Bien, digamos que alguien tiene este campo de forma libre y simplemente construyen una alerta de JavaScript, que es de nuevo, la forma clásica de quizás introducir algún XSS. Entonces, si hago esto, dejo que la página se recargue, supongo que lo hace, esto es lo que necesitas para ir aquí y tal vez hacer clic en él y ahora vemos un XSS, pero ¿por qué, qué está pasando? Esto es realmente bastante extraño. ¿Por qué tengo un XSS y una alerta si en realidad estoy usando React? Esta es una versión bastante nueva de React también. Bueno esto, ya sabes, 17 y más. Entonces, ¿qué está pasando aquí? Ahora, para entender qué está pasando allí, volvamos aquí. El enlace de Twitter, la database, el enlace de Twitter en realidad se inserta aquí. Y entonces lo que ahora entendemos es, bueno, React no aplica la codificación de salida y te protege de los valores href, como los atributos de HTML que van aquí. Y eso es algo de lo que debes estar consciente. Entonces, intentemos solucionarlo. Si, en primer lugar, ahora estás consciente de ello y sabes que si algo es malicioso o necesitamos solucionarlo, pero veamos, hay algunas trampas en cómo intentamos solucionar esas cosas. Entonces, también echemos un vistazo a eso. Voy a ir aquí y quiero decir, podemos dejarlo así.

6. Explorando la Seguridad de React - Enlace de Twitter

Short description:

Y justo antes de aquí, un poco, tenemos suficiente espacio. Así que vamos a intentar todo esto, uso un factor como cambio y lo desinfecto juntos. Así que intentemos algo como esto es un enlace de Twitter. Lo ponemos allí.

Y justo antes de aquí, un poco, tenemos suficiente espacio. Así que vamos a intentar todo esto, uso un factor como cambio y lo desinfecto juntos. Así que intentemos algo como esto es un enlace de Twitter. Lo ponemos allí. Bien, establezco el enlace de Twitter y use state. Lo voy a iniciar con la database, sí. Bien, genial, sí, pequeño punto, use effect, use effect. Y llamaré a, sí, autocompletar. Ahí vamos. Y luego queremos encontrar si, no, no ese. GitHub co-pilot, eso es increíble, ¿verdad? Enlace de Twitter punto índice de JavaScript.

7. Explorando Vulnerabilidades XSS - Reparación y Pruebas

Short description:

¿Qué opinas de esto? ¿Es una buena solución? Probémoslo. Parece que lo hemos arreglado. ¿Lo hemos arreglado? ¿Qué sucede si alguien se pone un poco, bueno, astuto y tal vez hace algo así? Simplemente lo hacen como una cadena de tipo mayúscula. Entonces, ahora si lo hago, ¿se recargó? Entonces, arreglamos la mayúscula, arreglamos la minúscula, pero ¿qué más podría entrar, verdad? Como cualquier otra cosa. Obtenemos caracteres de espacio de recorte, de recorte y todas esas cosas. Podemos probar todos esos, pero ¿funcionaría realmente, no lo harían? Podemos intentar una forma diferente de escapar de él tal vez, pero eso es tal vez un poco complicado.

¿Qué opinas de esto? ¿Es una buena solución? Probémoslo. Me gusta este autocompletado, vayamos con ese. Básicamente, esto dice, si el enlace de Twitter allí en la database que obtenemos como entrada del usuario tiene, tiene JavaScript en él, lo establecerá en, no sé, lo establecerá en algo como esto, ¿verdad? Solo un hash y eso es todo. Espero no haber olvidado cerrar nada. Parece bien, creo que se ve bien, probémoslo. ¿Se recargó, no tengo idea, veamos. No se recargó, se recargó, lo recargaré. Ahí vamos. Entonces, todavía lo tenemos. Entonces esto aún no está funcionando. Oh, ¿no guardé este? Algo aquí, no guardé, probemos de nuevo. Oh, te diré lo que no hicimos. Entonces ahora necesitamos establecer el enlace de Twitter en lugar del enlace de Twitter de la database, ¿verdad? Esto es codificación en la vida real, depuración en la vida real, ahí vamos. Tenemos que usar la nueva variable. Bueno, ¿ahora lo está cargando lo suficientemente rápido? Ahí vamos, ahora sí lo cargó lo suficientemente rápido y puedes ver eso en la parte inferior izquierda, en realidad puedo hacer clic en él y simplemente no pasa nada porque solo agrega un hashtag allí y eso es todo. Entonces, parece que lo arreglamos. ¿Lo arreglamos? ¿Qué sucede si alguien se pone un poco, bueno, astuto y tal vez hacen algo así? Simplemente lo hacen como una cadena de tipo mayúscula. Entonces, ahora si lo hago, ¿se recargó? Espera a que se recargue, ahí tienes. Entonces, lo recargué y ahora tenemos el XSS de nuevo, por lo que la solución realmente no fue tan buena para nosotros. Probemos algo más. Digamos que queremos atraparlo. Entonces, ¿qué crees que deberíamos hacer así? ¿Deberíamos hacer un toLowerCase y probarlo así? ¿Funcionaría toLowerCase? Entonces, así. Y como puedes ver, este es básicamente el proceso de pensamiento de un desarrollador y sería genial si tuvieran una herramienta que les ayudara en el IDE para seguir básicamente las APIs correctas. Lo cargaré. Déjame ver. ¿A dónde voy? Entonces se cargó bastante rápido creo. Y parece que lo arreglamos. ¿Lo hicimos? Lo sabemos, ¿qué viene, verdad? Entonces, arreglamos la mayúscula, arreglamos la minúscula, pero ¿qué más podría entrar, verdad? Como cualquier otra cosa. Obtenemos caracteres de espacio de recorte, de recorte y todas esas cosas. Podemos probar todos esos, pero ¿funcionaría realmente, no lo harían? Podemos intentar una forma diferente de escapar de él tal vez, pero eso es tal vez un poco complicado.

8. Explorando Caracteres de Control y Problemas de Seguridad

Short description:

Vamos a explorar qué sucede cuando agregamos un carácter de control, como slash r slash, para escapar de la minúscula y el subíndice. Esto puede hacer que todo se desmorone, destacando la importancia de aprender a hacer las cosas correctamente.

Lo que no hemos probado es, qué sucede si agregamos cosas como un carácter de control. Y eso es algo que en realidad podría agregar un carácter de control aquí y escapar de algo como, slash r slash algo así. Y eso en realidad escaparía de toda la minúscula y el subíndice y todo estaría bien. Permíteme mostrarte a qué me refiero con eso. Si solo hago slash, no, no aquí, aquí, acabo de empezar con slash X nueve 10, que es un carácter de control. Si intento eso, todo se desmorona. Recárgalo de nuevo. Ahí vamos. Entonces, mientras aprendemos a hacer una cosa y la otra y la otra, todos estos están intentando mitigar un problema, pero todavía hay algunos problemas, todavía hay algunos problemas que deberíamos averiguar cómo hacerlo. Entonces, aprender a hacer las cosas correctamente es importante.

9. Explorando una Solución Alternativa para el Análisis de JSON

Short description:

Ahora vamos a explorar una solución alternativa para manejar archivos JSON. En lugar de construir un analizador personalizado, podemos usar paquetes existentes como React-JSON-Pretty. Aunque está inactivo y no se mantiene, tiene un número significativo de descargas. Al verificar la popularidad y la última versión, podemos garantizar la seguridad. Vamos a profundizar en el perfil del paquete y jugar con el analizador del paquete. Demostraremos cómo puede ocurrir XSS desde otras fuentes.

Ahora permíteme pasar a otra cosa. Digamos que en realidad quiero, oh, evitemos todo esto por un segundo, para poder probar otro ejemplo. Dije que en realidad quiero, bueno, Libby en realidad quiere seguir adelante y hacer toda esta vista de paquete JSON. Y bueno, ella no va a ir y, quiero decir, no voy a ir y escribir un analizador que indente cosas y resalte. Podrías tener temas y colores bastante geniales, ¿verdad? Así que no voy a construir todo esto. Voy a salir y encontrar algo donde pueda darle un archivo JSON, como el PackageManifest para tu paquete npm. Seguiremos adelante y haremos todo esto realmente genial resaltar la cosa de la sintaxis porque tampoco soy realmente una persona de CSS. Así que todo esto no es para mí. Voy a pasar a algo como el Asesor de Snyk y buscaré algunos paquetes, ya encontré algo llamado React-JSON-Pretty. Es, desafortunadamente, parece inactivo. No se mantiene o algo así, pero tiene algo como 40K descargas, que es mucho. Entonces, sabes, tal vez intentaré usarlo. Podrías intentar verificar si esto es popular por versión o no. Así que espero, quiero decir, espero que todos estén en la última versión, que lo están. Así que eso es algo bueno desde el punto de vista de la seguridad si hay como, esto era vulnerable, esto era vulnerable, sabías a qué actualizar. También parece que esto se usa principalmente como un paquete directo, lo cual tiene sentido, en lugar de como un paquete indirecto. Así que seguiré adelante y lo usaré. La versión más popular de hecho no tiene arreglos de seguridad. Veamos qué está pasando. Voy a ir y usar esto. Así que voy a entrar en el perfil del paquete. Ahí está. Hace el analizador de paquetes, estoy bastante seguro. Ahí vamos. Así que he importado esto como analizador de paquetes y le he proporcionado el manifiesto del paquete, que es básicamente todo este JSON del archivo database que tengo aquí. Juguemos con este aquí. Es un componente simple. Solo toma alguna configuración y luego las cosas se aplican por defecto, eso es todo. Y puedo seguir adelante. Y lo que quiero mostrarte es como, intentemos hacer XSS desde otros lugares.

10. Explorando la Entrada JSON y las Dependencias de Terceros

Short description:

Vamos a explorar las posibles vulnerabilidades en la entrada JSON de fuentes externas, como los paquetes NPM. Al manipular el paquete JSON, podemos introducir código malicioso y probar cómo la aplicación lo maneja. Esto resalta la importancia de escanear y asegurar las dependencias de terceros. Además, hay que tener cuidado al usar los atributos href HTML, ya que no se codifican por defecto.

Digamos que el nombre no es ahora Gibson Explorer. Volvamos aquí, ¿verdad? Ya no es Gibson Explorer. Eso va a ser, de nuevo, esa cosa que vimos. Bueno, hagamos, no sé, bueno, hagamos. Quiero decir, JavaScript alert no funcionará allí. Eso no es un enlace, así que puedo probar este vector en su lugar, como alerta y ver qué pasa. Y lo cambié, pero quiero decir, no hay alerta. Ni siquiera veo una etiqueta de imagen, así que está bien. Probemos algo más.

Lo que diría es, no recuerdo qué estaba aquí, así que simplemente haré ABC, pero digamos esto, sabes, si estuviera pensando en cómo explotar esto, diría, si este paquete fue escrito por alguien, tal vez no se cuidó lo suficiente de sanear los datos o codificarlos para su salida al entrar en todos los elementos recursivos que realmente están dentro del JSON, así que todos los elementos que están viviendo dentro de otros campos en otros campos. ¿Qué pasaría si intentara ponerlo aquí? Tal vez este nivel en el JSON está saneado, pero este no lo está, o codificado para su salida sería la mejor manera de hacer esto. Pero parece que lo está. Así que eso parece estar bien. Así que volvemos a la normalidad. Ahora, parece que esto está funcionando, y si esta es una entrada JSON de un paquete NPM que también obtienes, que no está controlado por ti, que está controlado por alguien más, ¿verdad? ¿Qué pasaría si esa persona te da un mal paquete JSON, verdad? Como voy a ir y hacer algo como esto y decir, hey, como estás obteniendo este paquete JSON. Ahí lo tienes. Así que manifiesto del paquete. Ahí lo tienes. Ahora, ya no es un JSON. Ahora es una cadena. Es una cadena, que yo controlo, porque puedo definir lo que quiera en mi paquete JSON y el mío es solo un archivo TAR y te lo enviaré, ¿verdad? Así que si esta es la entrada ahora, veamos qué pasa. Cambió todo el significado de lo que es el paquete JSON, pero la pregunta es, ¿está la aplicación preparada para manejar algo así? No parece que lo esté, porque parece que intenta renderizarlo. Probablemente deberías haber puesto una caja de alerta en algún lugar allí. Y alertaré, en nuestra alerta, probablemente debería haber funcionado. Oh, ahí vamos. Así que ahora vemos lo que está pasando, ¿verdad? Así que ahora estás usando un componente, una biblioteca de código abierto que puede tener vulnerabilidades en ella, aunque estabas pensando que podría estar bien, sabes, probablemente, sabes, bueno, probablemente no lo está, pero no, tienes que probar todas esas cosas. Así que nos lleva al mundo de, sabes, gestionar componentes, aprender sobre todas esas cosas. Así que aquí están mis conclusiones.

Volvamos a las diapositivas. Sí, ahí vamos. Así que conclusiones para nosotros, ¿verdad? Esto es, sabes, evita todo esto, sabes, peligrosamente interno HTML, obviamente no quieres hacer esto, pero el hecho de que lo estés evitando no significa que los demás también lo estén evitando, como hemos visto aquí. Así que realmente deberías escanear tus dependencias de terceros si estás haciendo algo como npm audit, sabes, eso está bien. Es una gran manera de, sabes, tomar conciencia de las seguridad vulnerabilidades. Pero en mi caso, descubrí cuando estaba usando React.JSON en mi demo aquí es que no lo encontró cuando estaba haciendo npm install y npm audit, nada aparecía para él. Sabes, afortunadamente estaba usando una prueba de Snyk y pude encontrarlo. Así que ten en cuenta lo que estás metiendo en esto, si tengo que resumir, ¿verdad? Ten en cuenta lo que estás metiendo en tus, diría dependencias en general, colección de bibliotecas o tus aplicaciones, componentes, ten en cuenta lo que estás poniendo allí, ser capaz de escanearlo todo el tiempo y arreglarlo. Y la otra cosa es, por supuesto, ten cuidado con lo que pones en esos atributos href html porque no se codifican por defecto. Así que gracias, React, como diría, React de manera responsable y segura. Y si quieres ponerte en contacto, soy Liran Tal, gracias y que tengas un buen tiempo, Adiós.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

React Advanced Conference 2022React Advanced Conference 2022
25 min
A Guide to React Rendering Behavior
Top Content
React is a library for "rendering" UI from components, but many users find themselves confused about how React rendering actually works. What do terms like "rendering", "reconciliation", "Fibers", and "committing" actually mean? When do renders happen? How does Context affect rendering, and how do libraries like Redux cause updates? In this talk, we'll clear up the confusion and provide a solid foundation for understanding when, why, and how React renders. We'll look at: - What "rendering" actually is - How React queues renders and the standard rendering behavior - How keys and component types are used in rendering - Techniques for optimizing render performance - How context usage affects rendering behavior| - How external libraries tie into React rendering
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Building Better Websites with Remix
Top Content
Remix is a new web framework from the creators of React Router that helps you build better, faster websites through a solid understanding of web fundamentals. Remix takes care of the heavy lifting like server rendering, code splitting, prefetching, and navigation and leaves you with the fun part: building something awesome!
React Advanced Conference 2023React Advanced Conference 2023
33 min
React Compiler - Understanding Idiomatic React (React Forget)
Top Content
React provides a contract to developers- uphold certain rules, and React can efficiently and correctly update the UI. In this talk we'll explore these rules in depth, understanding the reasoning behind them and how they unlock new directions such as automatic memoization. 
React Advanced Conference 2022React Advanced Conference 2022
30 min
Using useEffect Effectively
Top Content
Can useEffect affect your codebase negatively? From fetching data to fighting with imperative APIs, side effects are one of the biggest sources of frustration in web app development. And let’s be honest, putting everything in useEffect hooks doesn’t help much. In this talk, we'll demystify the useEffect hook and get a better understanding of when (and when not) to use it, as well as discover how declarative effects can make effect management more maintainable in even the most complex React apps.
React Summit 2022React Summit 2022
20 min
Routing in React 18 and Beyond
Top Content
Concurrent React and Server Components are changing the way we think about routing, rendering, and fetching in web applications. Next.js recently shared part of its vision to help developers adopt these new React features and take advantage of the benefits they unlock.In this talk, we’ll explore the past, present and future of routing in front-end applications and discuss how new features in React and Next.js can help us architect more performant and feature-rich applications.
React Advanced Conference 2021React Advanced Conference 2021
27 min
(Easier) Interactive Data Visualization in React
Top Content
If you’re building a dashboard, analytics platform, or any web app where you need to give your users insight into their data, you need beautiful, custom, interactive data visualizations in your React app. But building visualizations hand with a low-level library like D3 can be a huge headache, involving lots of wheel-reinventing. In this talk, we’ll see how data viz development can get so much easier thanks to tools like Plot, a high-level dataviz library for quick & easy charting, and Observable, a reactive dataviz prototyping environment, both from the creator of D3. Through live coding examples we’ll explore how React refs let us delegate DOM manipulation for our data visualizations, and how Observable’s embedding functionality lets us easily repurpose community-built visualizations for our own data & use cases. By the end of this talk we’ll know how to get a beautiful, customized, interactive data visualization into our apps with a fraction of the time & effort!

Workshops on related topic

React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured WorkshopFree
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
React Advanced Conference 2021React Advanced Conference 2021
132 min
Concurrent Rendering Adventures in React 18
Top Content
Featured WorkshopFree
With the release of React 18 we finally get the long awaited concurrent rendering. But how is that going to affect your application? What are the benefits of concurrent rendering in React? What do you need to do to switch to concurrent rendering when you upgrade to React 18? And what if you don’t want or can’t use concurrent rendering yet?

There are some behavior changes you need to be aware of! In this workshop we will cover all of those subjects and more.

Join me with your laptop in this interactive workshop. You will see how easy it is to switch to concurrent rendering in your React application. You will learn all about concurrent rendering, SuspenseList, the startTransition API and more.
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
React Hooks Tips Only the Pros Know
Top Content
Featured Workshop
The addition of the hooks API to React was quite a major change. Before hooks most components had to be class based. Now, with hooks, these are often much simpler functional components. Hooks can be really simple to use. Almost deceptively simple. Because there are still plenty of ways you can mess up with hooks. And it often turns out there are many ways where you can improve your components a better understanding of how each React hook can be used.You will learn all about the pros and cons of the various hooks. You will learn when to use useState() versus useReducer(). We will look at using useContext() efficiently. You will see when to use useLayoutEffect() and when useEffect() is better.
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript, and TDD
Top Content
Featured WorkshopFree
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
React Advanced Conference 2021React Advanced Conference 2021
145 min
Web3 Workshop - Building Your First Dapp
Top Content
Featured WorkshopFree
In this workshop, you'll learn how to build your first full stack dapp on the Ethereum blockchain, reading and writing data to the network, and connecting a front end application to the contract you've deployed. By the end of the workshop, you'll understand how to set up a full stack development environment, run a local node, and interact with any smart contract using React, HardHat, and Ethers.js.
React Summit 2023React Summit 2023
151 min
Designing Effective Tests With React Testing Library
Top Content
Featured Workshop
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning?
In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests.
Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them
Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn