【问题标题】:Best way to pass sensitive variables on click event?在点击事件上传递敏感变量的最佳方法?
【发布时间】:2014-05-11 14:24:53
【问题描述】:

我正在寻找一种通过 ajax 将敏感变量传递给 php 文件的安全方法。目前我一直在使用数据属性,但是可以使用诸如 firebug 之类的东西来更改值。

HTML:

<div class="strip">
    <?php
        if($hide == 0) {
            echo '<h2 class="action" data-type="1" data-id="<?php echo $id; ?>" data-action="0">Hide Business</h2>';
        }
        if($hide == 1) {
            echo '<h2 class="action" data-type="1" data-id="<?php echo $id; ?>" data-action="1">Un-Hide Business</h2>';
        }
    ?>
    <h2 class="action" data-type="1" data-id="<?php echo $id; ?>" data-action="2">Delete Business</h2>
</div>

JavaScript/JQuery:

$(".action").click(function() {
    var type = $(this).data("type");
    var id = $(this).data("id");
    var action = $(this).data("action");

    $.ajax({
        url : 'assets/php/confirm.php',
        type : 'POST',
        data : "type="+type+"&action="+action+"&ids="+id,
        success : function (result) {
            alert(result);
        }
    });
});

PHP:

if(isset($_POST['type'], $_POST['action'], $_POST['ids'])) {
    $type = $_POST['type'];
    $action = $_POST['action'];
    $ids = explode(",", $_POST['ids']);
    $count = count($ids);

    if($type == 0) {
        if($action == 1) {
            $stmt = $mysqli->prepare("DELETE FROM deals WHERE id=?");
        } else {
            $stmt = $mysqli->prepare("UPDATE deals SET hide=0 WHERE id=?");
        }
    } else {
        if($action == 1) {
            $stmt = $mysqli->prepare("DELETE FROM businesses WHERE id=?");
        } else {
            $stmt = $mysqli->prepare("UPDATE businesses SET hide=0 WHERE id=?");
        }
    }

    for($i = 0; $i < $count; $i++) {
        $stmt->bind_param('s', $ids[$i]);
        $stmt->execute();
        $stmt->close();
    }
    echo 'Success updated '.$_POST['ids'];
}

需要安全的变量是数据类型、数据标识、数据操作值。原因是我不希望删除错误的数据库条目。 我不知道任何替代方案,所以任何帮助都会很棒。

【问题讨论】:

  • 任何客户端都必须被视为公开的,因此不应在没有任何服务器端检查的情况下将敏感数据发送到客户端。因此,请检查服务器端是否允许用户对这些敏感数据做他想做的事情
  • 任何东西都可以被篡改,不仅仅是数据属性。您可以在没有浏览器的情况下发送请求事件,所以...只需使用正确的验证

标签: javascript php jquery variables button


【解决方案1】:

如果您想阻止用户更改它们,那么您根本无法从用户那里获取它们。而是将数据存储在服务器上。

如果您想限制从用户那里接受的值,请在服务器上限制它们。执行身份验证和授权。确保正在更改的值是允许登录用户更改的值。

【讨论】:

  • 我如何检查它是否已经改变了它的原始值? 'id' & 'type' 我可以与数据库值交叉检查,但我不知道该怎么做。
  • 缺少存储原始值(在这种情况下,将值发送到客户端并返回没有意义)您无法检查它是否已从其原始值更改。您只能检查服务器收到的值是否可接受(通过您要设置的任何条件来描述可接受的值)。
【解决方案2】:

由于您在客户端上的代码 - 在浏览器内 - 无法隐藏,因此您应该保护客户端和 Web 服务器之间的连接 - 为此使用 SSL/TSL...

【讨论】:

  • 在发送之前可以更改值吗?
  • 客户端上的任何内容都可以更改 - 如果您想阻止它,请不要将其发送给客户端...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 2012-05-10
  • 2018-09-10
  • 2015-04-07
  • 2011-06-21
  • 1970-01-01
相关资源
最近更新 更多