检查脚本以击败“Price-Jacking”

时间:2013-05-21 09:39:23

标签: security paypal paypal-ipn

这是我的ipn-security-ckeck的第四部分。 我需要你检查一下它是否安全:

// Check number4 ---------------------------------------------------------
$product_id_string = $_POST['custom'];
$product_id_string = rtrim($product_id_string, ","); // remove last comma
// Explode string, make it an array; check payment !
$id_values = array();
$id_str_array = explode(",", $product_id_string);
$fullAmount = 0;
foreach ($id_str_array as $key => $value) {

    $id_quantity_pair = explode("-", $value);
    $product_id = $id_quantity_pair[0]; // Get the product ID
    $product_quantity = $id_quantity_pair[1]; // Get the quantity

    if (1 != intval($product_quantity)) {
    // Somebody is manipulating the item´s quantity
    $message = "Somebody is manipulating the item´s quantity";
    mail("me@myemail.de", "Quantity Hack", $message, "From: me@myemail.de" );
    exit()  
    }

    // remember item´s ID
    $id_values[$key] = intval($product_id);
}
    $sql = 'SELECT price FROM products WHERE id IN ('.implode(',', $id_values).')';
    while($row = mysql_fetch_array($sql)) {
        $fullAmount += $row["price"];
    }
$fullAmount = number_format($fullAmount, 2);
if (isset($_POST['mc_gross'])) {
    $grossAmount = $_POST['mc_gross'];
} else
    $grossAmount = 0;
    $message = "grossAmount wurde = 0 gesetzt";
    mail("me@myemail.de", "grossAmout Hack", $message, "From: my@myemail.de" );
    exit();
if ( intval($fullAmount * 100) != intval($grossAmount *100) ) {
    $message = "Possible Price Jack: " . $_POST['payment_gross'] . " != $fullAmount \n\n\n$req";
    mail("me@myemail.de", "Price Jack or Bad Programming", $message, "From: me@myemail.de" );
    exit(); // exit script
}

这是否能成为击败顶价的好脚本? 我该改变什么吗? 如果有,那是什么? 问候和感谢

1 个答案:

答案 0 :(得分:1)

价格只应在服务器上计算。你为什么允许客户提交价格?允许客户提交价格允许他们尝试更改您的价格。其次,如果它与您在服务器上计算的内容不一致,那么无论如何都要扔掉它。只需在服务器上计算它,不接受客户提交的任何价格。

看起来除了1之外的任何数量都被视为黑客攻击,为什么?

使用

将产品ID转换为字符串
$id_values[$key] = intval($product_id);

如果客户端提交非整数值,那么我认为这将返回0.如果您的产品ID为0,则可能会导致问题。