Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

No Refresh !

1.9K
12 августа 2005 года
Ananim
156 / / 15.05.2005
Есть такая проблемка ( постараюсь объяснить как можно яснее т.к. проблема неочень обычная ! ) :
Имеются различные блоки кодов выполнятся , которые должны строго по одному разу , но если какой-то злоумышленник нажмёт refresh , то блок выполнится ещё раз что приведёт к очень большой проблеме . Подскажите пожайлуста решение этой проблемы !
365
12 августа 2005 года
MasterSID
230 / / 23.02.2003
Поясни пожалуйста проблему более детально. Расскажи что конкретно делает твой код и как работает.
Пока, насколько понял вопрос, могу посоветовать только:
1. Куки (самый ламерский способ)
2. Сессии (если повторное выполнение требуется запретить только на время сеанса)
3. Бан по IP, если на долго.
4. Регистрация пользователей с последующей авторизацией и управление разрешениями на этом уровне.

У каждого способа есть свои недостатки. Наиболее эффективный, на мой взгляд, последний, хотя, все зависит от ситуации.
1.9K
12 августа 2005 года
kasap
168 / / 07.04.2005
Цитата:
Originally posted by Ananim
Есть такая проблемка ( постараюсь объяснить как можно яснее т.к. проблема неочень обычная ! ) :
Имеются различные блоки кодов выполнятся , которые должны строго по одному разу , но если какой-то злоумышленник нажмёт refresh , то блок выполнится ещё раз что приведёт к очень большой проблеме . Подскажите пожайлуста решение этой проблемы !


Используй это:

 
Код:
$uri='адрес редиректа';
header("Location: ".$uri);

Этот редирект делай после отработки скрипта. При этом все POST переменные уничтожаются.
1.9K
12 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by MasterSID
Поясни пожалуйста проблему более детально. Расскажи что конкретно делает твой код и как работает.
Пока, насколько понял вопрос, могу посоветовать только:
1. Куки (самый ламерский способ)
2. Сессии (если повторное выполнение требуется запретить только на время сеанса)
3. Бан по IP, если на долго.
4. Регистрация пользователей с последующей авторизацией и управление разрешениями на этом уровне.
У каждого способа есть свои недостатки. Наиболее эффективный, на мой взгляд, последний, хотя, все зависит от ситуации.


Цитата:
Originally posted by kasap
Используй это:
 
Код:
$uri='адрес редиректа';
header("Location: ".$uri);

Этот редирект делай после отработки скрипта. При этом все POST переменные уничтожаются.


Вы не поняли проблему !
В определенный момент у юзера выполняется определенный блок кода , но если он нажмет refresh , то этот блок кода выполнится ещё раз что приведёт к ещё одноё проблеме !
можно какнить зделоть так чтоб при нажатии юзером refresh не выполнялся блок кода , а выводилось сообщение Error ..... ???

304
12 августа 2005 года
Fenyx
707 / / 26.01.2005
Цитата:
Originally posted by Ananim
Вы не поняли проблему !
В определенный момент у юзера выполняется определенный блок кода , но если он нажмет refresh , то этот блок кода выполнится ещё раз что приведёт к ещё одноё проблеме !
можно какнить зделоть так чтоб при нажатии юзером refresh не выполнялся блок кода , а выводилось сообщение Error ..... ???


Попробуй так, за достоверность не ручаюсь, но в одной книге по асп вродь чет такое было.

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

if($_SESSION['variable']==false){
// блок кода;
$_SESSION['variable']==true;
}
else{header("Location:error.html");}

А сессии создай на первой странице с которой пользовательначнет путь.

1.9K
12 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by Fenyx
Попробуй так, за достоверность не ручаюсь, но в одной книге по асп вродь чет такое было.

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

if($_SESSION['variable']==false){
// блок кода;
$_SESSION['variable']==true;
}
else{header("Location:error.html");}

А сессии создай на первой странице с которой пользовательначнет путь.


sorry забыл упоменуть использую PHP !

1.9K
12 августа 2005 года
Ananim
156 / / 15.05.2005
А ещё зарание скажу : Хедеры и явские скрипты не годятся !
304
12 августа 2005 года
Fenyx
707 / / 26.01.2005
Цитата:
Originally posted by Ananim
А ещё зарание скажу : Хедеры и явские скрипты не годятся !



Во первых это и есть код на PHP :D
Во вторых header(Location) можешь заменить на что угодно, например die("Маза фака че кликаете по рефрешу?")

1.9K
12 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by Fenyx
Во первых это и есть код на PHP :D


