我正在尝试写一个接受表单(基于cookie)来拒绝/允许访问我正在处理的网站;我无论如何都不是安全专家,所以我需要一些关于如何使我的表单提交更安全的提示,以及如何存储用户请求的原始页面,以便在接受后将它们重定向到正确的页面。
以下是我编写的基本脚本:
<?php
if(isset($_POST['accept'])) {
setcookie ('accept', '1');
header('Location: http://www.the_page_that_was_requested');
exit();
} elseif(isset($_POST['decline'])) {
setcookie('accept', '0');
exit();
}
?>
和表格:
<form action='' method ='post'>
<ul>
<li> <input type= 'radio' name = 'accept' value = 'accept' /> I accept </li>
<li> <input type= 'radio' name = 'decline' value = 'decline' /> I decline </li>
<li> <input type = 'submit' value = 'Submit' name = 'submit' /> </li>
</ul>
我的第一篇文章可能不够清楚:
我想用它的网站是WP上托管的webcomic。漫画有“成熟”的内容(暴力,语言,我只想使用cookie作为一种机制让读者“同意”他们将要查看这样的内容。是的,我考虑使用$ _SESSION要做到这一点,但在这种情况下,如果有人愿意“伪造”他们愿意查看这些内容,我可以更少关心他们是否可以访问cookie。
至于安全问题,我只是想确保我的表单是安全的,而不是打开我的网站以获得某种简单的利用。
答案 0 :(得分:3)
任何敏感信息都不应存储在cookie中,包括安全/权限标记。
不要使用cookie,而是查看sessions,它不会在客户端存储数据(因此在操纵手的范围之外)。这本身并不完全安全,但这是一个完全不同的讨论。
答案 1 :(得分:1)
请改用sessions。会话信息存储在Web服务器上,而不是本地客户端上。
<?php
sessions_start();
if(isset($_POST['accept'])) {
$_SESSION['accept'] = TRUE;
}
就引荐来源而言,HTTP_REFERER
不会通过SSL保留(如果您的表单正在收集敏感信息,那么您应该这样做。)
如果您使用SSL,可以执行以下操作:
页面链接到您的表单:
<a href="myform.php?r=<?=urlencode("http://your.url")?>">My form</a>
您的表单会添加隐藏的输入,其值为r
:
<input type="hidden" name="r" value="<?=$_GET['r']?>" />
如果你没有通过SSL(不推荐),你可以这样做:
HTTP_REFERER
:<input type="hidden" name="r" value="<?=urlencode($_SERVER['HTTP_REFERER'])?>" />
无论哪种方式,您的POST脚本都会使用r
的POST值来重定向:
header("Location: ".urldecode($_POST['r']));
然后,您可以检查域中任何其他页面上的会话变量:
<?php
session_start();
if($_SESSION['accept'] == TRUE) {
//they have access
}
?>