要防止CSRF,您应该将nonce放在表单中的隐藏字段中,以及cookie或会话变量中.但是如果用户在不同的标签页中打开多个页面会怎么样 在这种情况下,每个选项卡都有一个具有唯一nonce的表单,但会话变量或cookie中只存储一个nonce.或者,如果您尝试将所有nonce存储在cookie/session变量中,您将如何识别哪个属于哪个表单?
我正在使用get方法执行一些操作,例如,批准,markasspam,删除,用于评论系统.我知道走这条路是非常不安全但我无法帮助它.因为使用$ _GET方法的原因是使用PHP_SELF在页面本身内执行操作,而FYI我也使用post方法使用复选框来执行操作.
现在为了让它有点安全我想随机化数字或生成哈希或其他东西,然后比较它,获取id并执行操作
我目前的代码有点像这样.
<?php
if($approve == 1 )
{
?>
<a href="<?php echo $_SERVER['PHP_SELF']."?approve=".$id; ?>">Unapprove</a>
<?php
} else
{
?>
<a href="<?php echo $_SERVER['PHP_SELF']."?unapprove=".$id; ?>">Approve</a>
<?php
}
?>
| <a href="<?php echo $_SERVER['PHP_SELF']."?spam=".$id; ?>">Spam</a>
| <a class="edit-comments" href="edit-comments.php?id=<?php echo $id; ?>">Edit</a>
| <a href="<?php echo $_SERVER['PHP_SELF']."?delete=".$id; ?>">Delete</a>
Run Code Online (Sandbox Code Playgroud)
我用这个代码执行操作..
if(isset($_GET['approve'])) {
$id = intval($_GET['approve']);
$query = "UPDATE comments SET approve = '0' WHERE id = '$id'";
$result = mysql_query($query);
}
if(isset($_GET['unapprove'])) {
$id = intval($_GET['unapprove']);
$query = "UPDATE comments SET …Run Code Online (Sandbox Code Playgroud)