Подтвердить что ты не робот

Разрешать запросы ajax для перекрестных доменов

В моем проекте мне нужно разрешить другим отправлять запросы ajax на мой script. Таким образом, внешние запросы могут поступать с других веб-сайтов и доменов и, возможно, из расширений браузера.
Я добавил эти две строки поверх моего script, чтобы они это сделали:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');  

Теперь мой вопрос таков: есть ли какое-либо соображение безопасности, которое я пропустил? делает это простое решение серьезными проблемами?
Если да, то какое лучшее решение?

Спасибо за ответ.

4b9b3361

Ответ 1

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

Два основных вопроса, на которые вам нужно сосредоточиться (после проверки ввода пользователя):

  • У вас может возникнуть проблема - пользователи получают информацию в свои скрипты. В зависимости от браузера (и даже между вкусами одного и того же браузера) существуют разные правила безопасности, которые мешают им вернуть информацию. Общим решением для этого является предоставление информации обратно как "JSONP", которая должна обернуть ваше возвращаемое значение как вызов функции, который может быть выполнен клиентом. Вот краткий пример (взятый из http://www.geekality.net/2010/06/27/php-how-to-easily-provide-json-and-jsonp/). Чтобы еще больше заблокировать его, вы можете настаивать на том, что все запросы JSONP и отклоняют всех, кто не отправляет функцию обратного вызова.

.

<?php

header('content-type: application/json; charset=utf-8');
$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
echo $_GET['callback'] . '('.json_encode($data).')';

?>
  1. Кто-то злоупотребляет вашим сервисом, вызывая слишком регулярно. Решения для этого - захватить IP-адрес и отклонить, если вы получаете слишком много вызовов с IP-адреса. Не уверен, но это начало.

Другие факторы, которые необходимо учитывать:

  • файлы cookie и другие заголовки, установленные вашим script, вероятно, будут проигнорированы
  • то же самое относится к сеансам

Ответ 2

Как сказали zerkms, если они просто "перейдут" на вашу php-страницу, они смогут увидеть, что бы это ни звучало. Если возможно (не уверен, что это так), это также позволит нежелательным людям создавать свои собственные формы даже на локальном хосте и отправлять их через AJAX, чтобы получить ответы, которые они хотят. Если это нормально с вами, и информация неоднозначна/безвредна... Тогда я полагаю, что это будет "безопасно". Это НЕ нормально использовать/передавать конфиденциальную информацию.

Ответ 3

private function set_headers() {
    header("HTTP/1.1 ".$this->_code." ".$this->get_status_message());
    header("Content-Type:".$this->_content_type);           
    header("Access-Control-Allow-Origin: *");
}