За последние 24 часа нас посетили 20740 программистов и 1111 роботов. Сейчас ищут 348 программистов ...

Защита фонового обмена (fetch, xmlhttp)

Тема в разделе "PHP для профи", создана пользователем acso, 23 апр 2021.

  1. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    Всем привет. На стороне браузера происходит запрос к php-серверу через fetch. На принимающей стороне проверяется, от кого запрос:
    PHP:
    1. $addr = $_SERVER['HTTP_X_FORWARDED_PROTO'] . '://' . $_SERVER['HTTP_HOST'];
    2. if (strpos($_SERVER['HTTP_REFERER'], $addr) !== 0) {
    3.     exit('F..k off!');
    4. }
    Реально подменить адрес отправителя запроса? Или я не там боюсь?)
    --- Добавлено ---
    Вот кусок кода запроса:
    Код (Javascript):
    1. let
    2.     formData = new FormData();
    3.  
    4. appendFormdata(formData, data);
    5.  
    6. fetch(
    7.     '/core/ajax.php?a=' + data.action + '&rand=' + Math.random(),
    8.     {
    9.         credentials: 'same-origin',
    10.         method: 'POST',
    11.         cache: 'no-cache',
    12.         body: formData
    13.     }
    14. )
    15. .then(
    16.     response => response.text()
    17. )
    18. .then(
    19.     data => {
    20.         try {
    21.             let
    22.                 ret = $.parseJSON(data);
    23.             if (typeof ondone === 'function') {
    24.                 ondone(ret);
    25.             }
    26.         } catch(error) {
    27.             console.log(error, data);
    28.         }
    29.     }
    30. );
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Реально.

    2021-04-26_10-01-51.png
     
    acso нравится это.
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Аджаксом дёрнуть чужой домен браузеры не дадут, уже давно. Если вы явно не возвращаете заголовки, которые всем разрешают дёргать. Так что за AJAX можно не беспокоиться. А так, подменить этот заголовок не составляет труда, как и показал @MouseZver. Или из какого-нибудь парсера его туда подставить. Для целей безопасности он не должен быть использован.