【发布时间】: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