Как остановить ошибку CORS при доступе к файлу PHP в родительском домене с помощью AJAX в файле на поддомене? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть PHP-файл на поддомене, и в этом файле я хочу использовать Javascript и Ajax для отправки информации в PHP-файл в родительском домене (для обновления моей базы данных).Тем не менее, я получаю сообщение об ошибке, что запрос был заблокирован CORS (что имеет смысл, я понимаю, почему).Есть ли простой способ решить эту проблему?

Я попытался поместить document.domain = "example.com" в javascript в файле поддоменов, но, очевидно, я не могу поместить это в файл на родительскомдомен, потому что это файл PHP без JavaScript.Простое помещение этой строки в файл поддомен не сработало.

file1: area1.example.com/settings.php

<?php
print '
<script type="text/javascript">
function UpdateTable(Info)
{
$.ajax({url: "https://example.com/ajax/update-table.php", type: "POST", data: {id: 1, info: Info}});
}
</script>';
?>


file2: example.com/ajax/update-table.php

<?php
$query = '
Update `Table`
SET `Table`.`field` = "'.$_POST['info'].'"
WHERE `Table`.`id` = '.$_POST['id'];
db_op($query);
?>

Все, что я хочу - это обновить базу данных, но я продолжаю получать ту же ошибку CORS.Кто-нибудь может помочь?

Ответы [ 3 ]

1 голос
/ 30 апреля 2019

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

header("Access-Control-Allow-Origin: http://example.com");

0 голосов
/ 01 мая 2019

Решение

Вы можете решить эту проблему как @Berdnikov, упомянутый с заголовком CORS Access-Control-Allow-Origin. Вы можете сделать это, используя функцию заголовка PHP, как предложил Бердников, или вы можете использовать .htaccess,

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin <value>
</IfModule>

Где <value> может быть одним из конкретных путей, т. Е. http://example.com, или вы можете использовать подстановочный знак для любого хоста с *

Вот почему,

Когда браузер отправляет запрос на совместное использование ресурса другому домену, браузер сначала запускает запрос Preflight , который использует протокол OPTIONS для определения того, что клиентскому запросу разрешено делать. Это включает в себя Access-Control-Allow-Methods тоже.

Я даю следующие рекомендации по коду, который вы разместили выше,

  1. Обратите внимание, что из наблюдения вашего кода становится ясно, что по запросу активная аутентификация отсутствует ( WSSE , ключи API или любой другой механизм аутентификации без сохранения состояния), если вы не используете общий тип COOKIE. Я чувствую себя обязанным, по крайней мере, сообщить вам, что этот запрос не защищен,

  2. Вставленный вами SQL уязвим для SQL-инъекция , вы ничего не избегаете и не вставляете ввод непосредственно в запрос, что очень опасно для целостности вашего приложения.

Удачи и счастливого кодирования

0 голосов
/ 30 апреля 2019

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

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy

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

<meta http-equiv="Content-Security-Policy" content="default-src *; data: https://mysubdomain.mydomain.com/* 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

У меня есть исправление - я столкнулся с этой проблемой с приложением Cordova, которое я создавал некоторое время назад, и я думаю, что именно так я и исправил.

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