Сделал API для своей игры теперь можно автоматизировать перевод бонусов другим пользователям и т.п. Появилась проблема, пользователь написал скрипт перевода бонусов, он скрипт 2 раза случайно запустил - в итоге 2 перевода бонусов как от этого можно на моей стороне избавиться? я конечно понимаю что так ток это его проблема, но хотелось бы решить её, она может у многих возникнуть вот сейчас думаю может для каждого запроса сделать уникальный ID и чтобы в случае случайного повторного выполнения скрипта вышла ошибка Какие еще варианты есть? буду всем благодарен
Используй токены. PHP: <?php session_start(); /* Обрабатываем данные */ if( isset($_POST['do']) ) { if( isset($_POST['token']) && isset($_SESSION['token']) && $_SESSION['token'] == $_POST['token'] ) { echo 'Обрабатываем запрос.. '; print_r($_POST); }else { echo 'Bad token'; } } $token = md5(uniqid(rand(), true)); $_SESSION['token'] = $token; ?> <form method="POST"> <input type="hidden" name="token" value="<?=$token?>"> <input type="text" name="somedata" value="some input data"> <button type="sumbit" name="do">Send data</button> </form>
LStr1ke, а если пользователь будет API юзать не через php, а например программу напишет для компа при таком раскладе реально токены реализовать?
Ааа API же. Ну это сугубо его проблема, что он 2 раза запустил свой скрипт. На то оно и api что должен выполнять комманды. Можно поставить лимит на частые запросы. Не знаю как у тебя реализовано апи, но если кто-то захочет в цикле переводить эти баллы массово, или подряд выполнить несколько функций, то их заблокирует эта самая защита Можно еще реализовать токены, в ответ на каждый запрос к апи возвращать токен, а на сервере его хранить в бд в таблице сессии ( или как там у тебя авторизация в апи происходит ) Но я не встречал нигде такой реализации. Ну или оставить как есть, и пусть пользователи выпрямляют руки )