我在网上遇到了一个非常奇怪的问题。
我制作产品页面及其价格。当我去购物车并提交贝宝时,它会完美地提交,但是当我获得检查元素并更改值时,输入值已经更改,当我提交按钮时,检查值会被提交。
我在代码中做了一些事情但没有任何事情发生
这是我的代码
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');
如何防止提交时的检查值......请帮助我。
答案 0 :(得分:3)
你不能阻止这一点。正确的方法是只将产品的ID传输到服务器,并在将数据添加到购物车之前从数据库中读取价格。或者,更好的是,只显示购物车中的ID并在显示购物车时从数据库中读取价格。
传输关键数据时不要依赖POST数据,用户可以通过太多方式对其进行修改。如果您使用JavaScript来阻止提交经过调整的表单,则用户可以禁用JavaScript。或者他可以使用代理应用程序(Paros,Fiddler,WebScarab是代理应用程序的示例,旨在分析和修改浏览器和服务器之间的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进行通信。