Защита AJAX скриптов

Статус
Закрыто для дальнейших ответов.

mrPsyx

Well-Known Member
Регистрация
27.09.2009
Сообщения
375
как защитить скрипт дело в то что я использываю AJAX и не использываю форм и кнопок в виде субмит, и всё же как сделать защиту что бы они не могли обращаться напрямую к скриптам?
 

kein

Частный случай
Регистрация
23.11.2009
Сообщения
446
Есть вариант проверять заголовок на наличие XMLHTTPRequest, поможет от любопытных и юных хацкеров.
Но это не серьезная защита.
А иначе мне кажется нельзя.
 

Serg@NT

Well-Known Member
Регистрация
20.02.2010
Сообщения
506
Создаёшь проверочный параметр. Шифр, который можно будет проверить в ajax скрипте. Допустим, в главном окне берёшь текущее время в секундах, как-нибудь их переворачиваешь, меняешь местами и т.п. В скрипте это всё дело меняешь назад. Проверяешь разницу во времени между отправленным в параметре и текущим. Если она больше, к примеру, 10 минут - останавливаешь скрипт.
Только в обоих случаях бери серверное время и проверку в ajax скрипте, естественно, на сервере надо производить.

Кстати, можно поинтересоваться, а что такого можно сделать, вызвав ajax скрипт напрямую? Может, проще скрипт переделать, чтоб нельзя было навредить?
 

mrPsyx

Well-Known Member
Регистрация
27.09.2009
Сообщения
375
дело втом что я передаю данные через пгет да и вообще когда имеется прямой доступ к скриптам(даже если они нечего не смогут навредить) выглядит не професиОНально? способ с временем думаю слишком слаб во всех смыслах...
 

Creator

Administrator
Команда форума
Регистрация
03.03.2005
Сообщения
1 745
Есть вариант проверять заголовок на наличие XMLHTTPRequest, поможет от любопытных и юных хацкеров.
вкупе с

Может, проще скрипт переделать, чтоб нельзя было навредить?
и это будет выглядеть вполне профессионально :happy:
 

kein

Частный случай
Регистрация
23.11.2009
Сообщения
446
как-нибудь их переворачиваешь, меняешь местами
заменим на "применяешь симметричное шифрование". Симметричное значит что расшифровывается. Но это для любителей поломать голову. Что тоже не плохой вариант.

Проще будет запрашивать скрипт(страницу) с этим числом, и сразу же его отсылать обратно, я такое уже обходил на одном из сайтов. Это о парсинге/взломе. Лишний запрос к еще одной странице конечно увеличит время работы парсера, но не критично

Вспомнил еще одну фишку, с которой я долго боролся(точнее долго не мог обнаружить).

У одного банковского сайта была такая фича в коде:
Код:
<script src="jquery.js"></script> <!-- было включение и jQuery-version но я почему-то не понял несоответствия что используется два файла джиквери -->
Дело было в том что данные в скрипте выдавались такие:
Код:
/**
 file 'jquery.js' not found in local cashe
*/
самое интересное было в заголовках, там передавались кукисы, которые и играли роль этого самого ключа. Но понять от куда страница их получает я долго не мог и потратил около двух дней. Так что такое защита мне кажется вполне достаточной

Судя по всему ИЕ кэшировал эти запросы не взирая на заголовки No Cache и потому банк советовал пользоваться для авторизации другими браузерами)) // Если нужен ИЕ, добавим к файлу время, чот нибудь вроде script src="calendar-generation.js?1234453589" вроде как генерация календаря с передачей данных(подумают что программист дебил, ну и ладно :laugh: ).

Еще интереснее было в их закрытой зоне. Там кукисы передавались не через скрипт а через <img src="blank.png", но опыт помог)
 

mrPsyx

Well-Known Member
Регистрация
27.09.2009
Сообщения
375
да я тож чот с тупил (вариант со времени подойдёт)

забираю свои слова обратно

но я нашел метод по круче и сто процентовый , но он очень похож

у меня есть еще один вопрос, что лучше, когда сайт работает на гет переменые или на сессиях ?
 

Serg@NT

