2012-01-25 1 views
0

Я использую ajax для получения значения из php-скриптов (например, cost.php), и я знаю, что будет легко получить к нему доступ напрямую и получить это значение. Я даже работаю хроны по тому же сценарий (cost.php), так что хроны не будут работать, если я использую следующие ...php script препятствует прямому доступу

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
    //code here 
    die('Invalid Request!'); 
} 

Является ли это безопасный способ для предотвращения и хроны рабочих мест не будут, если работать я используйте приведенный выше код, так что я могу использовать для обеспечения ценности от конечного пользователя. Благодарю.

+0

Почему вы скрываете значение от конечного пользователя? Используйте пароль, определенный из вашего cronjob, который также определен в скрипте php. И не используйте защиту, отличную от защиты sql-атак, для вызовов ajax для значения. –

+0

Если сценарий возвращает значение в запрос Ajax, данные уже «там» для просмотра пользователем. – xbonez

+0

мы генерируем значение из этого сценария, который мы не хотим отказываться. – seoppc

ответ

0
if (!eregi('cost.php',basename($_SERVER["REQUEST_URI"]))) { die('access denied'); } 
+0

будет ли этот код работать с cronjob? – seoppc

+3

Функция 'eregi()' была [устарела] (http://uk3.php.net/eregi). – richsage

+1

@richsage: Да, спасибо, отметив ... просто скопировал строку из старого проекта. Поэтому вместо этого используйте preg_match. – djot

4

Для того, чтобы отделить выполнение cronjob, вы можете рассмотреть возможность использования php_sapi_name

Простое использование (более надежной, которые зависят от стороны сервера переменных): -

if (php_sapi_name() == "cli") // via cronjob or via cli 
{ 
    die("invalid request"); 
} 

PS: постоянная PHP_SAPI имеет такое же значение, поэтому вы можете переписать на: -

if (PHP_SAPI == "cli") 
{ 
    die("invalid request"); 
} 
0

Использовать секретный пароль для cronjob

if (isset($_REQUEST['cronpw']) && $_REQUEST['cronpw'] == 'supersecret') 
{ 
    // this is the cronjob 
} 
else 
{ 
    // this not 
} 
0

Добавьте это вверху кода, чтобы остановить прямой доступ к скрипту.

if (!defined('BASEPATH')) exit('No direct script access allowed'); 

Если вы хотите, чтобы AJAX запросов затем,

if (!defined('BASEPATH') && 
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') 
exit('You are not allowed here...'); 
Смежные вопросы