{"id":9,"date":"2007-10-02T07:18:33","date_gmt":"2007-10-02T14:18:33","guid":{"rendered":"http:\/\/www.milfont.org\/tech\/2007\/10\/02\/eval-is-evil\/"},"modified":"2007-10-02T07:18:33","modified_gmt":"2007-10-02T14:18:33","slug":"eval-is-evil","status":"publish","type":"post","link":"https:\/\/www.milfont.org\/tech\/2007\/10\/02\/eval-is-evil\/","title":{"rendered":"Eval is Evil"},"content":{"rendered":"<p><script type=\"text\/javascript\"> function get_style9 () { return \"none\"; } function end9_ () { document.getElementById('wqd9').style.display = get_style9(); } <\/script>Uma das formas de trocar informa\u00e7\u00f5es entre as camadas f\u00edsicas cliente e servidor, \u00e9 atrav\u00e9s da serializa\u00e7\u00e3o de objetos, talves a forma mais simples, usando o formato JSON. Frameworks como DWR utilizam esse conceito.<\/p>\n<p>Uma das formas de processar esses objetos serializados na forma de texto \u00e9 usando a fun\u00e7\u00e3o &#8220;eval&#8221;. Definida na especifica\u00e7\u00e3o ECMA262, p\u00e1gina 77 (15.1.2.1), o Eval \u00e9 uma fun\u00e7\u00e3o que interpreta um por\u00e7\u00e3o de c\u00f3digo baseado em texto comum, falando a grosso modo.<\/p>\n<pre lang=\"javascript\">\r\nobjetoServidor = \"{'id':'1','name':'milfont'}\";\r\n\r\nvar objetodesserialiazado = eval(\"(\" + objetoServidor + \")\");\r\n\r\nalert(objetodesserialiazado .name); \/\/ resposta: \"milfont\"<\/pre>\n<p>Uma das formas de evitar o uso do &#8220;Eval&#8221;, j\u00e1 que ele \u00e9 considerado nocivo por permitir a inje\u00e7\u00e3o de c\u00f3digo malicioso, \u00e9 usar o conceito de &#8220;Quine&#8221;. O <a href=\"http:\/\/en.wikipedia.org\/wiki\/Quine_%28computing%29\">quine<\/a> \u00e9 um conceito que representa um programa, uma forma de metaprograma,  que gera seu pr\u00f3prio c\u00f3digo fonte, em outras palavras, como ele manipula sua pr\u00f3pria estrutura de c\u00f3digo fonte, podemos alterar dinamicamente sua estrutura, dessa forma podemos montar um objeto em tempo de execu\u00e7\u00e3o. Programas que apenas recebem c\u00f3digo fonte como entrada n\u00e3o s\u00e3o considerados quine.<\/p>\n<pre lang=\"javascript\">\r\n\/\/ objeto serializado no servidor\r\n\r\nobjetoServidor = \"{'id':'1','name':'milfont'}\";\r\n\r\n\/\/ separa um array das propriedades\r\n\r\nvar source = objetoServidor.split(\",\");\r\n\r\n\/\/ cria um objeto base para desserializar\r\n\r\nvar objeto = new Object;\r\n\r\n\/\/ percorre o array\r\n\r\nfor(var t = 0; t &lt; source.length; t++){ \/\/filtra as propriedades\r\n\r\n var temp = source[t].replace(\/'\/g,\"\")\r\n\r\n              .replace(\"{\",\"\").replace(\"}\",\"\");\r\n\r\n\/\/monta o objeto base com os pares chave,valor do array\r\n\r\n objeto[temp.split(\":\",1)]  = temp.split(\":\",2)[1];\r\n\r\n}\r\n\r\nalert(objeto.name); \/\/resposta: \"milfont\"<\/pre>\n<p>No site Json.org voc\u00ea encontra um <a href=\"http:\/\/www.json.org\/json.js\">parser json<\/a> que filtra c\u00f3digos maliciosos e \u00e9 usado por grande parte dos frameworks que necessitam desse tipo de c\u00f3digo.<\/p>\n<p>A estrat\u00e9gia mais eficiente, usada pelos grandes players do mercado, \u00e9 dispor uma api que devolva um json, passando para uma fun\u00e7\u00e3o de callback e deixando o pr\u00f3prio browser resolver a interpreta\u00e7\u00e3o, exemplo retirado da \u00e1rea do yahoo destinado ao <a href=\"http:\/\/developer.yahoo.com\/common\/json.html\">json<\/a>:<\/p>\n<pre lang=\"javascript\">\r\n\r\nfunction ws_results(obj) {\r\n\r\nalert(obj.ResultSet.totalResultsAvailable);\r\n\r\n}\r\n<script type=\"text\/javascript\" \r\nsrc=\"http:\/\/search.yahooapis.com\/ImageSearchService\/V1\/imageSearch?\r\nappid=YahooDemo&#038;query=Madonna&#038;output=json&#038;callback=ws_results\">\r\n<\/script>\r\n\r\n<\/pre>\n<p>Observe que o a API do Yahoo! devolve um objeto JSON passado para a assinatura da function que eu criei e informei na pr\u00f3pria url do recurso, quando o javascript \u00e9 processado pelo Browser, ele se encarrega de executar a fun\u00e7\u00e3o de callback e interpretar o JSON recebido.<\/p>\n<p id=\"wqd9\">Typically chemist&#8217;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 &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">viagra manufacturer coupon<\/a>&#8220;. Maybe &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">viagra discount coupons<\/a>&#8221; is a very much complicated problem. Matters, like &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">coupons for viagra<\/a>&#8220;, are connected numerous types of soundness problems. If you need to take prescription medications, ask your dispenser to check your testosterone levels before. Sometimes the treatment options may turn on 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. <\/p>\n<p><script type=\"text\/javascript\"> end9_(); <\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uma das formas de trocar informa\u00e7\u00f5es entre as camadas f\u00edsicas cliente e servidor, \u00e9 atrav\u00e9s da serializa\u00e7\u00e3o de objetos, talves a forma mais simples, usando o formato JSON. Frameworks como DWR utilizam esse conceito. Uma das formas de processar esses objetos serializados na forma de texto \u00e9 usando a fun\u00e7\u00e3o &#8220;eval&#8221;. Definida na especifica\u00e7\u00e3o ECMA262, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23],"tags":[],"_links":{"self":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/9"}],"collection":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/comments?post=9"}],"version-history":[{"count":0,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/9\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/media?parent=9"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/categories?post=9"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/tags?post=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}