只是想知道一个安全问题。现在我正在使用以下功能从我的数据库中删除电影:
function deleteVideo(video_id){
function mycallbackform(v,m,f){
if(v=="yes"){
$.ajax({
type: "POST",
url: "delete.php?action=video",
data: "video_id=" + video_id,
success: function(html){
if(html == "1"){
//$("#result").html(html);
$("#row_"+video_id).fadeOut("slow");
$("#result").show();
$("#result").html("<div class='notification success png_bg'> <div><?php echo $LANG_video_succesfull_delete; ?> </div></div>");
setTimeout(function(){ $('#result').fadeOut('slow'); }, 5000);
}else{
$("#result").show();
$("#result").html(html);
}
}
});
}
}
$.prompt('Are you sure?',{ buttons: { Ok: 'yes', Cancel: 'no'}, callback: mycallbackform});
}
在后端执行以下代码:
/*** DELETE data ***/
/*** prepare the SQL statement ***/
$stmt = $dbh->prepare("DELETE FROM videos WHERE username=:username AND videos_id=:video_id");
$stmt->bindParam(':username', $currUser);
$stmt->bindParam(':video_id', $video_id);
/*** execute the prepared statement ***/
$stmt->execute();
在这种情况下,用户名存储在会话中。
用户A是否可以使用此代码删除用户B数据?
我想想添加一个查询来检查当前用户是否是在数据库中添加视频的用户。如果不是,他无法删除数据。但这是必要的还是这段代码足够安全?
提前致谢。
答案 0 :(得分:3)
您最好在会话中存储唯一的用户ID。如果有两个人具有相同的用户名怎么办?
修改:如果用户名是唯一的,则非常安全。除非您在PHP代码中犯了一个可怕的错误,否则无法更改在客户端工作的会话变量的值。但是,如果您确定会话变量始终设置正确,则无需担心。