а чё тогда базаришь что это было написано в книжке по ASP ????
про Хедеры я имел введу :

Цитата:
Originally posted by kasap

Используй это:
 
Код:
$uri='адрес редиректа';
header("Location: ".$uri);

304
12 августа 2005 года
Fenyx
707 / / 26.01.2005
Цитата:
Originally posted by Ananim
а чё тогда базаришь что это было написано в книжке по ASP ????
про Хедеры я имел введу :


Во первых я с тобой не базарю, а во вторых я учу не только PHP но еще и ASP в придачу, общий смысл построения приложений похож во всех серверных языках, про реализацию я не говорю...
в третьих я тебе привел пример без header, замени его на die или че душе угодно

1.9K
12 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by Fenyx
Во первых я с тобой не базарю, а во вторых я учу не только PHP но еще и ASP в придачу, общий смысл построения приложений похож во всех серверных языках, про реализацию я не говорю...
в третьих я тебе привел пример без header, замени его на die или че душе угодно


испробовал твой уникальный пример и пришел к выводу : не подходит !
ктонить знает ещё какие-нибуть примеры ???

1.9K
12 августа 2005 года
kasap
168 / / 07.04.2005
Цитата:
Originally posted by Ananim
Вы не поняли проблему !
В определенный момент у юзера выполняется определенный блок кода , но если он нажмет refresh , то этот блок кода выполнится ещё раз что приведёт к ещё одноё проблеме !
можно какнить зделоть так чтоб при нажатии юзером refresh не выполнялся блок кода , а выводилось сообщение Error ..... ???



Видимо, не совсем понятно объяснил.
Чтобы исключить возможность нажатия refresh с последующей ошибкой о которой ты говорил используй то что я тебе сказал. В таком случае если он нажмет на refresh то ничего не произойдет.

Если ты не хочешь этим путем идти, то объясни что делает твой скрипт, тогда можно будет уже что-то советовать.

1.9K
12 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by kasap
Видимо, не совсем понятно объяснил.
Чтобы исключить возможность нажатия refresh с последующей ошибкой о которой ты говорил используй то что я тебе сказал. В таком случае если он нажмет на refresh то ничего не произойдет.

Если ты не хочешь этим путем идти, то объясни что делает твой скрипт, тогда можно будет уже что-то советовать.


Хедеры это точно отпадает т.к. выход в браузер уже произошел ( не тот определенный код ), а что делает мой скрипт не имеет не какого значения к решению этой задачи !

299
12 августа 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by Ananim
Хедеры это точно отпадает т.к. выход в браузер уже произошел ( не тот определенный код ), а что делает мой скрипт не имеет не какого значения к решению этой задачи !


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

1.9K
12 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by 3D Bob
Используй туже систему что и на форуме, чтобы повторный рефреш не привел опять в добавлению новой записи.


а я непонемаю что там за система ты мне можешь подсказать ????

1.9K
12 августа 2005 года
Ananim
156 / / 15.05.2005
ааа опять хедеры чтоль ???
1.9K
12 августа 2005 года
kasap
168 / / 07.04.2005
Цитата:
Originally posted by 3D Bob
Используй туже систему что и на форуме, чтобы повторный рефреш не привел опять в добавлению новой записи.



Или можно использовать флаги, и перед запуском скрипта проверять их значение. А само значение флагов передавать в сессии.

1.9K
12 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by kasap
Или можно использовать флаги, и перед запуском скрипта проверять их значение. А само значение флагов передавать в сессии.


Я уже кое что придумал :
Я буду через каждую ссылку , буттон в GET зоправлять случайный integer например от 5000 до 1000000 и создам таблицу с двумя полями : имя страницы и integer , в каторую при каждом запрсе страницы будут записываться эти данные и проверятся есть ли там уже такие данные , если есть то выводим ошибку , иначе выполняем определенный код . Естественно если нажать refresh то выведится ошибка !
А таблицу я буду очищать автоматом в определенное время суток ( каждый день ) самим же юзером то есть : если время столько-то то очистить from эта таблица .
Так что вероятность совподения и случайного вывода ошибки при учоте моего сайта посещения и того что таблица будет каждый день удаляться очень мала !
Вероятность изменения в ручную в строке адресса integer'а злоумышленником исключенна т.к. в POST тоже будет передоватся определенная изменяемая каждый раз своё значение переменная !
Довольно таки замудрённый способ ну всё же я другого не нашел , к тамуже этот способ одновременно решает мою втарую долгонерешаемую проблему : Постоянное кеширование страниц на этом чертовсом хостинге не реагируя на :

 
Код:
header("Expires: Mon, 26 Jul 1997 00:00:00 GMT");
header("Cashe-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");

