JSONRequest para evitar o Eval

Em artigo passado, vimos a proposta de Douglas Crockford, denominado de JSON (JavaScript Object Notation) para a troca de dados. Ele propôs também uma especificação para um novo objeto como serviço nativo nos navegadores, JSONRequest, devido a ineficiência do objeto XMLHttpRequest para as novas aplicações nas próximas geração WEB (WEB 2+). Um dos pontos principais desse novo objeto é a troca segura de objetos por meio de JSON entre o lado cliente e servidor sem expô-los ao perigo.

A especificação do XHR define, por medida de segurança, que uma chamada remota só pode ser efetuada ao mesmo caminho de onde o script foi baixado, o JSONRequest resolveria esse problema habilitando o navegador a uma chamada remota a outros servidores diferentes do host original da página, possibilitando a facilidade de acesso a WEB Services REST na camada javascript.

Hoje como alternativa a esse modelo do XHR temos o Scripttag, dessa forma conseguimos acessar recursos remotos de outros servidores mas com o problema de XSS (cross site scripting). O problema principal do XSS é a injeção de código malicioso pelo parser a partir do método “Eval” para processar o código recebido. Vimos uma alternativa de contornar o problema mas mesmo assim não é suficiente. Uma das vantagens principais do JSONRequest seria evitar o XSS.

Esse objeto JSONRequest seria nativo e global, desenhado para ser simples, teria apenas 3 métodos: get, post e cancel.

Existe já plugin para o Firefox que habilita o navegador a oferecer nativamente o objeto JSONRequest.

Para todos os navegadores somente com javascript na camada mais alta, para isso existe também o projeto JSONRequest de Andrea Giammarchi, que criou o objeto em javascript seguindo a especificação. Compatível com os principais navegadores: Opera, IE, Firefox, Safari e konqueror.

try {
    JSONRequest.get("processaJSON.jsp",
        function(sn, response, exception){
             alert(exception || response);
        });
} catch(e) {

      alert(e);

}

O W3C especificou medidas seguras para acesso a recursos web em outro servidores, assim como já existem movimentos para uma nova especificação do um novo XHR, seria algo como um XHR2. A diferença no meu entendimento é que o JSONRequest trata exclusivamente da troca de objetos nativos com base em JSON entre os dois ambientes físicos, enquanto o XHR trata da troca via XML, portanto uma nova especificação do XHR não seria suficiente para substituir a proposta do JSONRequest, a não ser que ele fizesse o parser também de JSON como faz com XML.

Typically chemist’s shop can sale to you with discreet treatments for various health problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about “viagra manufacturer coupon“. Maybe “viagra discount coupons” is a very much complicated problem. Matters, like “coupons for viagra“, are coupled numerous types of soundness problems. If you need to take prescription medications, ask your pharmacist to check your testosterone levels before. Sometimes the treatment options may include erectile dysfunction remedies or a suction device that helps get an hard-on. Keep in mind web-site which is ready to sell erectile malfunction drugs like Viagra without a prescription is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.

5 thoughts on “JSONRequest para evitar o Eval

  1. Rafael Ponte

    Muito bom 🙂 Mas eu só não entendi direito este trecho,
    “A especificação do XHR define, por medida de segurança, que uma chamada remota só pode ser efetuada ao mesmo caminho de onde o script foi baixado […]”

    Poderia explicar? 😛

  2. cmilfont Post author

    a especificação determina que o objeto XHR só pode efetuar uma requisição a um serviço que esteja na mesma uri de origem dela, conhecido como “same-domain policy”, exemplo:

    http://www.milfont.org/scriptComXHR.js
    http://www.milfont.org/recurso.php

    o objeto XHR contido no scriptComXHR.js só poderá requisitar do caminho http://www.milfont.org e paths abaixo dele como http://www.milfont.org/outrorecurso/
    se tentar de rponte.com.br por exemplo lançará uma SECURITY_ERR. Sacou?

    *
    “Two URIs are same-origin if after performing scheme-based normalization on both URIs as described in section 5.3.3 of RFC 3987 the scheme, ihost and port components are identical. If either URI does not not have an ihost component the URIs must not be considered same-origin. [RFC3987]”
    http://www.w3.org/TR/XMLHttpRequest/#terminology

  3. cmilfont Post author

    esqueci de mencionar, para contornar esse problema uma das formas mais usadas é criar um mecanismo de proxy no mesmo servidor para buscar de outro host e enviar

  4. Pingback: Resumo javascript - Jan 2008 - CMilfont Tech

  5. Pingback: Ajax Crossbrowser no IE8 e FF3 - CMilfont Tech

Comments are closed.