【问题标题】:Prevent direct access PHP防止直接访问 PHP
【发布时间】:2012-09-16 15:40:40
【问题描述】:

我有 2 个脚本。那是:

  1. registration.html
  2. process_registration.php

有时有人打开链接直接进入 process_registration.php,我该如何防止呢?

Process_registration.php 功能是保存从registration.html 输入的数据。

有什么想法吗?

【问题讨论】:

标签: php


【解决方案1】:

你可以使用:

if (!isset($_POST['field'])) {
  die();
}

在您的 process_registration.php 文件的顶部。

当然,将field 替换为表单中现有的字段之一。

如果您反对使用脚本注册多个帐户的洪水泛滥,您可以在注册表单上使用captcha 字段,或使用protections against crawling

【讨论】:

  • $_POST 也可以使用 php curl 发送,所以我认为这不是最有效的解决方案。为了更好的安全性,我认为您也可以验证引用者
  • Referer也可以通过cURL设置
  • 浏览器可以发送的所有内容都可以被模拟。因此,如果您需要真正的保护,您将需要更复杂的解决方案。就像生成一次性密码(哈希)一样。
【解决方案2】:

只是另一种方法:

if (empty($_POST)) {
  exit("Direct access not allowed");
}

对象名称更灵活。为了提高安全性,您应该在表单中填写:

<input type="hidden" value="9957374" name="hiddenvalidate" />

在你的脚本中:

if (!isset($_POST['hiddenvalidate']) || $_POST['hiddenvalidate'] != 9957374) {
  exit("Direct access not allowed");
}

【讨论】:

    【解决方案3】:

    您可以检查当前请求是否为POST类型(如果您使用表单)

    if($_SERVER['REQUEST_METHOD'] == 'POST')
    

    您还可以检查是否设置了所有必需的变量。

    【讨论】:

      【解决方案4】:

      您可以在 process_registration.php 中使用 $_POST 数组,例如:

      if(!isset($_POST['yourvariable'])){
      //Redirect to registration page
      }
      

      您也可以使用PHP Session。如果没有设置会话,则将用户重定向到注册页面。

      【讨论】:

        【解决方案5】:

        我喜欢Joomla 处理这个问题的方式。

        在 Joomla 的每个 php 页面上,您都会看到以下代码:

        // No direct access
        defined('_JEXEC') or die; // it's a config setting
        

        只有顶级页面包含此变量。所有其他文件,如果直接打开,则会关闭,从而防止任何意外误用/数据丢失。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-05
          • 2010-09-16
          • 1970-01-01
          • 2016-03-04
          • 2010-09-29
          • 1970-01-01
          相关资源
          最近更新 更多