Я пытаюсь создать небольшой api, но я немного зациклен на том, как защитить api. Я прочитал несколько статей о том, как сделать это, один из них: Войти и получить apikey, а затем хэш некоторые значения с этим apikey и отправить хешированную строку вместе с запросом, так что это можно сделать снова на уровне сервера.
Это хороший способ или это опасно делать?
Если не пропустить понимание, чтобы избежать человека в середине, я могу добавить URL-адрес запроса к переменным, которые будут хэшироваться, или это не так.
Также мой мозг застрял в том, как использовать отметку времени, чтобы избежать большого запроса на тот же URL-адрес с одинаковыми данными.
Прошу прощения, если мой вопрос был задан 1000 раз. Тем не менее, я прочитал некоторые статьи сейчас, и мне все еще не ясно, какой способ пойти на мой маленький апи.
Из того, что я прочитал и понял от него, это должно быть так.
- открытый ключ хранится в приложении, чтобы позволить пользователю или приложению войти.
- сервер создает закрытый ключ для этого конкретного пользователя при его доступе. Или это должно быть всегда одинаковым или статическим значением, созданным человеком?
- пользователь делает запрос отправляет вместе с запросом подпись, которая hash_hmac (некоторые значения + закрытый ключ); Сервер
- проверяет правильность этих значений и делает, создавая один и тот же хэш из значения, которое отправляется.
- Если сервер генерирует один и тот же хеш, запрос действителен и может быть выполнен.
- Это их путь, или я не вижу здесь каких-то мэров.
Для того, чтобы получить данные, это способ, способный создать хэш?
$l_sPrivateKey = 'something returned by database when user loged in';
$l_aData = array();
foreach($_POST as $key => $value){
if($key == 'signature') continue;
$l_aData[$key] = $value;
}
//This should then be the same as $_POST['signature'];
hash_hmac('sha256',serialize($l_aData),$l_sPrivateKey, false);
Ваш вклад будет оценен. С наилучшими пожеланиями и благодарностью