{"id":439,"date":"2022-03-29T16:50:26","date_gmt":"2022-03-29T16:50:26","guid":{"rendered":"https:\/\/sidroniolima.com.br\/blog\/?p=439"},"modified":"2022-03-29T16:50:30","modified_gmt":"2022-03-29T16:50:30","slug":"pode-isso-cielo-falha-de-seguranca-na-api-cielo-3-0","status":"publish","type":"post","link":"https:\/\/sidroniolima.com.br\/blog\/2022\/03\/29\/pode-isso-cielo-falha-de-seguranca-na-api-cielo-3-0\/","title":{"rendered":"Pode isso, Cielo? Falha de seguran\u00e7a na API Cielo 3.0"},"content":{"rendered":"\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=sidroniolima\" class=\"twitter-share-button\">Tweet<\/a><\/div>\n\n<p>Existe uma falha de seguran\u00e7a na API Java 3.0 da Cielo que exp\u00f5e dados da resposta de uma transa\u00e7\u00e3o.<\/p>\n<p>O m\u00e9todo <em>parseResponse<\/em> da calsse <em>AbstractSaleRequest&lt;Request, Response&gt;<\/em> chama o <em>sysout<\/em> com a string do corpo da resposta.<\/p>\n<p>A chamada desse m\u00e9todo imprime campos como nome do cliente que consta no cart\u00e3o de cr\u00e9dito, n\u00fameros do cart\u00e3o com apenas 6 d\u00edgitos omitidos, data de vencimento da cart\u00e3o e ID do pagamento, entre outros.<\/p>\n<p>Em tempos de LGPD, \u00e9 inadimiss\u00edvel que isso seja exposto.<\/p>\n<p>Abri um chamado pelo suporte da Cielo mas n\u00e3o surtiu efeito. Abri uma <em>issue<\/em> no <a href=\"https:\/\/github.com\/DeveloperCielo\/API-3.0-Java\">github<\/a> e at\u00e9 agora n\u00e3o responderam. A API parece abandonada e, portanto, deveria, ao menos, ser considerada depreciada.<\/p>\n<p>A solu\u00e7\u00e3o foi utilizar a API Rest, que n\u00e3o apresenta essa falha.<\/p>\n<p>Segue\u00a0 o c\u00f3digo do m\u00e9todo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n\t * Just decode the JSON into a Sale or create the exception chain to be\n\t * thrown\n\t *\n\t * @param statusCode\n\t *            The status code of response\n\t * @param responseBody\n\t *            The response sent by Cielo\n\t * @return An instance of Sale or null\n\t * @throws CieloRequestException\n\t *\/\n\tprivate Response parseResponse(int statusCode, String responseBody, Class&lt;Response> responseClassOf)\n\t\t\tthrows CieloRequestException {\n\t\tResponse response = null;\n\t\tGson gson = new Gson();\n\n\t\tSystem.out.println(responseBody);\n\n\t\tswitch (statusCode) {\n\t\tcase 200:\n\t\tcase 201:\n\t\t\tresponse = gson.fromJson(responseBody, responseClassOf);\n\t\t\tbreak;\n\t\tcase 400:\n\t\t\tCieloRequestException exception = null;\n\t\t\tCieloError&#91;] errors = gson.fromJson(responseBody, CieloError&#91;].class);\n\n\t\t\tfor (CieloError error : errors) {\n\t\t\t\tSystem.out.printf(\"%s: %s\", \"Cielo Error &#91;\" + error.getCode() + \"]\", error.getMessage());\n\n\t\t\t\texception = new CieloRequestException(error.getMessage(), error, exception);\n\t\t\t}\n\n\t\t\tthrow exception;\n\t\tcase 404:\n\t\t\tthrow new CieloRequestException(\"Not found\", new CieloError(404, \"Not found\"), null);\n\t\tdefault:\n\t\t\tSystem.out.printf(\"%s: %s\", \"Cielo\", \"Unknown status: \" + statusCode);\n\t\t}\n\n\t\treturn response;\n\t}<\/code><\/pre>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=sidroniolima\" class=\"twitter-share-button\">Tweet<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Existe uma falha de seguran\u00e7a na API Java 3.0 da Cielo que exp\u00f5e dados da resposta de uma transa\u00e7\u00e3o. O m\u00e9todo parseResponse da calsse AbstractSaleRequest&lt;Request, Response&gt; chama o sysout com a string do corpo da resposta. A chamada desse m\u00e9todo imprime campos como nome do cliente que consta no cart\u00e3o de cr\u00e9dito, n\u00fameros do cart\u00e3o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-439","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts\/439","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/comments?post=439"}],"version-history":[{"count":1,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts\/439\/revisions"}],"predecessor-version":[{"id":440,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/posts\/439\/revisions\/440"}],"wp:attachment":[{"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/media?parent=439"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/categories?post=439"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sidroniolima.com.br\/blog\/wp-json\/wp\/v2\/tags?post=439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}