如何防止在php中提交检查元素值

时间:2014-04-08 07:45:30

标签: php wordpress form-submit

我在网上遇到了一个非常奇怪的问题。

我制作产品页面及其价格。当我去购物车并提交贝宝时,它会完美地提交,但是当我获得检查元素并更改值时,输入值已经更改,当我提交按钮时,检查值会被提交。

我在代码中做了一些事情但没有任何事情发生

这是我的代码

    function wp_paypal_product($atts) {
    extract(shortcode_atts(array(
        'prodname' => 'no value'
                    ), $atts));

    global $wpdb;
    $table = $wpdb->prefix . 'paypal_products';
    $prodname = str_replace('-', ' ', $prodname);
    $shorcode_product = $wpdb->get_row("SELECT * FROM $table WHERE product_name ='$prodname'");
    $product_name = $shorcode_product->product_name;
    $product_price = $shorcode_product->product_price;
    $product_id = $shorcode_product->id;
    $paypalID = get_option('paypalID');
    $currency = get_option('currency');
    $upload_image = get_option('upload_image');
    $return_url = get_option('return_url');
    $email_subject = get_option('email_subject');
    $email_message = get_option('email_message');

    if (!$upload_image) {
        $upload_image = 'http://www.paypalobjects.com/en_US/i/btn/btn_buynow_LG.gif';
    }

    $output = $product_name . '<br>'
            . $product_price . '<br>'
            . $paypalID . '<br>'
            . $currency . '<br>'
            . $upload_image . '<br>'
            . $return_url . '<br>'
            . $email_subject . '<br>'
            . $email_message . '<br>';

    $output = '<form name="_xclick" action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
        <input type="hidden" name="cmd" value="_xclick">
        <input type="hidden" name="business" value="' . $paypalID . '">
        <input type="hidden" name="return" value="' . $return_url . '">
        <input type="hidden" name="currency_code" value="' . $currency . '">
        <input type="hidden" name="item_name" value="' . $product_name . '">
        <input type="hidden" name="amount" value="' . $product_price . '">
        <input name="notify_url" value="' . plugin_dir_url(__FILE__) . 'ipn.php" type="hidden">
        <input type="image" src="' . $upload_image . '" border="0" name="submit" alt="Make payments with PayPal - its fast, free and secure!"> 
        </form>';

    return $output;
}


add_shortcode('wp-paypal-product', 'wp_paypal_product');

如何防止提交时的检查值......请帮助我。

2 个答案:

答案 0 :(得分:3)

你不能阻止这一点。正确的方法是只将产品的ID传输到服务器,并在将数据添加到购物车之前从数据库中读取价格。或者,更好的是,只显示购物车中的ID并在显示购物车时从数据库中读取价格。

传输关键数据时不要依赖POST数据,用户可以通过太多方式对其进行修改。如果您使用JavaScript来阻止提交经过调整的表单,则用户可以禁用JavaScript。或者他可以使用代理应用程序(ParosFiddlerWebScarab是代理应用程序的示例,旨在分析和修改浏览器和服务器之间的HTTP请求和响应)以进行修改实际传输之前的POST数据。

仅在会话中存储关键数据。

答案 1 :(得分:0)

好的,这是为了防止数据保存在Inspect Element中的每一个....这项工作100000%工作。

这对在线购物非常有帮助

现在您可以在表单之后放置jQuery代码。

喜欢这个

$output = '<form name="_xclick" action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
        <input type="hidden" name="cmd" value="_xclick">
        <input type="hidden" name="business" value="' . $paypalID . '">
        <input type="hidden" name="return" value="' . $return_url . '">
        <input type="hidden" name="currency_code" value="' . $currency . '">
        <input type="hidden" name="item_name" value="' . $product_name . '">
        <input type="hidden" name="amount" id="p'.$product_id.'" value="' . $product_price . '">
        <input name="notify_url" value="' . plugin_dir_url(__FILE__) . 'ipn.php" type="hidden">
        <input type="image" src="' . $upload_image . '" border="0" name="submit" alt="Make payments with PayPal - its fast, free and secure!"> 
        </form>';

    $output .= "<script>
                    jQuery(document).ready(function(){
                        var a=".$product_price.";
                        jQuery('form[name=_xclick]').submit(function(c){
                            var b=jQuery('input[id=p".$product_id."]').val();
                            if(b==a){
                                return
                            }else{
                                c.preventDefault()
                            }
                        })
                    });
                </script>";

    return $output;

首先我们在价格文本字段中输入id 我们在jQuery中保存DB的价格 然后我们在提交时调用表格保存金额文本字段的值 然后我们检查DB值和金额值是否相同然后继续它停止。

如果有任何on可以更改inspect元素中的amount值,则表单不会被提交。

希望这会对你有所帮助。

但你应该知道,使用这种方法,确定的攻击者仍然可以改变你的价格,即使joe用户可能无法检查元素。因此,更好的选择是仅提交产品ID并使用服务器端流程与PayPal进行通信。