Как передать данные из приложения facebook на мой сервер (через Ajax)?

(Поскольку Facebook не поддерживает FBML и FBJS, я не могу использовать эти подходы для передачи данных на свой сервер).

У меня есть приложение IFRAME facebook, в основном созданное для использования страницами.

Когда администратор страницы посещает вкладку моего приложения на своей странице, он видит страницу настроек, на которой он может добавить информацию о своей странице. У меня тоже есть кнопка отправки. Как только администратор страницы отправит информацию о своей странице, она будет отправлена ​​на мой сервер и сохранена вместе с идентификатором страницы. После завершения этой настройки, когда другие пользователи посетят эту вкладку приложения на странице, они увидят информацию, опубликованную администратором страницы.

Я использую Facebook PHP SDK на стороне сервера для декодирования подписанного запроса и получения идентификатора страницы.

Ниже приведен код в файле index.php моего приложения для отправки данных на мой сервер (наряду с пользовательским вводом также будет передан идентификатор страницы, который здесь не показан)

function sendData() {
    $.post('ajax.php', {
        data : $("#userdata").val()
    }, function(data) {
        alert(data);
    });
}
</script>

Ниже приведен простой скрипт ajax.php. Пока это только тестовый скрипт.

<?php
echo "<pre>" . print_r($_POST) . "</pre>";
?>

Проблема в том, что на сервер отправляются только пользовательские данные. В этом подходе есть проблема с безопасностью. Я хочу отправить 'signed_request' (который facebook изначально отправляет на мой index.php, с помощью которого я проверяю запрос) вместе с данными пользователя, чтобы я мог проверить запрос со стороны сервера и обновить информация для правой страницы. В противном случае любой может опубликовать подобный запрос и обновить информацию для любой страницы.

изображение поджигателя


person Lenin Raj Rajasekaran    schedule 07.08.2011    source источник
comment
Вам не нужно отправлять signed_request для проверки ввода формы, вам нужно отправить CSRF токен. И просто примечание: signed_request в любом случае должен быть на сервере в сеансах, если вы используете php-sdk.   -  person ifaour    schedule 07.08.2011


Ответы (1)


Все, что вам нужно сделать, это использовать Facebook PHP SDK в вашем ajax-скрипте на стороне сервера, а затем вы можете проверить, что запрос был отправлен кем-то с действительным сеансом Facebook, который авторизовал ваше приложение.

Если вы обеспокоены тем, что несколько человек, использующих ваше приложение, попытаются отправить поддельные запросы на изменение настроек страницы друг друга, вам просто нужно сохранить некоторую информацию о том, какие идентификаторы Facebook связаны со страницами Facebook, которые они администрируют.

Например, при отправке запроса на сервер отправьте идентификатор страницы вместе с зашифрованным ключом, полученным из идентификатора страницы (храните этот зашифрованный ключ в скрытом поле при отображении самого себя). На сервере расшифруйте этот ключ, чтобы он соответствовал идентификатору страницы. Таким образом, вы можете быть уверены, что администраторы страниц изменяют информацию только для «своих» страниц.

person John Hawkins    schedule 14.08.2011