阻止用户使用FireBug等编辑复选框值?

时间:2012-06-22 14:03:14

标签: php ajax forms security firebug

我有一个管理页面,列出了一堆记录,每个记录旁边都有一个复选框,将其设置为“活动”状态。每个复选框都有一个值,该值与数据库中记录的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();
?>

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

你不能。

firebug可以完全控制HTML。

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

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

您描述的安全问题,某些恶意管理员可以更改HTML中的ID,并且错误的记录更改了活动状态,与更恶意的用户相比无关紧要可以像你的ajax脚本那样向你的active.php页面发送一个post请求,但是使用他的服务器,有效地访问任何条目的任何活动状态。

您应该做的是在active.php上执行某种身份验证

使用SESSIONS或HTTP