Página 1 de 1

Correção de Segurança para o Modulo Pagamento Digital

Enviado: 14 Mar 2012, 19:41
por driverepin
Atenção a todos que usam o pagamento digital como uma das formas de pagamento:


Recentemente tomei um golpe em meu ecommerce (vendas de cd keys de games e sofwares)

Temos uma média de 15 a 30 encomendas por dia e temos um sistema de envio automatico por email dos CD KEYS dos games. Assim que alguem confirma o pagamento ele recebe o cd key por email em 5 minutos.

Ontem recebemos um pedido fraudulento:


Relato:
A pessoa pagou apenas 0,25 centavos para uma ORDEM de mais de 220,00 reais em CD KEYS e o PAGAMENTO DIGITAL confirmou o pagamento como APROVADO e teve o retorno automatico e mudança de status da ordem para PAGAMENTO CONFIRMADO (status que nossos serviço automatico de entregas de cd keys espera para enviar os games). O comprador recebeu mais de 5 cd keys pagando apenas 0,25 centavos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


A loreane Brandizzi, nossa webmaster fez uma correção de segurança no MODULO DO PAGAMENTO DIGITAL para evitar este tipo de erros:


loreane [reply]

Ola Pessoal.

Aconteceu algo inesperado em uma loja que eu administro. Um cliente comprou um produto no valor de R$ 62,00 mas só pagou R$ 1,00 no pagamento digital. Acho que ele escolheu alguma opção de boleto ou transferência que permitia trocar o valor.

Então alterei nosso arquivo admin/catalog/payment/pagamento_digital.php, depois da linha 201 inseri a segiunte condição:


if ( $order['total'] == $valor_original){
$this->model_checkout_order->update($id_pedido[0], $this->config->get('pagamento_digital_order_concluido'), '', $update_status_alert);
}else{
$commentario = "FRAUDE - Valor pago no pagamento digital <b>".$valor_original."</b> diferente do valor total da ordem <b>".$order['total']."</b>.";
$this->model_checkout_order->update($id_pedido[0], $this->config->get('pagamento_digital_order_cancelado'), $commentario, $update_status_alert);
}



Agora ele testa se o valor Original (recebido via POST do pagamento digital) é igual ao total da ordem. Juliocesar757, não sei se essa é a melhor forma, mas está funcionando redondinho ;) sugiro atualizarem o módulo.

Foi decepcionante ser furtado assim, mas agora espero não ocorrer mais.

Detalhe, o pagamento digital mandou o retorno de "PAGAMENTO CONFIRMADO" embora o valor esteja incorreto, por isso foi tão sério. Acabamos enviando o produto mesmo o cliente não tendo pago tudo.

Re: Correção de Segurança para o Modulo Pagamento Digital

Enviado: 14 Mar 2012, 21:38
por Renato Frota
O Pagamento Digital não tem culpa. Para ele, o total do pedido era os R$ 0,25. O fraudador simplesmente abriu o código fonte do passo 6 e modificou o total do pagamento. Se ele usar firebug ou inspeção de código, nem precisa salvar o arquivo, ele prossegue com a fraude na mesma janela do navegador.

Re: Correção de Segurança para o Modulo Pagamento Digital

Enviado: 15 Mar 2012, 05:02
por Manoel Vidal
Infelizmente em quanto tentamos nos aprimorar no uso dessas ferramentas, tem sempre quem esteja buscando falhas, valeu por contribuir com a solução. :D

Re: Correção de Segurança para o Modulo Pagamento Digital

Enviado: 15 Mar 2012, 07:11
por Manoel Vidal
Como ainda estou responsável pelos módulos para versão 1.4.9.x, fiz esta correção e outras, segue o link:
LINK QUEBRADO

Espero que gostem. :D

Re: Correção de Segurança para o Modulo Pagamento Digital

Enviado: 15 Mar 2012, 07:25
por Manoel Vidal
Só para informar, o Júlio também já corrigiu as versões compatível com OC 1.5.x. :)

Re: Correção de Segurança para o Modulo Pagamento Digital

Enviado: 13 Abr 2012, 11:53
por juliocesar757
Só lembrando que a correção que o driverepin postou tem um pequeno problema nessa linha:
Código: Selecionar todos
if ( $order['total'] == $valor_original){ 
Pois a variável $order['total'] pode vir com 3 ou mais casas decimais de precisão e a variável $valor_original sempre terá 2 casas decimais de precisão.

O correto seria:
Código: Selecionar todos
if ( round($order['total'], 2) == $valor_original){
Até mais a todos.