PHP включает / требует без передачи переменных - PullRequest
0 голосов
/ 12 декабря 2011

Возможно ли включить что-то в PHP без передачи переменных, которые были переданы в исходный скрипт?

Я использую Joomla, и я получаю документально подтвержденную ошибку здесь ("Недопустимые переменные ..."). Сценарий php - это сценарий AJAX, который отправляет данные обратно в браузер, поэтому этот сценарий принимает много переменных POST, выполняет запрос к базе данных, а затем выводит результат. Я пытаюсь повысить безопасность, поэтому я включил в этот скрипт включение для аутентификации пользователя с помощью встроенных в него модулей Joomla. Я получил от здесь идею для скрипта аутентификации пользователя.
Сценарий аутентификации работает для некоторых страниц, но с другими я получаю ошибку, упомянутую выше. Поэтому я хочу включить скрипт аутентификации, не передавая в него никаких переменных. Это возможно?

РЕДАКТИРОВАТЬ: Вот немного больше деталей.

В скрипте ajax у меня есть это:

<?php
    include '/var/www/joomla-auth.php';
...

ниже приведен скрипт, в основном включенный скрипт "joomla-auth.php" заботится о получении имени пользователя и пароля для запроса mysql. Содержание joomla-auth:

<?php

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.");

$user =& JFactory::getUser();

Я почти уверен, что именно строки определения или запроса выдают ошибку:

Недопустимая переменная _files или _env или _get или _post или _cookie или _server или _session или глобальные переменные переданы в скрипт.

Как указано в первой ссылке выше.

РЕДАКТИРОВАТЬ 2:

Скрипт 'joomla-auth.php' создает переменные $ username и $ password, которые затем используются в скрипте AJAX. Я попробовал это в верхней части скрипта AJAX:

function get_creds(){
    include '/var/www/joomla-auth.php';
    return Array($username,$password);
}

$creds = get_creds();
$username = $creds[0];
$password = $creds[1];
....

Но все равно переменные $ _POST передаются в /var/www/joomla-auth.php: - (

Ответы [ 3 ]

2 голосов
/ 13 декабря 2011

Joomla выдает эту ошибку, если вы передаете ей одну из переменных, упомянутых в вашей ошибке, по URL (или через mod_rewrite):

_files или _env или _get или _post или _cookie или _server или _session

Кроме того, я думаю, что та же ошибка выдается, если вы передаете целую числовую переменную, такую ​​как:

http://yoursite.com/?123456=abc

Просто убедитесь, что вы не передаете эти переменные в URL. Если вы не можете найти проблему, попробуйте проверить, что находится в запросе, прежде чем выдается ошибка.

Надеюсь, это помогло!

1 голос
/ 12 декабря 2011

Обертывание включения в другой функции для создания (почти) пустой области видимости function foo($path){ include($path); }

edit : если вам нужно передать некоторые переменные, вы можете передать их как массивво втором аргументе и extract () его в функции:

function foo($path, array $vars=array()) { extract($vars); include($path); }

Это похоже на то, что было сделано в движке представления Kohana для аналогичной цели (в View :: capture ()).Возможно, вы захотите увидеть, как они это реализовали и как они используют его.

0 голосов
/ 12 декабря 2011

Пространства имен могут быть полезны для решения вашей проблемы не так хакерским способом.

...