Вопрос безопасности сайта с помощью PHP? (Вероятно, относится к ASP / Rails / и т.д .. тоже) - PullRequest
0 голосов
/ 10 июня 2009

Скажите, у меня есть "index.htm" и "routines.php".

«index.htm» в конце концов вызовет «routines.php» с использованием JS (AJAX).

Итак, мой вопрос: как "routines.php" может проверить, что запрос поступил с того же локального сервера, а не снаружи? Есть ли глобальная переменная, которую я могу проверить на уровне PHP или HTTP?

Редактировать 1: Используя AJAX

Ответы [ 6 ]

3 голосов
/ 10 июня 2009

Вы можете забыть о части Ajax, так как это не является частью проблемы. Вам следует прочитать о подделках межсайтовых запросов (CSRF) и токенах CSRF. Некоторые ссылки:

2 голосов
/ 10 июня 2009

Чтобы ответить на ваш вопрос другим вопросом: как бы вы вызвали getdata () с помощью браузера?

(Итак: не нужно беспокоиться.)

1 голос
/ 10 июня 2009

вы можете использовать сеансовый ключ:

index.htm

<?php

$_SESSION['safe_key'] = true;

?>
javascript code here

routines.php

<?php
if (!isset($_SESSION['safe_key'])) {
   die('from outside');
}

function getdata() { ... }
?>

В основном происходит, когда index.htm называется безопасным ключом сеанса. Сессии только на стороне сервера. В routines.php, если безопасный ключ не существует, код не был вызван из index.htm. Если он существует, запустите код.

1 голос
/ 10 июня 2009

Если вызов выполняется в JavaScript (т. Е. На клиенте), вы действительно ничего не сможете сделать, чтобы определенно помешать кому-либо симулировать запрос из index.htm, даже если вы проверите заголовок Referer (sic) .

Если запрос сделан на стороне сервера, вы можете использовать какой-то ключ.

Конечно, вы также можете сгенерировать ключ и на стороне клиента, но любой мера безопасности может имитировать любой, кто имитирует запрос из index.htm.

0 голосов
/ 10 июня 2009

Как отмечали другие, это было бы довольно сложно, учитывая вашу оригинальную спецификацию. Однако, если вы можете изменить index.htm на index.php и вывести его на тот же контент, что и index.htm, вы также можете добавить дополнительные токены для управления сеансом (например, файлы cookie - да, я знаю, что их тоже легко подделать) :) и отклоните вызов на getdata(), если токены не совпадают.

0 голосов
/ 10 июня 2009

Использовать переменную сервера HTTP_REFERER:

echo $_SERVER['HTTP_REFERER']

При этом вы можете узнать, приходит ли запрос с нужного вам сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...