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