Запрос прототипа Ajax.Updater Безопасность / аутентификация для каждого запроса - PullRequest
0 голосов
/ 01 февраля 2011

Мой сайт содержит Prototype Framework и запрограммирован на PHP.(я знаю очень базовый javascript)

Обычный посетитель сайта и его действия

Что-то похожее на keepvid .com

A) В нем есть одно поле ввода, в котором пользователь помещает ссылку, а затем нажимает кнопку «Отправить».(? var = userfoo выполнить через прототип работы с фреймами) (запрос отправляется на ту же страницу action = index.php)

B) Показывает Loading gif, чем отображает результат, по умолчанию он скрыт и отображаетпо запросу.

C) Теперь html родительского окна (главная страница) не обновляется и не перезагружается.

D) Снова пользователь Поместите ссылку и нажмите «Отправить», она выполняет тот же процесс abc.

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

Проблема:

1) Но если кто-нибудь добавит http: // url? Var = foo & var = bar в браузерон сгенерирует выходное содержимое div, что означает отсутствие посещения главной страницы.любой может передать запрос и напрямую получить результат.

2) Я пытался использовать маркер сеанса, но он не работает, поскольку он восстанавливается в div.также родительский элемент не обновляется, поэтому токен сеанса не совпадает (ЭТО ТОЛЬКО ПРОИСХОДИТ С ЗАПРОСОМ AJAX 1 выводит данные нормально, но второй запрос не выполняется, так как родительский токен совпадает. И кнопка отправки использует тот же токен) На чистом PHPэто работает, это обновляет страницу, но я не хочу обновлять страницу.Я просто хочу показать загрузку GIF.

3) Любой может использовать curl php и захватить страницу.Поэтому я хотел проверить Javascript (HIDDEN).Если не удается, чем вкратце запустить Captcha, если Javascript отключен, тогда запустите безопасность CAPTCHA.Я не хочу, чтобы это работало в многословной форме, в командной строке или в другом скрипте (для извлечения).

4) Я не знаю точно, как это называется.Я думаю, что они XHR.

Я хочу обеспечить безопасность для своего веб-сайта с

1) URL-переменным, например,? Var = foo && var2 = bar, но также разрешить преобразование(если это делает какое-то тело), ​​чтобы перенаправить страницу в? redirect = foo и загрузить главную страницу и поместить это значение перенаправления в поле ввода

2) Проверка на сервере, но внутри div и должна отображать загрузку gif и перезагрузку donotвся страница ..

Вещи, которые я посмотрел, но потерпел неудачу ...

1) JCryption, но он требует Jquery, чем я должен перекодировать все ...

2)

// If the request did not come from AJAX, exit:
          if($_SERVER['HTTP_X_REQUESTED_WITH'] !='XMLHttpRequest'){
          exit;
          }

Эта команда не выполняется в браузере IE7.(это ЕДИНСТВЕННЫЙ ЛУЧШИЙ МЕТОД, НО НЕ УКАЗАНЫ В ТОЛЬКО ОДНОМ БРАУЗЕРЕ). Еще одна проблема - если кто-то из создателей запустит его на локальном хосте, измените действие на http://myurl, чем оно все равно примет его.Кроме того, если мы сделаем завиток для отправки настраиваемого заголовка, это приведет к поражению цели.

3) Используется шифрование JavaScript и расшифровка PHP.НЕКОТОРЫЕ JS для расшифровки и PHP функцию для расшифровки.(через использование скрытого ввода элементов формы) Это также был хороший метод, но у меня возникли трудности при редактировании источника для передачи переменной, которую я имею в виду, от div к серверу.

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

1 Ответ

0 голосов
/ 01 февраля 2011

Вам необходимо nonce .

  • Создать случайное значение и сохранить его в переменной сеанса.

    session_start();
    $_SESSION['nonce'] = base64_encode(md5(mt_rand()));
    
  • Используйте это значение как скрытый элемент в форме или добавьте его в URL-адрес AJAX в качестве параметра.

    <input type="hidden" name="nonce" value="<?php echo $_SESSION['nonce'] ?>"/>
    
  • Сравните значение, сохраненное в сеансе, с запрошенным значениемAJAX.Если это не удается, сообщите браузеру с ошибкой 403.

    session_start();
    if ($_GET['nonce'] !== $_SESSION['nonce']) {
        header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden');
        die('Forbidden. Please check your cookies and try again.');
    }
    
  • Обновите страницу только в случае успеха.

    new Ajax.Updater({success: 'ELEMENT ID'}, 'AJAX URL');
    
  • ЕслиОбнаружена ошибка, программа обновления завершается сбоем, и изменения не вносятся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...