【问题标题】:PHP AJAX Joomla Authentication ScriptPHP AJAX Joomla 身份验证脚本
【发布时间】:2012-01-25 10:53:09
【问题描述】:

我有一个这样的 PHP 脚本:

<?php
include 'authorization_script.php';

foreach ($_POST as $key => $value){
    //do something here
}
?>

问题是如果“authorization_script.php”传递了一个只有数字名称的$_POST 变量,脚本将崩溃。而不是解决这个问题,我只想确保没有 $_POST 变量被传递给包含脚本。

要让它工作,这个“authorization_script”不需要任何外部变量,但是因为 $_POST 变量默认是全局的,所以它们被传递给这个脚本。 one of my previous questions 有人建议我可以用 PHP 中的命名空间来解决这个问题。

我可以更改 $_POST 变量的命名空间,以便它们不会传递给包含脚本吗?如果是这样,有人可以帮助如何做到这一点?还是有更好的办法?

谢谢

编辑:不要像你们中的一些人建议的那样,通过重命名 $_POST 变量来解决这个问题,我应该解决真正的问题。这是 Joomla 网站中的 AJAX 脚本。当我调用这个 ajax 脚本时,我仍然想对用户进行身份验证,然后从本地数据库对凭据进行评分。我发现从 AJAX 脚本对用户进行身份验证的方式是这样的:

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__));
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

/* Create the Application */
$mainframe =& JFactory::getApplication('site');

/* Make sure we are logged in at all. */
if (JFactory::getUser()->id == 0)
    die("Access denied: login required.");

我认为错误是在 joomla 框架脚本中抛出的(this script 上的第 528 行)。

有什么更好的方法来验证来自有经验的 Joomla 人员的用户吗?

【问题讨论】:

  • 当然解决实际问题会更好?为什么你的脚本会崩溃?您给出了哪些错误消息?
  • 一旦你将foreach$_POST 数组转换成另一个数组,你为什么不直接unset($_POST);
  • @SourLemon 问题是我从“authorization_script.php”调用的 Joomla 函数的一部分。现在我宁愿不改变它。
  • @wanovak - 这不是一个坏主意。谢谢!
  • 现在更新后这是一个全新的问题,您应该像这样处理它并打开一个新线程吗?

标签: php authentication post namespaces include


【解决方案1】:

或者如果你不想修复你的包含脚本,你可以做这个可怕的黑客:

<?php
// watch this ugly hack
$post_hack = $_POST;
unset($_POST);
include 'authorization_script.php';
$_POST = $post_hack;

foreach ($_POST as $key => $value){
    //do something here
}
?>

【讨论】:

    【解决方案2】:

    我可以更改 $_POST 变量的命名空间,以便它们 没有传递给包含脚本?

    没有。无论命名空间如何,全局变量都是全局变量。

    或者有没有更好的方法?

    修复包含脚本。你应该努力让你的代码对错误的输入有弹性——尤其是执行授权的代码。

    【讨论】:

    • 是的,我同意。因此,尽管有人提出了一些可能会奏效的好技巧,但我想我会尝试解决真正的问题。 (见上面的编辑)
    【解决方案3】:

    是的,这很丑陋,但应该修复它:

    <?php
    $aPost = $_POST;
    unset($_POST);
    include 'authorization_script.php';
    
    foreach ($aPost as $key => $value){
        //do something here
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-13
      • 2012-05-25
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多