Well-Known Member
Регистрация
20.02.2010
Сообщения
506
Если нужен ИЕ, добавим к файлу время, чот нибудь вроде script src="calendar-generation.js?1234453589" вроде как генерация календаря с передачей данных(подумают что программист дебил, ну и ладно :laugh: ).
Ничего такого не подумают. Это, кстати, во многих руководствах по ajax написано: передавать скрипту случайное число в качестве параметра, чтоб браузер ненароком не кешировал запросы. Так что, тут, скорей, похвалят.
 

mrPsyx

Well-Known Member
Регистрация
27.09.2009
Сообщения
375
короче мой метод вот такой, как только юзер заходит на страницу в базу данных я сохраняю айпи и случайный номер а если такой айпи уже записан то меняю только случайный номер, в ажакс скрипт берётся из бд случайный номер который присвоин даному ip и сравняется то который из бд и тот который был выслан -- что вы думаете ?
 

tigra60

Спасатель
Регистрация
10.12.2009
Сообщения
1 990
короче мой метод вот такой, как только юзер заходит на страницу в базу данных я сохраняю айпи и случайный номер а если такой айпи уже записан то меняю только случайный номер, в ажакс скрипт берётся из бд случайный номер который присвоин даному ip и сравняется то который из бд и тот который был выслан -- что вы думаете ?
Учитывая, что сейчас многие IP генерируются динамически, такую идентификацию пользователей фтопку.
 

mrPsyx

Well-Known Member
Регистрация
27.09.2009
Сообщения
375
ну тут думаю можно закрыть
 

mrPsyx

Well-Known Member
Регистрация
27.09.2009
Сообщения
375
Создаёшь проверочный параметр. Шифр, который можно будет проверить в ajax скрипте. Допустим, в главном окне берёшь текущее время в секундах, как-нибудь их переворачиваешь, меняешь местами и т.п. В скрипте это всё дело меняешь назад. Проверяешь разницу во времени между отправленным в параметре и текущим. Если она больше, к примеру, 10 минут - останавливаешь скрипт.
Только в обоих случаях бери серверное время и проверку в ajax скрипте, естественно, на сервере надо производить.

Кстати, можно поинтересоваться, а что такого можно сделать, вызвав ajax скрипт напрямую? Может, проще скрипт переделать, чтоб нельзя было навредить?

блин, какими функциями можно сделать шифр в php?? идея интересная
 

Serg@NT

Well-Known Member
Регистрация
20.02.2010
Сообщения
506
Создаёшь проверочный параметр. Шифр, который можно будет проверить в ajax скрипте. Допустим, в главном окне берёшь текущее время в секундах, как-нибудь их переворачиваешь, меняешь местами и т.п. В скрипте это всё дело меняешь назад. Проверяешь разницу во времени между отправленным в параметре и текущим. Если она больше, к примеру, 10 минут - останавливаешь скрипт.
Только в обоих случаях бери серверное время и проверку в ajax скрипте, естественно, на сервере надо производить.

Кстати, можно поинтересоваться, а что такого можно сделать, вызвав ajax скрипт напрямую? Может, проще скрипт переделать, чтоб нельзя было навредить?

блин, какими функциями можно сделать шифр в php?? идея интересная
да самыми обычными. Можно, конечно, какой-нибудь алгоритм симметричного шифрования применить, но я бы так сильно не заморачивался. Обычными методами поменять местами символы в строке в определённой последовательности, а на другой стороне - в обратном порядке. Это ж не код к веб-деньгам, вряд ли найдётся псих, который решит тратить время на взлом этого.
 

kein

Частный случай
Регистрация
23.11.2009
Сообщения
446
К чему запариваться с обратным раскодированием...
Код:
$code =
    md5(floor(time()/60) /*минуты*/ . 'secred_word').
    md5((floor(time()/60)+1) . 'secred_word'); // следующая минута
и на сервере потом:
Код:
$code = array(substr($code,0,32),substr($code,31));
$md5 = md5((floor(time()/60) . 'secred_word');
if( $md5 == $code[0] || $md5 == $code[1]){
   echo 'Succes';
}
Итого у нас от 1 до 2 минут на обратный ответ
 
Статус
Закрыто для дальнейших ответов.
Верх Низ