2016-12-25 2 views
1

Я попытался решить мою проблему, но я даже не знаю, как задать свой вопрос: когда пользователь выполняет одно конкретное событие на моем сайте, я бы хотел вызвать эту функцию, что увеличивает кредит другого пользователя в базе данных mysql:вызов php скрипта из этого только ajax

function incrasecredit(){ 
    $.ajax({ 
    type: "POST", 
    url: "/increasecredit.php", 
    data: {}, 
    success: function(html) { 
    } 
    }); 
    } 

... простой. Проблема состоит в том, что (как указывает имя скрипта), что это событие связано с «кредитной системой»/деньгами. Поэтому я думаю, что это должно быть безопасно. «/increasecredit.php» не должен быть доступен пользователю каким-либо другим способом. Например. просто выполнив его через браузер. Только в этом специальном случае, когда я вызываю его в сценарии jquery. Чтобы быть более точным, когда пользователь нажимает на iframe, должен выполняться incrasecredit(). И ТОЛЬКО в этом случае. Как я могу защитить этот скрипт от неправильного выполнения? Я пытался решить это с помощью токенов, но пока не понял. У меня такое чувство, что я не получаю больше картины. Заранее спасибо.

+4

Вы используете какую-либо форму аутентификации пользователя? Я думаю, что лучший способ сделать это - выполнить проверки в скрипте increasecredit.php, поскольку запросы ajax (как и любой другой вид проверки на соответствие) могут быть просто «подделаны» – flynorc

+0

Да, аутентификация пользователя выполняется сеансом , Но как я могу проверить, есть ли у пользователя разрешение увеличить кредитное значение записи другого пользователя? – tyler

+1

Это ваша собственная система; не должен * вы * знаете? Каковы ограничения для транзакции? В интересах пользователя делать это чаще, чем они должны? –

ответ

3

Вы должны реализовать токены CSRF на своей странице, чтобы проверить, что запрос был создан с вашего сайта через законный механизм. Это сводится к тому, что один только токен должен быть передан с запросом POST, который должен соответствовать маркеру, хранящемуся в cookie сеанса пользователя. Этот токен также должен автоматически истекать через некоторое время.

Кроме того, бэкэнд должен реализовать какой-то ACL для авторизации транзакции. Роль пользователя может быть проверена через сеанс для аутентифицированного пользователя.

+0

Хорошо, это уже очень помогло мне. Хотя это не было 100%. Позвольте мне сделать это прямо: я создаю токен, когда создается сеанс, который хранится в пользовательском сеансе. Когда я выполняю свой вызов ajax, я также отправляю свой токен. Php проверяет, совпадает ли токен, который был отправлен, с токеном в сеансе? Например: xhr.setRequestHeader ('X-CSRF-Token', getCSRFTokenValue()); Итак, php знает, если запрос поступает с сайта. Один вопрос: другие источники указали, что отправка токена с заголовком небезопасна? – tyler

+0

это также помогло: http://stackoverflow.com/a/10336360/1352320 – tyler

Смежные вопросы