首页
学习
活动
专区
圈层
工具
发布

防黑客
EN

Stack Overflow用户
提问于 2013-08-02 17:06:39
回答 2查看 934关注 0票数 0

我在页面加载时保存了一个javascript变量,稍后我将使用该变量。用户是否可以更改此变量。我试图找出一种方法,当用户输入某项内容时,创建一个ajax帖子,并返回几个值。

初始化()是在加载时触发的,因此变量数量很快就会被获取到页面加载中。

代码语言:javascript
复制
function initialize() {
    quantity = parseInt(document.getElementById('shipping_quantity').value);
}

然后,通过查询状态为rate的db来检索传送率。

代码语言:javascript
复制
getRate(){
    var rate = '';
    $.post('getrate.php', {state: state}, function(data){
        rate = parseInt(data);
        $("input#shipping_rate").val('$' + rate);

这是getrate.php

代码语言:javascript
复制
<?
include_once ('includes/config.php');
$state = "OK";
if(isset($_POST['state'])){ $state = $_POST['state'];}
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$st = $con->prepare( 'SELECT rate FROM freight WHERE administrative_area_level_1 = :state' );
$st->bindParam( ':state', $state, PDO::PARAM_STR, 2 );
$st->execute();
$row = $st->fetch();
$rate = $row['rate'];
echo $rate;
?>

以及如何在getRate()函数的最后一部分处理发送总量

代码语言:javascript
复制
    var total = (rate * quantity);
    $("input#shipping_total").val('$' + total);
});

当我把它放在一起的时候,它是有效的,但是我担心在计算总数之前,数量可能会被改变。

我正在考虑使船运表单post,并返回到它自己后,在一个函数php的运费计算。

我正在看的例子。

购物车教程

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-02 17:10:50

用户是否可以更改此变量。

也许,但更重要的是,您根本不能信任客户端发送给您的任何信息。“信任,但要证实”我相信这句话.因此,除了您为方便或用户界面而做的任何客户端操作之外, you 必须对服务器端进行二次检查()。

特别是在你的情况下,你说你有:

代码语言:javascript
复制
function initialize() {
    quantity = parseInt(document.getElementById('shipping_quantity').value);
}

如前所述,这似乎依赖于全局quantity变量,或者更糟的是,通过http://blog.niftysnippets.org/2008/03/horror-of-implicit-globals.html创建一个变量。在这两种情况下,是的,对用户来说更改它是很容易的。它们可以打开JavaScript控制台并键入:

代码语言:javascript
复制
window.quantity = 42;

然后按回车。

您可以通过将所有代码放在一个作用域函数中来防止这种情况,并使其变得更加困难:

代码语言:javascript
复制
(function() {
    // Your code here, e.g.:

    var quantity = 0;

    function initialize() {
        quantity = parseInt(document.getElementById('shipping_quantity').value);
    }

    // ...and so on
})();

这至少防止了它是一个全局的,而且很容易修改。但是这仍然很简单,他们所要做的就是使用任何现代浏览器,打开Dev工具,在代码中放置一个断点,当到达断点时,修改quantity的值。

无论如何,使用作用域函数是个好主意,因为全局值通常是坏消息。不过,这确实意味着,如果使用老式的onXYZ属性来连接事件处理程序,则必须从使用DOM方法(或者使用jQuery、其on函数等)改为使用DOM方法,因为onXYZ属性只能调用从全局范围访问的函数。

票数 2
EN

Stack Overflow用户

发布于 2013-08-02 17:11:07

您只需要确保Javascript将任何价格发送回被使用的服务器。那样的话,如果有人真的改变了他们,那就无关紧要了。

您的服务器将需要一次查找价格,以向用户显示它是多少,然后另一次,当他们提交订单时,计算出他们(或他们的信用卡)的账单总额。

这样你就可以控制价格,而不必在意用户是否会愚弄它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18022476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档