No Refresh !
Имеются различные блоки кодов выполнятся , которые должны строго по одному разу , но если какой-то злоумышленник нажмёт refresh , то блок выполнится ещё раз что приведёт к очень большой проблеме . Подскажите пожайлуста решение этой проблемы !
Пока, насколько понял вопрос, могу посоветовать только:
1. Куки (самый ламерский способ)
2. Сессии (если повторное выполнение требуется запретить только на время сеанса)
3. Бан по IP, если на долго.
4. Регистрация пользователей с последующей авторизацией и управление разрешениями на этом уровне.
У каждого способа есть свои недостатки. Наиболее эффективный, на мой взгляд, последний, хотя, все зависит от ситуации.
Есть такая проблемка ( постараюсь объяснить как можно яснее т.к. проблема неочень обычная ! ) :
Имеются различные блоки кодов выполнятся , которые должны строго по одному разу , но если какой-то злоумышленник нажмёт refresh , то блок выполнится ещё раз что приведёт к очень большой проблеме . Подскажите пожайлуста решение этой проблемы !
Используй это:
header("Location: ".$uri);
Этот редирект делай после отработки скрипта. При этом все POST переменные уничтожаются.
Поясни пожалуйста проблему более детально. Расскажи что конкретно делает твой код и как работает.
Пока, насколько понял вопрос, могу посоветовать только:
1. Куки (самый ламерский способ)
2. Сессии (если повторное выполнение требуется запретить только на время сеанса)
3. Бан по IP, если на долго.
4. Регистрация пользователей с последующей авторизацией и управление разрешениями на этом уровне.
У каждого способа есть свои недостатки. Наиболее эффективный, на мой взгляд, последний, хотя, все зависит от ситуации.
Используй это:
header("Location: ".$uri);
Этот редирект делай после отработки скрипта. При этом все POST переменные уничтожаются.
Вы не поняли проблему !
В определенный момент у юзера выполняется определенный блок кода , но если он нажмет refresh , то этот блок кода выполнится ещё раз что приведёт к ещё одноё проблеме !
можно какнить зделоть так чтоб при нажатии юзером refresh не выполнялся блок кода , а выводилось сообщение Error ..... ???
Вы не поняли проблему !
В определенный момент у юзера выполняется определенный блок кода , но если он нажмет refresh , то этот блок кода выполнится ещё раз что приведёт к ещё одноё проблеме !
можно какнить зделоть так чтоб при нажатии юзером refresh не выполнялся блок кода , а выводилось сообщение Error ..... ???
Попробуй так, за достоверность не ручаюсь, но в одной книге по асп вродь чет такое было.
если у тебя есть передающиеся переменные и они разные, то загони имя переменной в сессию и в начале страницы вставляй блок
if($_SESSION['variable']==false){
// блок кода;
$_SESSION['variable']==true;
}
else{header("Location:error.html");}
А сессии создай на первой странице с которой пользовательначнет путь.
Попробуй так, за достоверность не ручаюсь, но в одной книге по асп вродь чет такое было.
если у тебя есть передающиеся переменные и они разные, то загони имя переменной в сессию и в начале страницы вставляй блок
if($_SESSION['variable']==false){
// блок кода;
$_SESSION['variable']==true;
}
else{header("Location:error.html");}
А сессии создай на первой странице с которой пользовательначнет путь.
sorry забыл упоменуть использую PHP !
А ещё зарание скажу : Хедеры и явские скрипты не годятся !
Во первых это и есть код на PHP :D
Во вторых header(Location) можешь заменить на что угодно, например die("Маза фака че кликаете по рефрешу?")
Во первых это и есть код на PHP :D
а чё тогда базаришь что это было написано в книжке по ASP ????
про Хедеры я имел введу :
Используй это:
header("Location: ".$uri);
а чё тогда базаришь что это было написано в книжке по ASP ????
про Хедеры я имел введу :
Во первых я с тобой не базарю, а во вторых я учу не только PHP но еще и ASP в придачу, общий смысл построения приложений похож во всех серверных языках, про реализацию я не говорю...
в третьих я тебе привел пример без header, замени его на die или че душе угодно
Во первых я с тобой не базарю, а во вторых я учу не только PHP но еще и ASP в придачу, общий смысл построения приложений похож во всех серверных языках, про реализацию я не говорю...
в третьих я тебе привел пример без header, замени его на die или че душе угодно
испробовал твой уникальный пример и пришел к выводу : не подходит !
ктонить знает ещё какие-нибуть примеры ???
Вы не поняли проблему !
В определенный момент у юзера выполняется определенный блок кода , но если он нажмет refresh , то этот блок кода выполнится ещё раз что приведёт к ещё одноё проблеме !
можно какнить зделоть так чтоб при нажатии юзером refresh не выполнялся блок кода , а выводилось сообщение Error ..... ???
Видимо, не совсем понятно объяснил.
Чтобы исключить возможность нажатия refresh с последующей ошибкой о которой ты говорил используй то что я тебе сказал. В таком случае если он нажмет на refresh то ничего не произойдет.
Если ты не хочешь этим путем идти, то объясни что делает твой скрипт, тогда можно будет уже что-то советовать.
Видимо, не совсем понятно объяснил.
Чтобы исключить возможность нажатия refresh с последующей ошибкой о которой ты говорил используй то что я тебе сказал. В таком случае если он нажмет на refresh то ничего не произойдет.
Если ты не хочешь этим путем идти, то объясни что делает твой скрипт, тогда можно будет уже что-то советовать.
Хедеры это точно отпадает т.к. выход в браузер уже произошел ( не тот определенный код ), а что делает мой скрипт не имеет не какого значения к решению этой задачи !
Хедеры это точно отпадает т.к. выход в браузер уже произошел ( не тот определенный код ), а что делает мой скрипт не имеет не какого значения к решению этой задачи !
Используй туже систему что и на форуме, чтобы повторный рефреш не привел опять в добавлению новой записи.
Используй туже систему что и на форуме, чтобы повторный рефреш не привел опять в добавлению новой записи.
а я непонемаю что там за система ты мне можешь подсказать ????
Используй туже систему что и на форуме, чтобы повторный рефреш не привел опять в добавлению новой записи.
Или можно использовать флаги, и перед запуском скрипта проверять их значение. А само значение флагов передавать в сессии.
Или можно использовать флаги, и перед запуском скрипта проверять их значение. А само значение флагов передавать в сессии.
Я уже кое что придумал :
Я буду через каждую ссылку , буттон в GET зоправлять случайный integer например от 5000 до 1000000 и создам таблицу с двумя полями : имя страницы и integer , в каторую при каждом запрсе страницы будут записываться эти данные и проверятся есть ли там уже такие данные , если есть то выводим ошибку , иначе выполняем определенный код . Естественно если нажать refresh то выведится ошибка !
А таблицу я буду очищать автоматом в определенное время суток ( каждый день ) самим же юзером то есть : если время столько-то то очистить from эта таблица .
Так что вероятность совподения и случайного вывода ошибки при учоте моего сайта посещения и того что таблица будет каждый день удаляться очень мала !
Вероятность изменения в ручную в строке адресса integer'а злоумышленником исключенна т.к. в POST тоже будет передоватся определенная изменяемая каждый раз своё значение переменная !
Довольно таки замудрённый способ ну всё же я другого не нашел , к тамуже этот способ одновременно решает мою втарую долгонерешаемую проблему : Постоянное кеширование страниц на этом чертовсом хостинге не реагируя на :
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 :) .
Я уже кое что придумал :
Я буду через каждую ссылку , буттон в GET зоправлять случайный integer например от 5000 до 1000000 и создам таблицу с двумя полями : имя страницы и integer , в каторую при каждом запрсе страницы будут записываться эти данные и проверятся есть ли там уже такие данные , если есть то выводим ошибку , иначе выполняем определенный код . Естественно если нажать refresh то выведится ошибка !
А таблицу я буду очищать автоматом в определенное время суток ( каждый день ) самим же юзером то есть : если время столько-то то очистить from эта таблица .
Так что вероятность совподения и случайного вывода ошибки при учоте моего сайта посещения и того что таблица будет каждый день удаляться очень мала !
Вероятность изменения в ручную в строке адресса integer'а злоумышленником исключенна т.к. в POST тоже будет передоватся определенная изменяемая каждый раз своё значение переменная !
Довольно таки замудрённый способ ну всё же я другого не нашел , к тамуже этот способ одновременно решает мою втарую долгонерешаемую проблему : Постоянное кеширование страниц на этом чертовсом хостинге не реагируя на :
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(). Просто в этом случае точно не когда не будет повторений.
Я уже кое что придумал :
Я буду через каждую ссылку , буттон в GET зоправлять случайный integer например от 5000 до 1000000 и создам таблицу с двумя полями : имя страницы и integer , в каторую при каждом запрсе страницы будут записываться эти данные и проверятся ... [/QUOTE]
Много гемороя. Зачем лишний раз сервер баз данных тревожить? Лучше делай флагами. Например, вначале скрипта делаешь проверочку:
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]
Каким бы случайным не был этот int, но тут как мне кажеться лучше использовать либо time() либо microtime(). Просто в этом случае точно не когда не будет повторений.
да точно заменю rand на time как же я сразу не подумал ...
Много гемороя. Зачем лишний раз сервер баз данных тревожить?
и вовсе нет некакого гемароя , (лишний раз тревожить) ну ты насмешил как-бутто она влюбой момент рухнит ... :D темболее я уже все написал , да и к тамуже как я уже писал мне этот способ подходит еще по одной причине ....
И еще (к слову)повежливее общайся с людьми, которые тебе хотят помочь.
для меня это совсем обыкновенное слого , а причем тут ты ??? тебе что-то ненравится ??? я тебе это писал ??? еслиб надо было он бы мне и сам об этом написал !!!
и вовсе нет некакого гемароя , (лишний раз тревожить) ну ты насмешил как-бутто она влюбой момент рухнит ... :D темболее я уже все написал , да и к тамуже как я уже писал мне этот способ подходит еще по одной причине ....
для меня это совсем обыкновенное слого , а причем тут ты ??? тебе что-то ненравится ??? я тебе это писал ??? еслиб надо было он бы мне и сам об этом написал !!!
Тут форум или свалка я не понимаю? :???: :devil: