Почему PHP cURL может выполнить запрос, а jQuery AJAX — нет?

Я установил простой скрипт, который позволяет отправлять данные на мой сервер с помощью AJAX:

$.ajax({
url: url,
type: method,
data: data
}).done(function(data) {
console.log(data);
});

Теперь я добавил следующее Access-Control-Allow правила для моего .htaccess:

Header add Access-Control-Allow-Origin: "https://www.randomsite9734784.com"Header add Access-Control-Allow-Methods: "DELETE"

Это работает, как и ожидалось: всякий раз, когда я отправляю запрос AJAX, я получаю сообщение о том, что источник не совпадает, бла-бла-бла, конец истории. Отлично.

Теперь, когда я использую свою функцию cURL в PHP, мне удалось выполнить все виды запросов. Я ожидал бы, что у этого будет тот же самый ответ, но так или иначе он обходит файл .htaccess, некоторого вида.

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

Спасибо!

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

К вашему сведению, это мой текущий файл .htacess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

Header add Access-Control-Allow-Origin: "http://somerandomdomain.com"Header add Access-Control-Allow-Methods: "DELETE"

Теперь, чтобы быть ясным: все, что я хочу знать, это как я могу убедиться, что (в этом случае) ТОЛЬКО запрос на удаление может быть выполнен с somerandomdomain.com, а не все виды запросов из всех видов мест …

🙂 Спасибо.

2

Решение

jQuery / JavaScript работает на стороне клиента, где браузеры применяют ограничение общего доступа к другим источникам.

Сервер не имеет никаких ограничений, поскольку PHP может использовать множество вещей, таких как URL с fopen(), так далее.

Основная причина этого ограничения заключается в том, что JavaScript может выполняться любым пользователем на стороне клиента, а код на стороне сервера — только теми, кто имеет доступ к сценариям на стороне сервера. Когда начинающему пользователю дается URL для выполнения (AJAX-запрос), он выполняется на клиенте, где запускается URL-адрес.

Это открывает такие проблемы, как доступ к файлам cookie в домене, сведения о сеансе и т. Д. Так, например, когда у вас есть API, который может отправлять электронную почту с помощью GMail, и вы заходите на вредоносный веб-сайт, может быть JavaScript, это может вызвать AJAX-запрос:

POST https://mail.google.com/api/mail/send

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

Я ожидал бы, что у этого будет тот же самый ответ, но так или иначе он обходит файл .htaccess, некоторого вида.

Ваш .htaccess достаточно слаб, чтобы запросы проскользнуть внутрь. Так что вам нужно исправить .htaccess файл. Вы можете опубликовать источник вашего .htaccess файл, чтобы мы могли посоветовать вам по этому вопросу.

Я надеюсь, что это ответило на ваш вопрос.

3

Другие решения

Для вашего случая: если вы можете использовать CURL, используйте CURL, но если вы действительно хотите использовать ajax, вам нужно добавить доступ к CORS на стороне клиента и на стороне сервера (это тот случай, когда вы создаете свой собственный API), если вы хорошо используете extern API им нужно добавить тему о проблеме CORS, в которой объясняется, какие заголовки нужно добавить в запрос, чтобы он работал. Я надеюсь, вы понимаете, что я говорю

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector