Помогите решить проблему

Discussion in 'PHP' started by Kruzak, 29 Mar 2013.

  1. Kruzak

    Kruzak New Member

    Joined:
    21 Dec 2010
    Messages:
    126
    Likes Received:
    4
    Reputations:
    1
    Сделал API для своей игры
    теперь можно автоматизировать перевод бонусов другим пользователям и т.п.
    Появилась проблема, пользователь написал скрипт перевода бонусов, он скрипт 2 раза случайно запустил - в итоге 2 перевода бонусов
    как от этого можно на моей стороне избавиться?
    я конечно понимаю что так ток это его проблема, но хотелось бы решить её, она может у многих возникнуть
    вот сейчас думаю может для каждого запроса сделать уникальный ID и чтобы в случае случайного повторного выполнения скрипта вышла ошибка
    Какие еще варианты есть? буду всем благодарен
     
  2. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    800
    Likes Received:
    145
    Reputations:
    73
    Используй токены.
    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>
     
    #2 LStr1ke, 29 Mar 2013
    Last edited: 29 Mar 2013
  3. Kruzak

    Kruzak New Member

    Joined:
    21 Dec 2010
    Messages:
    126
    Likes Received:
    4
    Reputations:
    1
    LStr1ke, а если пользователь будет API юзать не через php, а например программу напишет для компа

    при таком раскладе реально токены реализовать?
     
  4. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4
    curl
     
  5. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    800
    Likes Received:
    145
    Reputations:
    73
    Ааа API же. Ну это сугубо его проблема, что он 2 раза запустил свой скрипт. На то оно и api что должен выполнять комманды.
    Можно поставить лимит на частые запросы. Не знаю как у тебя реализовано апи, но если кто-то захочет в цикле переводить эти баллы массово, или подряд выполнить несколько функций, то их заблокирует эта самая защита
    Можно еще реализовать токены, в ответ на каждый запрос к апи возвращать токен, а на сервере его хранить в бд в таблице сессии ( или как там у тебя авторизация в апи происходит ) Но я не встречал нигде такой реализации.
    Ну или оставить как есть, и пусть пользователи выпрямляют руки )