Как предотвратить вмешательство в страницу процесса AJAX? - PullRequest
0 голосов
/ 31 января 2011

Я использую Ajax для обработки с JQUERY.Data_string отправляется на мою страницу process.php, где он сохраняется.

Проблема: прямо сейчас любой может напрямую набрать example.com/process.php для доступа к моей странице процесса или набрать example.com/process.php/var1=foo1&var2=foo2 для эмуляции отправки формы.Как я могу предотвратить это?

Также в коде Ajax я указал POST.В чем разница между POST и GET?

Ответы [ 3 ]

2 голосов
/ 31 января 2011

Прежде всего, отправьте форму AJAX через POST и на стороне сервера убедитесь, что запрос поступил в тот же домен и вызван через AJAX.

У меня есть несколько функций в моей библиотеке для этой задачи

function valid_referer()
{
    if(isset($_SERVER['HTTP_REFERER']))
        return parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) == $_SERVER['SERVER_NAME'];
    else
        return false;
}

function is_ajax()
{
    $key = 'HTTP_X_REQUESTED_WITH';

    return isset($_SERVER[$key]) && strtolower($_SERVER[$key]) == 'xmlhttprequest';
}

Вы можете прочитать это сообщение относительно разницы между сообщением и получить

1 голос
/ 31 января 2011

Хотя, как говорит Джейсон Лебрун, запретить людям, имитирующим отправку формы, практически невозможно, вы можете, по крайней мере, остановить случайные попытки. Наряду с реализацией предложений Назария (которые легко обойти, если вы действительно этого хотите), вы также можете создать какое-то уникальное значение на стороне сервера (я назову его токеном), которое вставляется на ту же страницу, что и ваш Ajax. Затем Ajax передает этот токен с другими вашими аргументами на страницу process.php, после чего вы можете проверить, что этот токен действителен.

UPDATE

см. Этот вопрос относительно токена

токен анти-CSRF и Javascript

0 голосов
/ 31 января 2011

Вы не можете запретить людям вручную эмулировать отправку данных формы на ваш сайт.Вы можете сделать это произвольно сложнее, но не сможете полностью предотвратить это.

...