Как аутентифицировать REST API, используемый javascript (так как код общедоступен) - PullRequest
0 голосов
/ 28 января 2019

Tl; dr: Как защитить внутренний API, используемый только для вызовов AJAX, на самом веб-сайте.

У меня есть REST API (PHP 7.2), который будет использоваться Javascript(на стороне клиента)

Обычно я создаю серверные приложения (тогда я контролирую и использую либо секрет, либо токен), однако, поскольку JS является общедоступным, я теряюсь.

IТребуется базовая аутентификация, невозможно, потому что пользователь может просматривать исходный код и получать имя пользователя и пароль.

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

Я хотелвнесите в белый список домен (на стороне PHP) домен можно подделать.

Я хотел получить аутентификацию HMAC, но еще раз, проверить элемент и увидеть сообщение HMAC.

Как защитить REST APIкоторый будет поглощен AJAX

1 Ответ

0 голосов
/ 29 января 2019

То, что вы ищете (или, в данном случае, НЕ ищете), это CORS (Cross-Origin Resource Sharing).

Простой способ сделать то, что вы хотите - проверить $ _SERVER ['REMOTE_ADDR'] против вашего сервера

if ($_SERVER['REMOTE_ADDR'] != 'myserverIP') {

(только чтобы вы знали, что это безопасно - Надежность PHP'S $ _SERVER [' REMOTE_ADDR '] )

Затем выможет также принудительно заставить 'Access-Control-Allow-Origin' соответствовать вашему домену (проверка безопасности второго уровня - возможно, вы хотите хранить вещи в определенной папке и т. д.

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

и различные другиеконкретные методы access_control, если вам нравится ......

Вот функция, которую я использовал (где-то ее подняли - скорее всего, на SO и немного ее модифицировали для моего использования ...):

где-то в PHP (я использую файл «codes.php» для хранения и простого изменения кодов по мере необходимости, затем включаю его, чтобы они были доступны глобально)

codes.php

$spIP = 127.0.0.1; // whatever your IP is
$splink = "https://your-domain-url.tld";

затем в файле функций

function checkCORS()
{
    global $spIP, $splink;
    if ($_SERVER['REMOTE_ADDR'] != $spIP) {
        return false;
    }
    header("Access-Control-Allow-Origin: $splink");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 6400');
    if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
        // you have to handle OPTIONS requests as some other method or you will get an error message
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
            header("Access-Control-Allow-Methods: POST");
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
            header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
        exit(0);
    }
    return true;
}

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

Хороший инструмент для тестирования сдоступно по https://www.test -cors.org /

...