ACTUALIZACION 30/09/2014:

 

Esta semana conseguimos hablar con developers del sector IT de MercadoPago.com a través de su grupo de Google, y ya resolvieron el caso en este post. De modo que MercadoPago.com ya está enviando un user-agent en todas sus notificaciones IPN a los sitios web.

 

De hecho, y para facilitar el rastreo en los logs, implementaron 3 tipos de User-Agent:

  • Para notificaciones de pago: «MercadoPago Feed v2.0 payment«
  • Para notificaciones de pago en modo Sandbox: «MercadoPago Sandbox Feed v2.0 payment«
  • Para notificaciones de pago desde el Tester: «MercadoPago Test Feed v2.0 payment«

 

De modo que ya no es necesario desactivar la banlist de HackRepair en el plugin iThemes Security para poder recibir las notificaciones de MercadoPago. De todos modos, y como antecedente, deben saber que si reciben un error 500 al probar las notificaciones IPN de MercadoPago con su Tester, lo más probable es que haya algun otro componente bloqueándole el acceso.

 

Lean el artículo original a continuación, si gustan. O pueden saltar directamente a la Conclusión del final para un resumen de la situación.

 

Muchas gracias a todos los que colaboraron para lograr la solución!


Hace un tiempo vengo notando que en algunos sitios de e-commerce basados en WooCommerce y usando la integración de MercadoPago, cuando un cliente concreta una compra, el encargado del sitio web no se entera de la misma si no fuera porque MercadoPago envía un email con el aviso, o cuando un cliente enojado llama al comercio en cuestión para reclamar por su compra… Porque WooCommerce no recibe la notificación desde MercadoPago.

Pero a qué se debe esto?

¿Y por qué en algunos sitios web usando WooCommerce y MercadoPago funciona bien y en otros no? La respuesta es simple, el culpable siempre es un plugin. Bueno, no para tanto, sobre todo cuando el «culpable» es un plugin de seguridad.

Los que tengan WooCommerce integrado con MercadoPago, seguramente ya están usando el genial plugin WooCommerce MercadoPago del developer brasileño Claudio Sanches. Cuando configuramos ese plugin, tal como lo explica en su página de instalación, uno de los pasos consiste en especificar dentro de nuestra cuenta de MercadoPago.com una URL donde recibir las notificaciones de pagos:

mercado-pago-notif

Pero resulta que al Probar la URL, en algunos sitios funciona bien, y en otros se obtiene un error 403. El error 403 nos indica que «algo» está impidiéndole a MercadoPago conectarse. Y este error 403 es el que impide a MercadoPago notificar las operaciones al sitio WordPress.

¿Pero por qué se genera ese error?

Me costó encontrar al causante, porque básicamente hay que ir desactivando cosas, de a una, y ver si el problema se resuelve. Hasta que encontré un factor común en los sitios que generan este error 403: y se debe a un plugin de seguridad.

Se trata del iThemes Security, pero el problema surge cuando tengamos activada la funcionalidad de HackRepair’s blacklist para bloquear user agents:

ithemes banned users

Esta funcionalidad añade al archivo htaccess del sitio web una serie de filtros que bloquean una lista de user agents que son conocidos por utilizarse en distintas aplicaciones «maléficas» como scrapers, bots y motores de búsqueda de dudosa reputación.

Esta lista viene embebida en el plugin y usa la lista pública de user agents de HackRepair.com de aquí: http://pastebin.com/5Hw9KZnW, y es bastante segura y confiable. En serio. Se actualiza cada mes o dos meses desde el 2012.

Por supuesto, MercadoPago.com no figura en la lista de user-agents de dudosa reputación, pero la lista en sí comienza bloqueando a todo aquel que no especifique un user-agent. Específicamente, esa regla de la lista es esta, que podemos comentar anteponiendo un signo numeral # al comienzo:

# RewriteCond %{HTTP_USER_AGENT} ^$ [NC,OR]

Y ahí es donde fallaron los chicos de MercadoPago.com. Si vemos los logs de Apache, encontraremos que precisamente, su conexión no establece un user-agent:

216.33.196.4 - - [11/Sep/2014:19:16:20 -0300] «POST /?wc-api=WC_MercadoPago_Gateway&topic=payment&id=793367215 HTTP/1.1» 200 1 «-» «-«

Si tan solo los developers de MercadoPago.com añadieran un nombre de user agent a sus peticiones remotas, se solucionaría este problema y se podría mejorar un poquito más la seguridad en los sitios de ecommerce, lo que no es decir poco, verdad?

Conclusiones:

Si desactivamos la funcionalidad de la ban list de HackRepair del plugin iThemes Security, vamos a poder aceptar conexiones desde MercadoPago.com, pero nos quedaríamos un poquitín expuestos a una serie de bots que usen nuestro ancho de banda y que puedan intentar vaya a saber uno qué.

Si activamos la funcionalidad mencionada, vamos a estar un poquito más seguros, pero no vamos a recibir notificaciones automáticas de compras desde MercadoPago, con lo que se pierde la bella «automatización» que esperábamos tener con WooCommerce.

Así que la solución ideal sería que alguien dentro de MercadoPago tome cartas en el asunto y corrijan ese comportamiento de sus sistemas. Algo que no insume más que una línea de código y que les permitiría ayudar a muchos a implementar una mejor seguridad. Y un mejor ecommerce. Esperemos que así sea.

PD: Y no, pedirle a iThemes que retire la regla que bloquea a MercadoPago sería simplemente ridículo, ya que previene que muchas otras amenazas lleguen siquiera a tocar nuestras webs.