Una parte importante de tener éxito como proveedor de productos digitales es la de tomar precauciones para proteger su producto e impedir que se lo descargue en forma indebida. En esta guía, le ofrecemos varios pasos que puede tomar para mantener la seguridad de su producto.

Protección de su página de agradecimiento

Aquí hay algunas sugerencias para proteger su página de agradecimiento:

  1. Inserte el siguiente código HTML en el elemento <HEAD> de su página de agradecimiento; esto puede prevenir que un robot de motor de búsqueda indexe esa página o los siguientes enlaces en esa página:
    META name=”robots” content=”noindex, nofollow”
  2. Déle a la dirección de URL de su página de agradecimiento un nombre de archivo oscuro (no debe ser algo como agradecimiento.htm, que es muy fácil de adivinar)
  3. Si le preocupa la seguridad y tiene experiencia en programación de la interfaz de entrada común (CGI, Common Gateway Interface), puede generar un guión que verificará la conclusión satisfactoria del proceso de compra del cliente antes de permitirle acceso a la página de agradecimiento. Siga las instrucciones que aparecen a continuación para implementar el guión de seguridad de enlace de ClickBank.

Guión de seguridad de enlace de ClickBank

Cuando el cliente completa una compra, una gran cantidad de valores son transferidos a su página de agradecimiento en la cadena de consulta si usted especificó una clave secreta (enlace a entrada del Glosario) en su configuración de la cuenta. Estos valores son el número de recibo de ClickBank (cbreceipt), el momento del pedido (hora), el número de artículo ClickBank (artículo), y el comprobante de compra ClickBank (cbpop).

Durante la compra, ciframos el recibo, la hora y el artículo y usamos la clave secreta que especificó en su cuenta. Entonces le transferiremos el resultado en un parámetro de cadena de consulta llamado cbpop. Use el guión de validación para confirmar que el valor cbpop es correcto.

A diferencia de versiones anteriores de este guión, no se necesita un valor “semilla”.

Los ejemplos C#, VB.NET y Ruby que se ofrecen a continuación constituyen solo un método para verificar la existencia de un valor cbpop válido y dejar la captura de los parámetros de la solicitud a cargo de sus implementaciones individuales. Estas muestras de códigos no se aplican al Servicio de notificación instantánea.


 PHP SOURCE:

function cbValid()
{ $key='YOUR SECRET KEY';
  $rcpt=$_REQUEST['cbreceipt'];
  $time=$_REQUEST['time'];
  $item=$_REQUEST['item'];
  $cbpop=$_REQUEST['cbpop'];

  $xxpop=sha1("$key|$rcpt|$time|$item");
  $xxpop=strtoupper(substr($xxpop,0,8));

  if ($cbpop==$xxpop) return 1;
  else return 0;
}

 PERL SOURCE:

sub cbValid
{ my($q,$key,$rcpt,$time,$item,$cbpop,$xxpop);
  $key='YOUR SECRET KEY';

  $q='&'.$ENV{'QUERY_STRING'};
  $q=~/Wcbreceipt=(w+)/; $rcpt=$1;
  $q=~/Wtime=(w+)/;      $time=$1;
  $q=~/Witem=(w+)/;      $item=$1;
  $q=~/Wcbpop=(w+)/;     $cbpop=$1;

  use Digest::SHA1 qw(sha1_hex);
  $xxpop=uc(substr(sha1_hex("$key|$rcpt|$time|$item"),0,8));
  return 1 if $cbpop eq $xxpop;
  return 0;
}

 C# SOURCE:

public bool cbValid(string cbreceipt, string time, string item, string cbpop)
{
    string secret_key = "YOUR SECRET KEY";

    byte[] data = Encoding.Default.GetBytes(secret_key + "|" + cbreceipt + "|" + time + "|" + item);
    byte[] hashedData = new SHA1Managed().ComputeHash(data);

    string xxpop = BitConverter.ToString(hashedData).Replace("-","").ToUpper().Substring(0, 8);

    return cbpop.Equals(xxpop);
}

 VB.NET SOURCE:

Public Function cbValid(ByVal receipt As String, ByVal time As String, ByVal item As String, ByVal cbpop As String) As Boolean
    Dim key As String = "YOUR SECRET KEY"
    Dim sha As New SHA1CryptoServiceProvider()
    Dim mash As String = key & "|" & receipt & "|" & time & "|" & item

    Dim result() As Byte = sha.ComputeHash(New System.Text.ASCIIEncoding().GetBytes(mash))

    Dim xxpop As String = BitConverter.ToString(result).Replace("-", "").ToUpper().Substring(0, 8) 

    Return cbpop.Equals(xxpop)
End Function

 Ruby SOURCE:

require 'digest/sha1'

def cbValid(receipt, time, item, cbpop)
  key = "YOUR SECRET KEY"

  popCheck = "#{key}|#{receipt}|#{time}|#{item}"
  xxpop = Digest::SHA1.hexdigest(popCheck).upcase[0,8]

  cbpop == xxpop
end