【问题标题】:Using a cookie to restrict access使用 cookie 限制访问
【发布时间】:2011-06-22 19:10:43
【问题描述】:

我正在尝试编写一份接受表格(基于 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 上的网络漫画。漫画有“成熟”的内容(暴力、语言,我只想使用 cookie 作为一种机制,让读者“同意”他们将要查看此类内容的事实。是的,我考虑使用 $_SESSION这样做,但在这种情况下,如果有人愿意“伪造”他们查看此类内容的意愿,我就不会在意他们是否可以访问 cookie。

至于安全问题,我只是想确保我的表单是安全的,而不是让我的网站受到某种简单的利用。

【问题讨论】:

  • 您应该使用会话来存储数据,而不是提供他们可以更改的客户端数据。

标签: php security forms http-referer


【解决方案1】:

任何敏感信息都不应存储在 cookie 中,包括安全/权限标志。

看一下sessions,而不是cookies,它不会将数据存储在客户端(因此超出了操作手的范围)。这本身并不完全安全,但这是一个完全不同的讨论。

【讨论】:

    【解决方案2】:

    请改用sessions。会话信息存储在 Web 服务器上,而不是本地客户端上。

    <?php
    sessions_start();
    if(isset($_POST['accept'])) {
      $_SESSION['accept'] = TRUE;
    }
    

    就引荐来源网址而言,HTTP_REFERER 不会通过 SSL 保留(如果您的表单正在收集敏感信息,您应该这样做)。

    如果您使用 SSL,则可以执行以下操作:

    • 一个页面链接到您的表单:
      &lt;a href="myform.php?r=&lt;?=urlencode("http://your.url")?&gt;"&gt;My form&lt;/a&gt;

    • 您的表单添加了一个隐藏输入,其值为r:
      &lt;input type="hidden" name="r" value="&lt;?=$_GET['r']?&gt;" /&gt;

    如果你没有使用 SSL(不推荐),你可以这样做:

    • 您的表单添加了一个隐藏输入,其值为HTTP_REFERER:
      &lt;input type="hidden" name="r" value="&lt;?=urlencode($_SERVER['HTTP_REFERER'])?&gt;" /&gt;

    无论哪种方式,您的 POST 脚本都会使用 r 的 POST 值来重定向:
    header("Location: ".urldecode($_POST['r']));

    然后,您可以在域内任何其他页面上的任何其他位置检查会话变量:

    <?php  
    session_start();
    if($_SESSION['accept'] == TRUE) {
      //they have access
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 2015-07-23
      • 2010-11-25
      • 2014-03-08
      • 2010-11-20
      相关资源
      最近更新 更多