【问题标题】:(PHP - Session) How can user restrict to access direcly to controller.php , only allow access from view.php?(PHP - Session) 用户如何限制直接访问 controller.php ,只允许从 view.php 访问?
【发布时间】:2010-07-09 10:10:59
【问题描述】:

我是 PHP 初学者。

如何限制用户访问 controller.php 并只允许通过 view.php 访问它?


我的建议:

我不知道这是否正确,或者如何避免机器人直接访问它。


view.php:

  <?php
    session_start();
    $_SESSION['isFromView'] = true;
    ?>

  <html>
   <body>
    <form action="controller.php">
    <input type="submit"/>
    </form>
   </body>
  </html>

controller.php

<?php
   session_start();
   if(!isset($_SESSION['isFromView'])||!$_SESSION['isFromView']){exit();}
   else{

   //code here

   $_SESSION['isFromView']=false;
   }
?>

请写出我错过了什么以及可以通过何种方式直接访问我的控制器或其他安全问题(如果您可以举例说明)。


编辑:

如果我没有用户登录,可以通过在代码执行后杀死它 controller.php 的会话来保护它,然后当用户返回 view.php 时,将创建新的会话 ID。

不过,在大多数情况下,由于站点的其他组件,我们无法终止会话。

谢谢

【问题讨论】:

    标签: security php


    【解决方案1】:

    提出的解决方案很好。替代解决方案:

    1. 在 view.php 表单的某个隐藏字段中使用一些哈希(在 view.php 中创建一些 md5('secret'),然后在 controller.php 中检查)。此解决方案是最安全的方法。
    2. 检查推荐网址(我强烈反对,因为这是安全问题) - $_SERVER['HTTP_REFERER']。此变量很容易被欺骗(由客户端更改),因此依赖它存在安全风险。

    【讨论】:

    • 如何查看推荐网址?
    • 你可以在 $_SERVER['HTTP_REFERER'] 中找到它
    • 为什么 $_SERVER['HTTP_REFERER'] 存在安全问题?(请举例说明)。
    • 我刚刚编辑了我的答案。 $_SERVER['HTTP_REFERER'] 可能很容易被客户端欺骗,这就是我说这是一个安全问题的原因。
    • 好的,我明白了,第一个选项隐藏字段呢?为什么它也可以很容易地被客户端欺骗,只有将隐藏的 id md5 放到会话变量中它不能被欺骗 r - 或者我有错误?您能否写下或链接到您所指的关于隐藏字段解决方案的示例。
    【解决方案2】:

    首先要注意的是,您对“控制器”和“视图”的使用似乎与我的完全不同——我会将此解释为 MVC 模式的一部分——在这种情况下,浏览器永远不会请求'view.php' 它应该是通过控制器文件中的 include/require 调用的包含文件。此外,作为一个包含文件,它不应包含 任何 内联代码 - 因此即使可以从浏览器直接访问它 - 从浏览器调用它也不会执行任何操作。

    如果您只是意味着您有两个脚本,而第二个脚本只能由第一个调用,那么问题就是跨站点请求伪造 - 关于如何避免这种情况的讨论很多很多互联网,其中大部分将解释为什么使用 $_SERVER['HTTP_REFERER'] 完全是浪费时间。

    应不惜一切代价避免通过会话传递与交易相关的数据——尤其是因为会话别名的问题。

    C.

    【讨论】:

    • 其简单的 2 个脚本,而不是 mvc 项目
    猜你喜欢
    • 2013-10-27
    • 2013-11-20
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多