надеюсь все поняли как это решает эту проблему :D !
Даже на самом админском сайте используют через GET переменную nocache ( само название гаварит за себя ), каторая так-же передает случайный integer :) .
15
12 августа 2005 года
shaelf
2.7K / / 04.05.2005
Цитата:
Originally posted by Ananim
Я уже кое что придумал :
Я буду через каждую ссылку , буттон в GET зоправлять случайный integer например от 5000 до 1000000 и создам таблицу с двумя полями : имя страницы и integer , в каторую при каждом запрсе страницы будут записываться эти данные и проверятся есть ли там уже такие данные , если есть то выводим ошибку , иначе выполняем определенный код . Естественно если нажать refresh то выведится ошибка !
А таблицу я буду очищать автоматом в определенное время суток ( каждый день ) самим же юзером то есть : если время столько-то то очистить from эта таблица .
Так что вероятность совподения и случайного вывода ошибки при учоте моего сайта посещения и того что таблица будет каждый день удаляться очень мала !
Вероятность изменения в ручную в строке адресса integer'а злоумышленником исключенна т.к. в POST тоже будет передоватся определенная изменяемая каждый раз своё значение переменная !
Довольно таки замудрённый способ ну всё же я другого не нашел , к тамуже этот способ одновременно решает мою втарую долгонерешаемую проблему : Постоянное кеширование страниц на этом чертовсом хостинге не реагируя на :
 
Код:
header("Expires: Mon, 26 Jul 1997 00:00:00 GMT");
header("Cashe-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");

надеюсь все поняли как это решает эту проблему :D !
Даже на самом админском сайте используют через GET переменную nocache ( само название гаварит за себя ), каторая так-же передает случайный integer :) .

Каким бы случайным не был этот int, но тут как мне кажеться лучше использовать либо time() либо microtime(). Просто в этом случае точно не когда не будет повторений.

1.8K
13 августа 2005 года
BIKTOP
91 / / 06.04.2005
Originally posted by Ananim
Я уже кое что придумал :
Я буду через каждую ссылку , буттон в GET зоправлять случайный integer например от 5000 до 1000000 и создам таблицу с двумя полями : имя страницы и integer , в каторую при каждом запрсе страницы будут записываться эти данные и проверятся ...
[/QUOTE]

Много гемороя. Зачем лишний раз сервер баз данных тревожить? Лучше делай флагами. Например, вначале скрипта делаешь проверочку:

 
Код:
$page = basename ($_SERVER['PHP_SELF'], '.php');
if (isset ($_SESSION[$page.'_flag']))
   die ('Don't click refresh!

   <meta http-equiv="refresh" content="0; url=http://'.$_SERVER['SERVER_NAME'].'/error.html">');
// Текст скрипта
//...
//в конце:

session_register ($page.'
_flag');


И еще (к слову)
Цитата:
а чё тогда базаришь


повежливее общайся с людьми, которые тебе хотят помочь.[QUOTE]

1.9K
13 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by shaelf
Каким бы случайным не был этот int, но тут как мне кажеться лучше использовать либо time() либо microtime(). Просто в этом случае точно не когда не будет повторений.


да точно заменю rand на time как же я сразу не подумал ...

1.9K
13 августа 2005 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by BIKTOP
Много гемороя. Зачем лишний раз сервер баз данных тревожить?


и вовсе нет некакого гемароя , (лишний раз тревожить) ну ты насмешил как-бутто она влюбой момент рухнит ... :D темболее я уже все написал , да и к тамуже как я уже писал мне этот способ подходит еще по одной причине ....

Цитата:
Originally posted by BIKTOP
И еще (к слову)повежливее общайся с людьми, которые тебе хотят помочь.


для меня это совсем обыкновенное слого , а причем тут ты ??? тебе что-то ненравится ??? я тебе это писал ??? еслиб надо было он бы мне и сам об этом написал !!!

1.9K
15 августа 2005 года
kasap
168 / / 07.04.2005
Цитата:
Originally posted by Ananim
и вовсе нет некакого гемароя , (лишний раз тревожить) ну ты насмешил как-бутто она влюбой момент рухнит ... :D темболее я уже все написал , да и к тамуже как я уже писал мне этот способ подходит еще по одной причине ....

для меня это совсем обыкновенное слого , а причем тут ты ??? тебе что-то ненравится ??? я тебе это писал ??? еслиб надо было он бы мне и сам об этом написал !!!



Тут форум или свалка я не понимаю? :???: :devil:

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог