Título: Qué resultados obtienes al ejecutar este código? Publicado por: @XSStringManolo en 4 Octubre 2019, 12:17 pm Estaba pensando en nuevos métodos de device fingerprinting y se me ocurrió saturar el stack de llamadas.
1)Cual es el número más grande que se te muestra al final del documento? 2)Se muestra el mismo número en distintos navegadores? 3)Siempre se repite el mismo resultado de forma consistente en el mismo navegador? Código
A ver que resultados obtiene cada uno. Yo con Android con un smartphone gama baja en Samsung Browser obtengo 10505 iteraciones hasta que se llena el stack. No tengo ahora mismo más dispositivos disponibles. A ver que resultados obteneis vosotros y si podemos sacar conclusiones en base a ellos de si es un método que pueda ser útil para hacer fingerprint. Título: Re: Qué resultados obtienes al ejecutar este código? Publicado por: WHK en 4 Octubre 2019, 12:54 pm Normalmente ese script es dificil que sea ejecutado en navegadores modernos primeramente porque javascript es estrictamente lineal en ordenes de instrucciones, por ejemplo, en la segunda línea de código donde ejecutas stack() debería arrojar una excepción debido a que este aun no está definido, a demás los navegadores como google chrome y mozilla firefox detectan ese desbordamiento de pila.
Va a depender de la capacidad de hardware de cada dispositivo en el hipotético caso de que si logre ser ejecutado y evada cualquier mecanismo heurístico, el problema no se encuentra en el valor autoincrementado de i, sino de la pila de llamadas recursivas entre la función stack() y callback() ya que ninguna finaliza al ser llamada por la otra ya que no es una ejecución asíncrona provocando un desbordamiento de pila. Esto es muy común que suceda en otros lenguajes pero es controlado por el heap size o el paralelismo en el caso de Java y Python. En algunos navegadores simplemente no podrás ejecutar nada después de esta función y todo script se detendría asi que tampoco podrás comprobar el resultado de tu test a menos que exista una interacción manual por parte del usuario como el envío del contador en un form pero habría que hacer colapsar su pestaña en uso de recursos. Hay maneras mucho mas efectivas para saber que navegador está utilizando el usuario jajajaja y no hablo de su user agent por cabeceras del request sino a traves de librerías y el mismo estandar de javascript: https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser https://developer.mozilla.org/en-US/docs/Web/API/Window/navigator Saludos. Título: Re: Qué resultados obtienes al ejecutar este código? Publicado por: @XSStringManolo en 4 Octubre 2019, 13:52 pm Normalmente ese script es dificil que sea ejecutado en navegadores modernos primeramente porque javascript es estrictamente lineal en ordenes de instrucciones, por ejemplo, en la segunda línea de código donde ejecutas stack() debería arrojar una excepción debido a que este aun no está definido, a demás los navegadores como google chrome y mozilla firefox detectan ese desbordamiento de pila. En javascript si se pueden declarar variables y funciones después de utilizarlas.Va a depender de la capacidad de hardware de cada dispositivo en el hipotético caso de que si logre ser ejecutado y evada cualquier mecanismo heurístico, el problema no se encuentra en el valor autoincrementado de i, sino de la pila de llamadas recursivas entre la función stack() y callback() ya que ninguna finaliza al ser llamada por la otra ya que no es una ejecución asíncrona provocando un desbordamiento de pila. Esto es muy común que suceda en otros lenguajes pero es controlado por el heap size o el paralelismo en el caso de Java y Python. En algunos navegadores simplemente no podrás ejecutar nada después de esta función y todo script se detendría asi que tampoco podrás comprobar el resultado de tu test a menos que exista una interacción manual por parte del usuario como el envío del contador en un form pero habría que hacer colapsar su pestaña en uso de recursos. Hay maneras mucho mas efectivas para saber que navegador está utilizando el usuario jajajaja y no hablo de su user agent por cabeceras del request sino a traves de librerías y el mismo estandar de javascript: https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser https://developer.mozilla.org/en-US/docs/Web/API/Window/navigator Saludos. Cita de: Eloquent javascript 3rd edition Marijn Haverbeke Código The preceding code works, even though the function is defined below the code that uses it. Function declarations are not part of the regular top-to-bottom flow of control. They are conceptually moved to the top of their scope and can be used by all the code in that scope. This is sometimes useful because it offers the freedom to order code in a way that seems meaningful, without worrying about having to define all functions before they are used. Por lo que leí y como comentas algunos navegadores muestran valores. Mientras no se llena el stack el código funciona, asique puedo enviar los valores de i a PHP. Es más por curiosidad de si funcionaría y como. Título: Re: Qué resultados obtienes al ejecutar este código? Publicado por: MinusFour en 4 Octubre 2019, 16:15 pm Normalmente ese script es dificil que sea ejecutado en navegadores modernos primeramente porque javascript es estrictamente lineal en ordenes de instrucciones, por ejemplo, en la segunda línea de código donde ejecutas stack() debería arrojar una excepción debido a que este aun no está definido, a demás los navegadores como google chrome y mozilla firefox detectan ese desbordamiento de pila. javascript hace hoisting de las declaraciones de las funciones. Código
Lo que hace el runtime de javascript es lo mismo que si haces: Código
Incluso dentro de funciones, esto funciona: Código
O en cualquier cuerpo de bloques ({}) también. Es el mismo comportamiento con variables var: Código
Donde no hay hoisting es con cosas como let, const y class. No necesitas estar usando document.write en cada loop... Código
Eso si el navegador lo maneja como un error normal. Título: Re: Qué resultados obtienes al ejecutar este código? Publicado por: animanegra en 4 Octubre 2019, 16:43 pm En mi caso, cambia cada vez, no devuelve algo consistente. Habría que mirar si en media...
Código: try{stack();}catch(e){console.log(i);} Título: Re: Qué resultados obtienes al ejecutar este código? Publicado por: MinusFour en 4 Octubre 2019, 17:12 pm En mi caso, cambia cada vez, no devuelve algo consistente. Habría que mirar si en media... Código: try{stack();}catch(e){console.log(i);} Bueno, la variable obviamente se incrementa una y otra vez si no la localizas, necesitas restablecer i a 0. En mi chrome el valor es constante. En Firefox, el valor cambia un poco. Código
Título: Re: Qué resultados obtienes al ejecutar este código? Publicado por: @XSStringManolo en 4 Octubre 2019, 17:34 pm Samsung browser está basado en chromium. Es muy pronto para decirlo pero la tendencia parece que en navegadores con chromium el espacio para el stack es fijo? Y en mozilla una aproximación?
Son interesantes los resultados. Título: Re: Qué resultados obtienes al ejecutar este código? Publicado por: EdePC en 4 Octubre 2019, 17:36 pm Saludos,
Código
Citar Google Chrome 76.0.3809.100 (Build oficial) (64 bits) Uncaught RangeError: Maximum call stack size exceeded at overflow (strman.html:11) at stack (strman.html:9) at overflow (strman.html:12) at stack (strman.html:9) at overflow (strman.html:12) at stack (strman.html:9) at overflow (strman.html:12) at stack (strman.html:9) at overflow (strman.html:12) at stack (strman.html:9) - Mínimo número: 1 - Máximo número: 6985 - Valor de incremento constante: +1 Título: Re: Qué resultados obtienes al ejecutar este código? Publicado por: @XSStringManolo en 4 Octubre 2019, 17:43 pm Saludos, Qué hardware utilizaste?Código
- Mínimo número: 1 - Máximo número: 6985 - Valor de incremento constante: +1 Título: Re: Qué resultados obtienes al ejecutar este código? Publicado por: EdePC en 4 Octubre 2019, 19:11 pm Máx.: 6985
https://www.pccomponentes.com/lenovo-y50-70-intel-core-i7-4700hq-12gb-1tb-gtx860m-15-6- --- - Ahora lo he probado en otro PC, este es un: Google Chrome 76.0.3809.100 (Build oficial) (64 bits) (cohort: Stable) Procesador: https://ark.intel.com/content/www/es/es/ark/products/80817/intel-core-i5-4460-processor-6m-cache-up-to-3-40-ghz.html MotherBoard: https://www.gigabyte.com/Motherboard/GA-Z97P-D3-rev-11#ov Ram: 4 + 4 GB DDR3 a 1333MHz -- Los resultados fueron idénticos a los anteriores excepto que el Máx. subió un punto :xD: Máx.: 6986 |