【问题标题】:Prevent user from editing checkbox value with something like FireBug?防止用户使用 FireBug 之类的东西编辑复选框值?
【发布时间】:2012-06-24 20:15:28
【问题描述】:

我有一个管理页面,其中列出了一堆记录,每条记录旁边都有一个复选框,用于将其设置为“活动”状态。每个复选框都有一个值,该值与数据库中记录的 ID 相关联。如果有人使用 FireBug,他们可以轻松地将复选框的值更改为不同的数字,从而影响数据库中的错误记录。

我并不十分担心这种情况的发生,因为它只是一个只有一个用户的管理页面,我敢肯定他对 FireBug 一无所知.. 但我只是好奇以防我遇到这个问题面向公众的页面上的未来。

这是我目前拥有的代码,以便您了解我在做什么。

HTML + PHP..

<input type="checkbox" class="active" name="active<?php echo $id; ?>" id="active<?php echo $id; ?>" <?php if ($active == 1): ?>checked="checked"<?php endif; ?> value="<?php echo $id; ?>">

jQuery ajax..

$("input.active").click(function() {

var loader = $(this).prev().prev();

$(loader).css("visibility","visible");
// store the values from the form checkbox box, then send via ajax below
var check_active = $(this).is(':checked') ? 1 : 0;
var check_id = $(this).attr('value');

console.log(check_active);
console.log(check_id);

    $.ajax({
        type: "POST",
        url: "active.php",
        data: {id: check_id, active: check_active},
        success: function(){
            $(loader).css("visibility","hidden");

        }
    });
return true;
});

这里是active.php..

<?php

include("dbinfo.php");
mysql_connect($server,$username,$password);
@mysql_select_db($database) or die( "Unable to select database"); 

$active = mysql_real_escape_string($_POST['active']);
$id = mysql_real_escape_string($_POST['id']);

$addEntry = "UPDATE entries SET active = '$active' WHERE id = '$id'";
mysql_query($addEntry) or die(mysql_error());


mysql_close();
?>

【问题讨论】:

  • 只是为了澄清您是否担心管理员更改他们不应该更改的记录?如果是这样,这只是一个权限问题,应该通过 ACL 处理。我无论如何都看不到在你的 JS/HTML 中嵌入一个 id 来触发每条记录,这很好,也是做事的正常方式。但是,如果您担心更改他们不应该更改的内容,您应该检查是否允许他们这样做。

标签: php ajax forms security firebug


【解决方案1】:

您应该设置一个$_SESSION 值,其中包含他们的帐户信息,这样如果他们尝试访问一个不存在的帐户,您可以捕获它并适当地标记它。只需他们帐户的 ID 号就足够了。您绝对应该将其放在隐藏字段或用户可以更改的任何地方。

【讨论】:

  • 嗯,在这种情况下,他说的是一个管理员,我认为他可以查看所有数据,因此他必须使用公开的 ID,否则他怎么知道需要更新哪些记录?虽然我同意 $_SESSION,但问题不在于这些值在隐藏字段中,而在于他需要在执行查询之前检查权限。
  • 你的答案是在谷歌上搜索“防止复选框被更改 php”这个问题stackoverflow.com/q/30645705 - 谷歌上的 3 秒,经典。
【解决方案2】:

你不能。

firebug 可以完全控制 HTML。

但是您并不担心 HTML,您实际上担心用户会在 active.php 中做一些奇怪的事情,而这正是您应该添加更多保护的地方。

如果管理员有权编辑条目的活动状态,那么他应该能够以您允许的任何方式编辑他想要的任何条目。

您描述的一些恶意 admin 可以更改 HTML 中的 id 并通过错误的记录更改活动状态的安全问题与更恶意的 用户 相比微不足道strong> 可以像您的 ajax 脚本一样向您的 active.php 页面发送发布请求,但使用他的服务器,有效地可以更改任何条目上的任何活动状态。

你应该做的是对 active.php 执行某种身份验证

使用 SESSIONS 或 HTTP

【讨论】:

  • 好答案,这就是我在我的 cmets 中所指的,暴露 id 是一个有争议的问题,ACL = 解决方案。
  • @SteveH 我更喜欢 Capability based security 而不是 Access Control Lists,但我认为对于 OP 来说信息太多了
猜你喜欢
  • 2017-04-17
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 2012-08-22
  • 2011-03-16
  • 1970-01-01
相关资源
最近更新 更多