para navegador habilitar gratis google desactivar consola como comandos chrome celular activar javascript json security browser tornado

navegador - desactivar javascript chrome



¿El secuestro de JSON sigue siendo un problema en los navegadores modernos? (1)

No, ya no es posible capturar valores pasados ​​a los constructores [] o {} en Firefox 21, Chrome 27 o IE 10. Aquí hay una pequeña página de prueba, basada en los principales ataques descritos en http://www.thespanner.co.uk/2011/05/30/json-hijacking/ :

( http://jsfiddle.net/ph3Uv/2/ )

var capture = function() { var ta = document.querySelector(''textarea'') ta.innerHTML = ''''; ta.appendChild(document.createTextNode("Captured: "+JSON.stringify(arguments))); return arguments; } var original = Array; var toggle = document.body.querySelector(''input[type="checkbox"]''); var toggleCapture = function() { var isOn = toggle.checked; window.Array = isOn ? capture : original; if (isOn) { Object.defineProperty(Object.prototype, ''foo'', {set: capture}); } else { delete Object.prototype.foo; } }; toggle.addEventListener(''click'', toggleCapture); toggleCapture(); [].forEach.call(document.body.querySelectorAll(''input[type="button"]''), function(el) { el.addEventListener(''click'', function() { document.querySelector(''textarea'').innerHTML = ''Safe.''; eval(this.value); }); });

<div><label><input type="checkbox" checked="checked"> Capture</label></div> <div><input type="button" value="[1, 2]" /> <input type="button" value="Array(1, 2);" /> <input type="button" value="{foo: ''bar''}" /> <input type="button" value="({}).foo = ''bar'';" /></div> <div><textarea></textarea></div>

window.Array y agrega un colocador a Object.prototype.foo y prueba la inicialización de matrices y objetos a través de las formas corta y larga.

La especificación ES4 , en la sección 1.5, "requiere los enlaces estándar globales de Object y Array para construir nuevos objetos para inicializadores de objetos y matrices" y notas en Implementación Precedente que "Internet Explorer 6, Opera 9.20 y Safari 3 hacen no respete los rebindings locales o globales de Object y Array, sino que use los constructores Object y Array originales ". Esto se retiene en ES5, sección 11.1.4 .

Allen Wirfs-Brock explicó que ES5 también especifica que la inicialización de objetos no debe desencadenar setters, ya que usa DefineOwnProperty. MDN: Working with Objects observa que "Comenzando en JavaScript 1.8.1, los setters ya no se llaman cuando se configuran las propiedades en el objeto y en los inicializadores de la matriz". Esto fue abordado en la edición V8 1015 .

Estoy usando Backbone.js y el servidor web de Tornado. El comportamiento estándar para recibir datos de recopilación en Backbone es enviar como una matriz JSON.

Por otro lado, el comportamiento estándar de Tornado es no permitir JSON Array debido a la siguiente vulnerabilidad:

http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx

Una relacionada es: http://haacked.com/archive/2009/06/25/json-hijacking.aspx

Me parece más natural no tener que envolver mi JSON en un objeto cuando realmente es una lista de objetos.

No pude reproducir estos ataques en los navegadores modernos (es decir, Chrome actual, Firefox, Safari e IE9). Al mismo tiempo, no pude confirmar en ninguna parte que los navegadores modernos hayan abordado estos problemas.

Para asegurarme de que no estoy engañado ni por ninguna habilidad de programación pobre, ni habilidades de búsqueda de Google pobres:

¿Son estos ataques JSON Hijacking todavía un problema hoy en día en los navegadores modernos?

(Nota: Perdón por el posible duplicado: ¿es posible hacer ''secuestro de JSON'' en el navegador moderno? Pero dado que la respuesta aceptada no parece responder a la pregunta, pensé que era hora de volver a preguntar y obtener explicaciones más claras .)