[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как защититься от F5
inpost
Всем привет! С Новым Годом. :rolleyes:
Это экспериментальная тема, огромная просьба не пройти стороной. Я прошу сделать мне подарок на Новый Год и уделить пару минут.
Вступление:
Я прошу абсолютно всех не пройти эту тему стороной и ОЧЕНЬ СИЛЬНО ПРОШУ ответить на вопрос и выполнить ниже изложенные пункты. Прочитайте правила выполнения, их необходимо следовать в обязательном порядке. Не знаю даже как благодарить всех, может разве всем плюсы поставлю :)
Выполнить надо так, если бы это был реальный проект и ты бы делал это именно сейчас.
Я прошу, чтобы КАЖДЫЙ ОТВЕТИЛ(!!!), КТО НА ФОРУМЕ БОЛЕЕ 1 МЕСЯЦА

Задание. Защита от F5:
К тебе пришел заказчик, сделай классный сайт, ты сел его делать, создал много модулей, компонентов, блоков, дошло дело до комментирования статей. Как лично ты обезопасишь скрипт от F5. У нас есть id_user,id_topic (или id_новости,блога) и вводимые данные юзером: "текст". Вот скрипт:
if(isset($_POST['text']))
{
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_POST['text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
);
}

И сама форма:
<form action="" method="post">
<textarea
name="text"></textarea>
<br />
<input
type="submit" />
</form>



ОБЯЗАТЕЛЬНЫЕ Правила выполнения:
1) Не читать никакие комментарии в этой теме. СНАЧАЛА ОТВЕТИТЬ, а только потом уже читать. Это настоятельная просьба. Мне нужен независимый ответ каждого, а не правильный ответ, к тому же даже эксперты могут ошибаться.
2) Не искать ответы в гугле, или в других комментариях или разделах форума, пользоваться только своими знаниями, ТОЛЬКО СВОИМИ.
3) Ответ должен быть чёткий, а не образно-теоретический, ты делаешь сейчас сайт и как бы ты защитил свой скрипт. По возможности скрипт, 10 строчек кода написать обычного, чаще тратим куда больше времени на остальные вопросы.
4) НИКАКОГО офф-топа. Только ответ.
5) После ответа разрешается читать другие комментарии и общаться в этой теме в любой нормальной форме и обсуждать ответы других. ТОЛЬКО ПОСЛЕ СВОЕГО ОТВЕТА.

Финал:
Не читаем никого, кнопка "Ответить" находится справа вверху, не надо листать страницу вниз! :)

Зарание спасибо! Чем больше ответов, тем мне будет приятнее!



Спустя 15 минут, 30 секунд (2.01.2012 - 14:50) Self написал(а):
редирект

Спустя 3 минуты, 2 секунды (2.01.2012 - 14:53) rooor написал(а):
if(isset($_POST['text']))
{
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.mysql_escape_string(trim($_POST['text']))."',
`id_user` = "
.(int)$id_user.",
`id_topic` = "
.(int)$id_topic."
"
);
header("Location: http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']."");
}



PS: если я правильно понял вопрос, после бурно проведенного НГ))

Спустя 3 минуты, 45 секунд (2.01.2012 - 14:57) johniek_comp написал(а):
Могу сказать бред, но вижу только так:
<form action="" method="post">
<
textarea name="text"></textarea>
<
br />
<
input type="submit" />
</
form>
<?php
if(isset($_POST['text']))
{
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_POST['text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
);
echo 'Ваш комментарий добавлен! Сейчас вы его увидите....';
echo '<meta http-equiv="refresh" content="3; url=http://phpforum.ru/commetns.php#last" />';
}
?>

Ну и #last спецом для удобства пользователя :)
Напиши в скайп мне, правильно ли я сделал то хоть? :)

Спустя 17 минут, 46 секунд (2.01.2012 - 15:14) m4a1fox написал(а):
редирект

Спустя 1 минута, 3 секунды (2.01.2012 - 15:15) Семён написал(а):
Блин говно-вопрос, вопрос-говно.
Воспользуйся темже принципом как и при защите от CRSF атак.
После добавления записи очищать hash формы, а при добавлении его проверять.
Нет hash-a - нет операции, есть валидный хэш есть и операция.

Спустя 6 минут, 21 секунда (2.01.2012 - 15:22) RCuPeR написал(а):
Так уж исторически сложилось, что никогда не приходилось мне защищаться от F5. Возможно потому, что я особо не изобретал велики, а писал сразу на фрейморках (реже CMS) где все продумано, и подобных проблем нету.
Так вот, ближе к делу:
не особо вникая в суть проблемы, а мотивируя себя только просьбой inpost-a предположил следующий алгоритм:
1. в базу добавим + 1 поле `hash`, например, и ставим ему UNIQUE-индекс. В нем будет хранится md5-хэш данных отправляемых через форму.
2. при добавлении нового коммента или чего либо, что отправляется через форму, создаем уникальный ключ текста или еще чего.
3. далее запихиваем данные в базу. Если БД вернет нам ошибку, не помню какую, 1064 по моему - ура! защита сработала.

Почему так происходит ?
поле `hash` имеет уникальный индекс, это значит оно не пустит в БД две одинаковых строки этого поля. Т.е, (key == key) = FALSE (1064).

Надеюсь все понятно.
Может способ не самый рациональный, но 100% рабочий.

Свернутый текст
Будет интересная критика. Заинтересовался данным вопросом.

Спустя 7 минут, 5 секунд (2.01.2012 - 15:29) sergeiss написал(а):
Ладно, уговорил, речистый :) Напишу, хотя я уже раз 100 это писал, в т.ч. и на англоязычном форуме.

Для начала - не буду менять твой код, хотя у него и нет защиты от SQL-инъекции ;)

Общая структура скрипта:

1. Сначала - ПХП код, который анализирует данные.
2. Затем - чтение данных из БД. Этот код сработает всегда, в т.ч. и тогда, когда форма не была запущена либо когда есть ошибки при вводе.
3. И в конце - сама форма. Где, в т.ч., выводим данные, которые были прочитаны из БД, на основании АйДи в ГЕТе.

Твой код:
if(isset($_POST['text']))
{
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_POST['text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
);
}


А это мой, измененный код

$text= isset( $_POST['text'] ) ? $_POST['text'] : '';
if( $text <> '' )
{
// тут оставляем на совести ИНПОСТа возможную SQL-инъекцию.
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$text."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
);

header( "Refresh: 10, ".$http_данной_страницы+ID_этого_текста);
echo "Ваши данные записаны в БД"; // тут можно сделать любой вывод текста, в т.ч. и красиво форматированный
exit(); // выходим, игнорируя всё, что дальше написано

}

// далее анализируем: если в ГЕТе был передан АйДи, то читаем данные из БД и пишем в переменную $text
// сюда попадаем, если в ПОСТе не было ничего либо текст был пустой; возможность удаления текста не предусмотрена, т.к. это надо делать отдельной кнопкой, которая не входит в ТЗ ;)




А дальше выводим форму

<form action="" method="post">
<textarea
name="text"><?php echo $text; ?></textarea>
<br />
<input
type="submit" />
</form>


Где-то так примерно...

Спустя 11 минут, 58 секунд (2.01.2012 - 15:41) sergeiss написал(а):
johniek_comp - порядок действий надо поменять. Сначала ПХП-проверка, а потом форма.

Спустя 5 минут, 32 секунды (2.01.2012 - 15:46) Oyeme написал(а):
Использовал бы PRG паттерн. wink.gif В энциклопедии он написан очень детально ,Duplicate form submissions
По мне это самое оптимальное решение.
В частности это редирект методами POST или GET

Спустя 3 минуты, 44 секунды (2.01.2012 - 15:50) VELIK505 написал(а):
Каптча + редирект и по самбиту скидывать сессию каптчу

Спустя 34 минуты, 56 секунд (2.01.2012 - 16:25) caballero написал(а):
Цитата
Я прошу, чтобы КАЖДЫЙ ОТВЕТИЛ(!!!), КТО НА ФОРУМЕ БОЛЕЕ 1 МЕСЯЦА


Зачем просить - ты ж админ. Бан каждому кто не ответит. :angry:

А если по делу
Во первых что значит "защитится от F5" - возможно все известные браузеры одинакаво реагируют на F5 но вряд ли это стандарт.

Если речь идет о защите от повторной отправки формы то мне всегда помогал редирект. Причем не серверный, который неизвестно как в конкретной ситуации отработает то ли на PHP то ли на апаче то ли в браузере. А самый дубовый клиентский

echo "<script>window.location='тот же  урл'</script>"

Спустя 21 минута (2.01.2012 - 16:46) johniek_comp написал(а):
Классная тема. Столько хорошим примеров для себя нашел. inpost создавай ещё тем в php для начинающих smile.gif

Спустя 28 минут, 10 секунд (2.01.2012 - 17:14) Nikitian написал(а):
2 варианта.
1) Самым популярный редирект после внесения изменений в бд. Хидер-локейшн в простонародье.
2) Постинг через аякс. Реализация например через подобный плагин.

Спустя 27 минут, 46 секунд (2.01.2012 - 17:42) dadli написал(а):
inpost
Цитата
Не читать никакие комментарии в этой теме. СНАЧАЛА ОТВЕТИТЬ, а только потом уже читать.....

biggrin.gif
извини, не видержал я, сначала читаль другие ответи и вот потом отвечаю, нo если не читал, то, то же етого отвечал:
редирект.
ето же стандартная зашита от того, что ти написал.

Спустя 49 минут, 33 секунды (2.01.2012 - 18:32) Игорь_Vasinsky написал(а):
ну во первых - бональный редирект через заголовок.
как вариант: тупо взять и очистить (или обнулить POST) - естес-но после выполения скрипта.

Спустя 1 минута, 18 секунд (2.01.2012 - 18:33) inpost написал(а):
Игорь_Vasinsky
Как ты предлагаешь очистить? Он очищается при редиректе, или ещё как?

Спустя 2 минуты, 1 секунда (2.01.2012 - 18:35) Игорь_Vasinsky написал(а):
ну

$_POST = null;


можно побыдлокодить с unset() :ph34r:

Спустя 20 минут, 19 секунд (2.01.2012 - 18:55) caballero написал(а):
Цитата
как вариант: тупо взять и очистить (или обнулить POST) - естес-но после выполения скрипта.

После выполнения скрипта и так все очистится - только смысла никакого

Спустя 6 минут, 43 секунды (2.01.2012 - 19:02) Игорь_Vasinsky написал(а):
не понял.

нужно предотвратить повторную запись. - если запись после проверки кнопки - удалить её нафиг из POST

POST же и по ключам можно очищать, ключи же известны.

Спустя 47 секунд (2.01.2012 - 19:03) inpost написал(а):
Игорь_Vasinsky
Напиши код и сам же протестируй smile.gif

Спустя 2 минуты, 7 секунд (2.01.2012 - 19:05) Игорь_Vasinsky написал(а):
<input type="submit"  name="send"/>


if(isset($_POST['send']))
{
//проверяем, пишем в БД и тд
unset($_POST['send']);
}


а что тут тестировать....

ну вообще предпочтительней header - даже если придётся и с ob_start()


а это просто не стандарное и неорденарное решение - т.е. как вариант.

Спустя 9 минут, 19 секунд (2.01.2012 - 19:14) Winston написал(а):
Я пользуюсь редиректом.

Игорь_Vasinsky
И что, от F5 защищает ? blink.gif

Спустя 1 минута, 12 секунд (2.01.2012 - 19:15) caballero написал(а):
Цитата
POST же и по ключам можно очищать, ключи же известны.


Еще раз - POST как и все остальное очищается сам.
После отправки формы формируется по новой. Так PHP сделан.
Очищать нужно форму на клиенте. Свое мнение как я написал.

Спустя 16 минут, 27 секунд (2.01.2012 - 19:32) Игорь_Vasinsky написал(а):
laugh.gif да.. загнался я .... тока хеадер!

Спустя 6 минут, 23 секунды (2.01.2012 - 19:38) Nikitian написал(а):
Цитата (Игорь_Vasinsky @ 2.01.2012 - 19:32)
laugh.gif да.. загнался я .... тока хеадер!

Не только

Спустя 3 минуты, 2 секунды (2.01.2012 - 19:41) Игорь_Vasinsky написал(а):
сессии, куки, даже создание файла biggrin.gif

я про свой ответ говорил.

Спустя 5 минут, 51 секунда (2.01.2012 - 19:47) caballero написал(а):
Цитата
сессии, куки, даже создание файла

А еще горчичники

Еще раз - только клиентский редирект. Иначе ничто не помешает браузеру переотправить форму по рефрешу.

Ну как вариант - отправлять форму по GET.

Спустя 2 минуты, 43 секунды (2.01.2012 - 19:50) Nikitian написал(а):
Цитата (caballero @ 2.01.2012 - 19:47)
Еще раз - только клиентский редирект. Иначе ничто не помешает браузеру переотправить форму по рефрешу.

Ну как вариант - отправлять форму по GET.

Ну зачем же так категорично? Если форму отправлять javascript'ом, а не напрямую, то никакой f5 её отправлять не будет. Ещё можно во флеш или какой-нибудь activex завернуть функционал формы. Тожет спасёт от дубля по ф5. Вариантов можно придумать массу.

Спустя 1 минута, 19 секунд (2.01.2012 - 19:51) RCuPeR написал(а):
Мой вариант совсем "гнилой" ?

Спустя 42 секунды (2.01.2012 - 19:52) caballero написал(а):
Цитата
Вариантов можно придумать массу.


Можно, но вряд ли кто то станет переделывать страницу под аякс или тем более флеш вместо простого решения годами отработанным способом

Спустя 2 минуты, 12 секунд (2.01.2012 - 19:54) Игорь_Vasinsky написал(а):
ну вопервых - я тока редиректу верю, а остальное - это как варианты, чтоб был из чего выбирать.

JS - вдруг он отключен....

Спустя 55 секунд (2.01.2012 - 19:55) caballero написал(а):
Цитата
Мой вариант совсем "гнилой" ?

тот где вместо одной строки кода надо написать полсоьни включая изменения в БД?



Спустя 24 секунды (2.01.2012 - 19:55) Winston написал(а):
Цитата (caballero @ 2.01.2012 - 18:47)
Еще раз - только клиентский редирект

А если JS отключен ?

Спустя 50 секунд (2.01.2012 - 19:56) Invis1ble написал(а):
всегда писал header(), пока что проблем не было...

Спустя 1 минута, 5 секунд (2.01.2012 - 19:57) caballero написал(а):
Цитата
я тока редиректу верю

Какое дело браузеру до серверного редиректа - оно все равно переотправит форму.

Спустя 3 минуты, 3 секунды (2.01.2012 - 20:00) caballero написал(а):
Цитата
А если JS отключен ?

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



Спустя 1 минута, 20 секунд (2.01.2012 - 20:02) Nikitian написал(а):
Цитата (RCuPeR @ 2.01.2012 - 19:51)
Мой вариант совсем "гнилой" ?

1. Генерировать ошибку - не очень хорошая идея. Ваш код не должен приводить к ошибкам, даже подавленным. Например у меня все ошибки логируются и в случае использования такой логики будет бесполезный лог.
2. Почему нельзя писать одинаковые сообщения? Сквозная уникальность в данном случае бессмысленна, а уникальность в рамках статьи имеет чуть больше смысла, но тоже не айс. Допустим у статьи бурное обсуждение в 100500 комментов. Неделю назад я там оставил коммент, но он скрылся в буре страстей - ещё раз такое написать уже не получится?
Цитата
Можно, но вряд ли кто то станет переделывать страницу под аякс или тем более флеш вместо простого решения годами отработанным способом

Переделка страницы - это добавление обработчика в js и переделка обработчика данных на бэкенде. Ничего глобального.
Цитата
JS - вдруг он отключен....
Большинство современных сайтов неработоспособны без js. Ну и зачем затачиваться под микропроцент тех, у кого он отключён, притом, что даже в этом микропроценте абсолютное большинство пользователей вкурсе что и зачем у них отключено (я про пользователей плагина firefox noscript) и они всегда могут включить, что надо?

Спустя 14 секунд (2.01.2012 - 20:02) Игорь_Vasinsky написал(а):
caballero
мы видимо о разных вещах с тобой говорим???

header("location: ".$_SERVER['PHP_SELF']);

или с гет параметрами - смотря где форма висит.

такой редирект после работы с данными и усё пусто в POST

Спустя 8 минут, 36 секунд (2.01.2012 - 20:10) johniek_comp написал(а):
Не понятно чего хочет inpost, видимо что-то невообразимое. unsure.gif blink.gif

Спустя 26 секунд (2.01.2012 - 20:11) caballero написал(а):
<meta http-equiv="refresh" content="0; url=index.php">
без Js

Спустя 1 минута, 21 секунда (2.01.2012 - 20:12) Invis1ble написал(а):
Цитата
видимо что-то невообразимое.

защититься от DOS средствами пыха smile.gif

Спустя 50 минут, 47 секунд (2.01.2012 - 21:03) sebastjan написал(а):
У меня тупо форму генернит скрипт РНР, проверяет значения если всё хорошо обработка и редирект.
Хотя думаю как сказали выше лучше на уровне клиентской делать как говорит caballero
Ну и в впридачу грабли на яваскрипт типа АЛЕРТ - сообщение было добавленно, только я сам этого не люблю все эти алерт, лишние телодвижения напрягают.

Спустя 4 часа, 1 минута, 25 секунд (3.01.2012 - 01:04) VELIK505 написал(а):
Цитата (Winston @ 2.01.2012 - 16:55)
Цитата (caballero @ 2.01.2012 - 18:47)
Еще раз - только клиентский редирект

А если JS отключен ?

<script type="text/javascript">
location.replace("index.php");
</
script>

<noscript>
<meta
http-equiv="refresh" content="0; url=index.php">
</noscript>

Спустя 1 минута (3.01.2012 - 01:05) inpost написал(а):
Цитата (johniek_comp @ 2.01.2012 - 20:10)
Не понятно чего хочет inpost, видимо что-то невообразимое. unsure.gif blink.gif

Проверить, сколько человек всё же справились бы с заданием smile.gif И, кстати, один очень умный человек меня разочаровал smile.gif
Ну а то, что большинство ответит неправильно - это было очевидно, мне как раз нужны были эти неправильные ответы для своих гнусных целей smile.gif

Спустя 7 минут, 30 секунд (3.01.2012 - 01:13) Winston написал(а):
Цитата (inpost @ 3.01.2012 - 00:05)
Ну а то, что большинство ответит неправильно - это было очевидно

Расскажи тогда нам, как правильно делать ? biggrin.gif

Спустя 3 минуты, 28 секунд (3.01.2012 - 01:16) inpost написал(а):
Winston
tongue.gif

Спустя 1 минута, 40 секунд (3.01.2012 - 01:18) rooor написал(а):
inpost
не томи =)

Спустя 2 минуты, 5 секунд (3.01.2012 - 01:20) Winston написал(а):
Цитата (inpost @ 3.01.2012 - 00:05)
неправильные ответы для своих гнусных целей

Во хитрый какой laugh.gif

Спустя 1 час, 37 минут, 38 секунд (3.01.2012 - 02:58) TranceIT написал(а):
Редирект или очищение формы.

Спустя 1 час, 4 минуты, 1 секунда (3.01.2012 - 04:02) GET написал(а):

if(isset($_POST['text']))
{
$_SESSION['t_text']=$_POST['text'];
}
header('Location: index.php');
exit;

if(isset($_SESSION['t_text']))
{
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_SESSION['t_text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
);
unset($_SESSION['t_text']);
}

Спустя 7 минут, 45 секунд (3.01.2012 - 04:10) sergeiss написал(а):
Цитата (inpost @ 3.01.2012 - 02:05)
И, кстати, один очень умный человек меня разочаровал

Имя - в студию!!!

Цитата (inpost @ 3.01.2012 - 02:05)
Ну а то, что большинство ответит неправильно - это было очевидно

Опять же - что есть "правильно" в твоем представлении? И правильно ли это на самом деле? wink.gif

Спустя 2 часа, 9 минут, 45 секунд (3.01.2012 - 06:19) inpost написал(а):
sergeiss
Имя называть не буду smile.gif Зачем обижать человека, к тому же он на меня обидится! После этого была очень классная мысль, но она не развита в ввиду отсутствия знаний smile.gif
Правильную картину создать тяжелее всего, потому что способы обойти F5 есть. Легче назвать то, что неправильно, которые при минимальных посягательствах не смогут защитить от Ф5 для повторной отправки формы.
Я не уверен, что я знаю все способы обойти Ф5, но те, которые я знаю спокойно помогут обойти от такой "лже-защиты". Не зря же в условии стоит "защита от Ф5", а не "как очистить $_POST" rolleyes.gif

Спустя 1 час, 10 минут, 2 секунды (3.01.2012 - 07:29) GET написал(а):
inpost

Можно тогда прокомментировать почему не работает предложенный способ через редирект? Ну и что что $_POST очищается, мне кажется этого достаточно чтоб предотвратить повторную отправку данных.

Спустя 2 часа, 30 минут, 32 секунды (3.01.2012 - 10:00) Игорь_Vasinsky написал(а):
inpost

ну так по подробней: что за человек и какой вариант ты выбрал? и что за гнусные дела??

Спустя 2 часа, 16 минут, 28 секунд (3.01.2012 - 12:16) kovaldm написал(а):
На вскидку два варианта пришло в голову;

1. Редирект.
2.Использовать сессии:
session_start();
if(isset($_POST['text']) && empty($_SESSION['post']))
{
$res = mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_POST['text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
);

if($res)
$_SESSION['post'] = 1;
}

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

Спустя 1 час, 51 минута, 37 секунд (3.01.2012 - 14:08) Лена написал(а):

header("Location:" . $_SERVER['PHP_SELF']);
exit();

Физика процесса такая (на основе протоколов RFC). После сохранения данных в базе сервер вместо формирования отклика любой POST-запрос должен превратить в GET, если, конечно, нужно избежать повторной обработки POST-запроса. Сделать это он может только через редирект на ту ветвь скрипта, которая хранит состояние системы после POST-запроса.
Когда выполняется header("Location:"...) или header("refresh"...) броузер "забывает" про POST и в его истории сохраняется только GET-запрос.
Этот GET и будет выполнен при нажатии F5. Само собой, POST-обработка не повторится.
Исходя из описанной физики, мне кажется, альтарнатив здесь практически нет. Не считая, конечно, Ajax.
Нагружать базу всякими дополнительными хешами не стоит, когда много модулей, компонентов, блоков и т.д., для базы есть задачи и поважнее. Редирект можно сделать и с помощью JS, но мешать JS в php - дурной тон.

Спустя 1 час, 18 минут, 21 секунда (3.01.2012 - 15:26) inpost написал(а):
Опера => Общие настройки => Расширенные => Сеть => *Включить автоматическое перенаправление (снимаем галочку). + => Содержимое => *Включить JavaScript (снимаем галочку).
Теперь проверяем 2 простых способа редиректа на js+php. Открываем, отправляем, клацаем F5,F5,F5,F5. Проверять на своём сервере, чтобы никому ничего не ломать и нигде не спамить. Мы же хорошие люди.
Итого, очистка формы то работает, но считать это "адекватной защитой" от желания поклацать Ф5 не спасает. Замечу, что эту возможность даёт сам браузер, а не какие-то сторонние хакерские проги или приложения.

Парочку ответов были хороши в теме smile.gif

Спустя 13 минут, 43 секунды (3.01.2012 - 15:40) rooor написал(а):
отслеживать ASCII-код нажатой клавиши tongue.gif ) только я хз как это в php сделать)

Спустя 49 минут, 42 секунды (3.01.2012 - 16:30) Ser18 написал(а):
Редирект

Спустя 1 час, 16 минут, 36 секунд (3.01.2012 - 17:46) DySprozin написал(а):
Если я правильно понял вопрос, то
Header("Location: .");
Ну или если надо сообщение вывести, то
Header("Location: ?alert=23");

Спустя 10 минут, 54 секунды (3.01.2012 - 17:57) quickxyan написал(а):
ну у меня лично 2 варианта

1. Сразу после добавления сделать редирект (впринципе всегда так и делаю)

if(isset($_POST['text']))
{
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_POST['text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
);
header('location:index.php?added'); //что-то типа такого
}


2. Сессии.


session_start();

if(isset($_POST['text']))
{
if(!isset($_SESSION['text']) || $_SESSION['text'] != $_POST['text']){
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_POST['text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
);
$_SESSION['text'] = $_POST['text'];
}else{
echo 'Данные уже были добавлены раньше';
}
}



как-то так :)

Спустя 37 минут, 1 секунда (3.01.2012 - 18:34) Семён написал(а):
inpost
Мой вариант с доп. hidden инпутом с хешем вообще не рассматривал чтоли?
На этом принципе построены все формогенераторы в фреймворках.

Спустя 4 минуты, 20 секунд (3.01.2012 - 18:39) inpost написал(а):
Семён
А кто сказал, что я не рассматривал остальные? Я просто сказал то, что сразу очевидно является неправильным smile.gif Я не озвучивал анализ остальных способов, только 2 самых неправильных показал smile.gif

Спустя 2 минуты, 56 секунд (3.01.2012 - 18:41) Семён написал(а):
Ну помоему кроме: ничего не встречал.
1) Hash в hidden input и доп. проверкой на флуд последних поступивших данных (или капчи)
2) Ajax отправки данных с последующей проверкой на HTTP_X_REQUESTED_WITH и доп. проверкой на флуд последних поступивших данных
3) Банального редиректа

Спустя 26 минут, 11 секунд (3.01.2012 - 19:08) killer8080 написал(а):
inpost
наверно я уже опоздал (слишком много праздников навалилось user posted image ), но все равно пятак вставлю.
Цитата (inpost @ 2.01.2012 - 13:34)
Задание. Защита от F5:
К тебе пришел заказчик, сделай классный сайт, ты сел его делать, создал много модулей, компонентов, блоков, дошло дело до комментирования статей. Как лично ты обезопасишь скрипт от F5. У нас есть id_user,id_topic (или id_новости,блога) и вводимые данные юзером: "текст".

При таком раскладе только банальный редирект через http заголовки: location или refresh(если нужно вывести промежуточное сообщение), но если можно этот код дополнить, то я бы добавил в форму скрытый инпут с токен, в который писал бы рандомное число или микротайм, сохраняя попутно его в сессию. Перед вводом коммента сверял бы этот токен из ПОСТ и из сессии. Если совпали добавляем в базу, если нет, игнор. В случае успешного добавления, назначаем новый токен. Таким путем можно исключить повторное добавление в базу. Приблизительно так

session_start();

if(isset($_POST['text'], $_POST['token'], $_SESSION['token']) && $_POST['token'] == $_SESSION['token']){
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.mysql_real_escape_string($_POST['text'])."',
`id_user` = "
.(int)$id_user.",
`id_topic` = "
.(int)$id_topic."
"
);
}
$_SESSION['token'] = md5(microtime(1) . rand(0, 9999));

if(!empty($_POST)){
header("Location: ".$_SERVER['REQUEST_URI']);
die();
}
?>
<form action="" method="post">
<
textarea name="text"></textarea>
<
br />
<
input type="submit" />
<
input type="hidden" name="token" value="<?=$_SESSION['token']?>" />
</
form>

Спустя 8 минут, 53 секунды (3.01.2012 - 19:17) killer8080 написал(а):
Цитата (caballero @ 2.01.2012 - 19:11)
<meta http-equiv="refresh" content="0; url=index.php">
без Js

То же самое, что и заголовок location или refresh, который собственно и дублирует мета тег wink.gif

Спустя 4 минуты, 48 секунд (3.01.2012 - 19:21) killer8080 написал(а):
Цитата (inpost @ 3.01.2012 - 00:05)
Ну а то, что большинство ответит неправильно - это было очевидно, мне как раз нужны были эти неправильные ответы для своих гнусных целей

Пишешь диссертацию по психологии : "Влияние алкоголя на работоспособность программиста"
biggrin.gif biggrin.gif biggrin.gif

Спустя 24 минуты, 40 секунд (3.01.2012 - 19:46) v.ru.n32 написал(а):
ну как вариант добавить сессии или куки

if(isset($_POST['text']) && $_SESSION[че нить] == чиму нибудь)
{
mysql_query("
INSERT INTO `t_mess` SET
`text` = '".$_POST['text']."',
`id_user` = ".$id_user.",
`id_topic` = ".$id_topic."
");
$_SESSION[]=;
}

не так уж и рационально зато надежно!

Спустя 41 минута, 27 секунд (3.01.2012 - 20:27) Bustle написал(а):
Сгенерировать уникальный идентификатор и сохранить его в скрытом поле формы. Перед тем как обрабатывать форму проверяешь, не была ли уже представлена метка. Если была то генерируешь ошибку, иначе продолжаешь работу.

Спустя 46 минут, 4 секунды (3.01.2012 - 21:14) alexbel2404 написал(а):
редирект на эту же страницу подставив в урле какую-нибудь переменную, которая передаст скрипту результат обработки коммента, либо добавлять его через ajax)

Спустя 2 часа, 50 минут, 10 секунд (4.01.2012 - 00:04) freeze написал(а):
Свернутый текст

if(isset($_POST['text']))
{
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_POST['text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
);
header('Location: http://'. $_SERVER['HTTP_HOST']. '/'. $_SERVER['PHP_SELF']);
exit();
}

<form action="" method="post">
<textarea name="text" ></textarea>
<br />
<input type="submit" />
</form>


Пошел читать коменты:)

Спустя 12 часов, 41 минута, 48 секунд (4.01.2012 - 12:45) twin написал(а):
Вопрос некорректен, ибо то, что ты описал позже - уже не F5. С таким же успехом можно было приплести курл или вообще специально написанную флудилку.

Я допустим могу такой способ (он проще) в опере предложить. Жмешь отправить, потом назад по истории и опять отправить. Тоже простой редирект не работает. Простой редирект (в миру защита от F5) призван очистить форму, дабы уберечь юзера от досадных дублей. От хулиганов нужны совсем другие меры, о чем ты не ставил условий.

Если говорить о вандализме, то круче капчи пока не придумали. Ну можно еще форму прошить сессией, тоже полумера. А самый действенный способ - модерация.

Спустя 33 минуты, 13 секунд (4.01.2012 - 13:19) jalvar написал(а):
создал бы ещё поле по времени добавления. И сделал ограничение перед добавлением(сообщения, темы) 20-30 сек.

Спустя 4 часа, 36 минут, 2 секунды (4.01.2012 - 17:55) inpost написал(а):
twin
Есть 2 вопроса: как очистить форму, который не стоял!
А стоял четкий вопрос, человек делает определённые действия на сайте, а потом тычет F5 и создаёт дубли сообщений. Цель: недопустить дубли. Так что тут всё правильно было задано.
Стрелочка "вернуться назад" имеет тот же эффект, что и Ф5. Задачей стояло именно уберечь от вредителей (ЗАЩИТА), а не очистка переданных данных.

Где ниже? Я отправил форму, далее нажал Ф5. Всё честно, ничего из своего задания не нарушил.

Спустя 10 минут, 30 секунд (4.01.2012 - 18:05) GET написал(а):
inpost

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

Спустя 3 минуты, 21 секунда (4.01.2012 - 18:09) killer8080 написал(а):
A.B.C.
посмотри мой вариант. Он не только защищает от F5, но и от CSRF атак. wink.gif

Спустя 3 минуты, 19 секунд (4.01.2012 - 18:12) GET написал(а):
killer8080

точно...

Спустя 5 минут, 47 секунд (4.01.2012 - 18:18) twin написал(а):
Цитата (inpost @ 4.01.2012 - 14:55)
twin
Есть 2 вопроса: как очистить форму, который не стоял!
А стоял четкий вопрос, человек делает определённые действия на сайте, а потом тычет F5 и создаёт дубли сообщений. Цель: недопустить дубли. Так что тут всё правильно было задано.
Стрелочка "вернуться назад" имеет тот же эффект, что и Ф5. Задачей стояло именно уберечь от вредителей (ЗАЩИТА), а не очистка переданных данных.

Где ниже? Я отправил форму, далее нажал Ф5. Всё честно, ничего из своего задания не нарушил.

Исче раз.
Защита от F5, это защита от повтора, не более того. У меня, да и у многих, были ситуации, когда нажатие F5, или даже просто повторной отправки формы ентером (при определенных обстоятельствах) даже из безобидной админки, вызывал неприятный эффект повтора.
Это одно. Если это попытка вандалзма, так мы целый конкурс недавно проводили на эту тему, и ты был там судьёй. Ставь задачи четко. F5 это или вандализм.

Зря ловишь людей на подмене понятий. От F5 меня всегда спсал редирект. И не только меня. Если кто-то тебя тиранит вандализмом, это другое. Я написал (и это не секрет) возможные способы.

Иначе мы можем сейчас развить тему про отравку заголовков. Можно же и на уровне сервака порешать, но классика - не делать вывода до.

Спустя 27 минут, 12 секунд (4.01.2012 - 18:45) inpost написал(а):
twin
Не все участвовали в конкурсе. Всем кажется, что редирект помогает от Ф5. Вот и получается, те, кто ответили в теме, прочитали тему ещё раз и посмотрели отзывы других и раз и навсегда научатся правильно защищаться от такой простой и банальной вещи.
Банальный пример: админка, ты управляешь сайтом, в какой-то момент ты нажимаешь "добавить запись" и запрос отправляется на сервер, но из-за нагрузок он ответ тебе не присылает сразу. Тебе кажется, что сайт упал и жмёшь Ф5 ещё раз, на этот раз сервер возвращает ответ с заголовком редиректа. Смотришь, а у тебя уже 2 одинаковых записи из-за того, что сервер в какой-то момент просто подвис или ещё чего, но запрос твой получил. Так вот, это не вандализм, потому что твой браузер не получит ответ от сервера в течении 3-х минут и выдал ошибку, что "сервер не отвечает", хотя по факту создались дубли.
Нет никакого вандализма, зато есть факт появления дублей.

Спустя 1 час, 27 минут, 43 секунды (4.01.2012 - 20:13) Invis1ble написал(а):
inpost
Цитата
"добавить запись" и запрос отправляется на сервер, но из-за нагрузок он ответ тебе не присылает сразу. Тебе кажется, что сайт упал и жмёшь Ф5 ещё раз, на этот раз сервер возвращает ответ с заголовком редиректа. Смотришь, а у тебя уже 2 одинаковых записи

в нормальных браузерах вроде как есть фича - диалоговое окно с фразой типа: "Вы действительно хотите отправить данные еще раз?"
В целом полностью согласен с twin'ом, вопрос задан некорректно.

Спустя 11 минут, 59 секунд (4.01.2012 - 20:25) twin написал(а):
inpost
я один раз спорил на этом форуме за редирект. и был прав с одной стороны. потому что ие6 в некоторых версиях не сбрасывал пост простым редиректом. Я грешным делом подумал, что ты об этом. Но нет.

Еще раз. Задачу нужно ставить конкретно. F5 как таковая - вещь не страшная. Это штука, от которой можно предупредить здравомыслящего юзера. Если он лезит в настройки бразера, дабы навредить - он вандал. И с ним разговор иной.

В 99% случаев простого редиректа достаточно. А если имеет место вандализм - совсем другие методы.

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

Спустя 10 часов, 53 минуты, 3 секунды (5.01.2012 - 07:18) Dron19 написал(а):
Я бы сделал так

if(isset($_POST['text']))
{
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_POST['text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
);
header("Location: " . $_SERVER["PHP_SELF"] . "/");
}

Спустя 3 часа, 18 минут, 53 секунды (5.01.2012 - 10:37) SoMeOnE написал(а):
Только сейчас тему увидел...)
Пользуюсь редиректом, как учили здесь на форуме)

Спустя 11 минут, 57 секунд (5.01.2012 - 10:48) Игорь_Vasinsky написал(а):
Dron19
Цитата
header("Location: " . $_SERVER["PHP_SELF"] . "/");

а вдруг url не простой?
header("Location: " . $_SERVER["REQUEST_URI"]);

Спустя 46 минут, 8 секунд (5.01.2012 - 11:35) sebastjan написал(а):
Против такого вадализма можно использовать задержку времни несколько секунд.
А если поглубже копнуть то можно просто сравнивать отправленные сообщения, если одинаковые то не писать в БД и выводить юзеру сообщение что тема уже добавлена.


Спустя 9 минут, 45 секунд (5.01.2012 - 11:44) Nikitian написал(а):
Все комментарии приносить распечатанными с паспортом, принимать под опись и постить только главным админом под личную ответственность. Спамеры не пройдут.

Спустя 4 минуты, 17 секунд (5.01.2012 - 11:49) Michael написал(а):
Nikitian, верно говорит. Можно еще и деньги брать.

Спустя 9 минут, 42 секунды (5.01.2012 - 11:58) sebastjan написал(а):
Да уж.....
Наверное ленивый вандал будет замарачиваться и кнопать Ф5, другой просто напишет бот и заспамит по самое нехочу и рандомное число в сессии не поможет и сравнение сообщений не помжет, может только на уровне сервера немного защитится но и это не гарантия.
Если есть притендент с конкурентами которые хотят понизить доверие к сайту, только капча и модерация поможет.
Был такой ресурс webmascon.com - он вернее и сейчас есть, там был форум, достаточно популярный, всякие умники по валидность разглагольствовали и типо того спецы по вэб технологиям, года два назад его убили ботом , заспамили.
А владелец сайта продвинутый вэб мастер даже отключить не мог заспаменный форум, так и висел наверное больше пол года с дебильными сообщениями на английском , купить типа интим продукты, точно уже и не помню.

Спустя 17 минут, 43 секунды (5.01.2012 - 12:16) Игорь_Vasinsky написал(а):
ну. при регистрации чтоб обязаловом указывали кошельки WM - доступ на сайт только со включенным WM и авторизированным.

за каждый пост - списывать денюжку.


Спустя 51 секунда (5.01.2012 - 12:17) redreem написал(а):
да вообще можно много разных вариантов наворотить помимо редиректа. из своей практики скажу так - во многих случаях я не отправляю форму штатным сабмитом, а по сабмиту сначала вызываю какую-нибудь js-функцию - проверяю корректность введенного, формирую либо гет, либо пост формат для отсылки (зачастую жкверевским сериалайзом, ну или вручную). далее, если мы говорим чисто о пост-отправке, то php-обработчик может достаточно гибко все организовать - на первом проходе идет контроль корректности, и если что-то не так, то просто отдается сообщение об ошибке без всякого редиректа. если чел продолжает жать ф5, то ему будет просто постоянно слаться эта ошибка. если все корректно, то обработчик (это я говорю о своих вариантах) отдает флаг корректно принятых данных, а js-приемник уже по ситуации решает что делать дальше - в самом простом случае просто location.href... незнаю, я стараюсь избегать редиректа из php, незнаю точно почему, но мне как-то ненравится этот метод. какой-то он "топорный" чтоли. в общем я хочу сказать, что если повесить сабмит и контроль на js, то можно довольно гибко управлять отправкой и проблема с ф5 как-то сама собой отсутствует при этом.

Спустя 4 минуты, 3 секунды (5.01.2012 - 12:21) sebastjan написал(а):
Игорь_Vasinsky biggrin.gif
Так напиши статью, у тебя слог хороший.
Как делать правильно регистрацию и поставь свой номер кошелька в пример.
Найдутся умники копипаста и тебе денюжка будет biggrin.gif

Спустя 5 минут, 49 секунд (5.01.2012 - 12:27) sebastjan написал(а):
redreem Как правило об этом везде и говорят, всё что можно сделать на стороне клиента то и делают.
Я поддерживаю.

Спустя 2 часа, 28 минут, 17 секунд (5.01.2012 - 14:55) inpost написал(а):
Типичная реакция:
- Ты дурак
- Сам дурак

От неё не избавиться людям smile.gif Ещё раз повторюсь, есть вандал, который жмёт Ф5 постоянно, и есть ЗАЩИТА ОТ Ф5, о которой шла речь, читать надо внимательно как минимум заголовок.
Задание было такое, есть ситуация, в которой человек нажмёт Ф5 и отправит ещё раз данные (ВАНДАЛ, или дядя Петя, или хакер, не важно). Перед нами стоит заказчик, который чётко сформировал задание, ему нужна форма, и он знает, что если нажать Ф5, данные отправятся ещё раз в определённых случаях, задание звучит так: "обезопасить от данного действия". Это всё можно прочитать в задании, если почитать.
Вопрос только в лени. Менее опытные говорят редирект, более опытные придумывают нормальные способы защиты.

Представь на секундочку, пришел БИЛЛ ГЕЙТС и сказал, я хочу, чтобы на моём сайте нажимая Ф5 повторно данные не записывались. Ты делаешь редирект, а потом попытайся доказать Билл Гейтсу что твой метод рабочий, если он соберёт вокруг тебя МИЛЛИОН зрителей и нажмёт одну единственную кнопку "F5". Не прав будешь ИМЕННО ТЫ!

Ещё раз: написание спам-бота - ЭТО ХАКЕРСТВО, которое запрещено законом. Нажать Ф5 ещё раз - это обычное дело для работы браузера и отключение стандартного редиректа - опять же обычное дело. И если кто-то напишет свой коммент дважды - это не будет ни ВАНДАЛИЗМОМ, ни ХАКЕРСТВОМ, это будет всё в области закона, так вот от этого и была защита.


Собственно как я ранее и написал, нет смысла кому-то что-то доказывать, особенно зная самовлюблённость большинства программистов с опытом. Слушать будут только новички, и тема поднята для них. Я не могу объяснить, что не прав мой отец в определённых ситуациях, хотя это очевидно и жизнь говорит об этом. Что уж говорить о том, что методы программирования взрослых людей с огромным опытом, особенно тех, кто считает себя умнее меня, имея за спиной жизнь - неправильные?!

И не надо говорить, что вопрос поставлен не корректно, потому что есть люди, которые дали правильный ответ, значит они поняли и к данному заданию отнеслись как к вопросу на МИЛЛИОН $, а не как к пустому трёпу на форуме.

Спустя 20 минут, 44 секунды (5.01.2012 - 15:16) sebastjan написал(а):
inpost
Ну так всё правильно пишешь, никто вроде особо и не возражал, нормально кроме ридиректа использовать и проверку на стороне клиента.


Спустя 45 минут, 42 секунды (5.01.2012 - 16:01) killer8080 написал(а):
Цитата (sebastjan @ 5.01.2012 - 14:16)
нормально кроме ридиректа использовать и проверку на стороне клиента.

А смысл? Все проверки на стороне клиента делаются только с одной целью - улучшение юзабилити. Все вопросы в той, или иной степени связанные с безопасностью, решаются только на стороне сервера. Делать их на клиентской стороне просто бессмысленно.

Спустя 24 минуты, 1 секунда (5.01.2012 - 16:26) sebastjan написал(а):
Почему бесмысленно, если используются сесии для индификации, подделать форму проблемно.
Конечно не панацея но в реале каждый раз проверять на сервере правильно ли что то заполненно тоже не оптимально. Да и проверка на сервере не отменяется.

Спустя 3 минуты, 55 секунд (5.01.2012 - 16:29) inpost написал(а):
sebastjan
Сессия - это относится к серверу smile.gif К клиенту - JS.

Спустя 24 минуты, 19 секунд (5.01.2012 - 16:54) killer8080 написал(а):
sebastjan
Любые клиентские проверки на JS, работают только в том случае, если последний у юзера включен. Кто сказал что я обязан включать JS? Может я страдаю паранойей, и с включенным js по вебу не хожу biggrin.gif

Спустя 20 минут, 12 секунд (5.01.2012 - 17:14) redreem написал(а):
killer8080, автомобили не выпускают ориентируясь на психов, не оборачивают их резиновыми подушками, чтоб психам было удобно врезаться.

Спустя 4 минуты, 40 секунд (5.01.2012 - 17:19) inpost написал(а):
redreem
Подушка безопасности как раз для этого и существует, чтобы удобно было в аварии попадать. smile.gif

Спустя 8 минут, 9 секунд (5.01.2012 - 17:27) redreem написал(а):
"удобно"???

Спустя 2 минуты, 49 секунд (5.01.2012 - 17:30) inpost написал(а):
redreem
Не попадал в связи с тем, что нет своей машины. Но если человек живой, значит всё нормально. Это как экстрим, с верёвки (банджи) с моста спрыгивать, не будет безопасности - об землю харась!

Спустя 4 минуты, 42 секунды (5.01.2012 - 17:34) redreem написал(а):
ладно, мне вообще не понятно о чем тут спор в очередной раз. холивар одним словом

Спустя 3 минуты, 49 секунд (5.01.2012 - 17:38) inpost написал(а):
redreem
В том, что обвинили меня, что я не так задал вопрос! Вот я спорю, что вопрос задан верно smile.gif

Спустя 3 минуты, 45 секунд (5.01.2012 - 17:42) redreem написал(а):
аа. я не вчитывался кто там что писал чесно говоря. но перед своим вариантом ответа прочитал раза 3 твой вопрос. для себя я его понял так: "выскажитесь в свободной форме как контролировать случайное или преднамеренное удержание ф5". не более того. про хакеров, злоумышленников и прочих пиплов, заведомо предрасположенных использовать низкоуровневые методы я в вопросе явного уточнения не заметил.

Спустя 4 минуты, 3 секунды (5.01.2012 - 17:46) inpost написал(а):
redreem
Заказ был от заказчика, а заказчик врядли будет уточнять такие нюансы, он думает, что программисту это итак очевидно smile.gif

Спустя 3 минуты, 58 секунд (5.01.2012 - 17:50) redreem написал(а):
заказчику: данный вопрос лучше рассматривать как DDOS-защиту, а не как часть серверного скрипта сайта.

Спустя 40 минут, 8 секунд (5.01.2012 - 18:30) Dron19 написал(а):
Цитата (sebastjan @ 5.01.2012 - 08:35)
Против такого вадализма можно использовать задержку времни несколько секунд.
А если поглубже копнуть то можно просто сравнивать  отправленные сообщения, если одинаковые то не писать в БД и выводить юзеру сообщение что тема уже добавлена.

А если ты делаешь какой-нибудь чат и хочешь от ф5 избавиться, что бы одинаковые сообщения не плодили от одного пользователя, и с твоим алгоритмом как думаешь, что будет, если к примеру Маша пишет Саше привет и она еи в ответ пишет привет? ))))

Спустя 24 минуты, 42 секунды (5.01.2012 - 18:55) Winston написал(а):
Цитата (inpost @ 5.01.2012 - 16:30)
с верёвки (банджи) с моста спрыгивать

My dream smile.gif

Спустя 57 минут, 56 секунд (5.01.2012 - 19:53) Invis1ble написал(а):
inpost
Цитата
В том, что обвинили меня, что я не так задал вопрос! Вот я спорю, что вопрос задан верно

В твоем посте нет даже вопросительного знака. А фразы
Цитата
Защита от F5

и
Цитата
Как лично ты обезопасишь скрипт от F5.

воспринимается всеми по-разному. Если бы мне заказчик написал такое в ТЗ - я бы сначала уточнил, что конкретно он подразумевает под этим.
И еще: программист должен быть педантом, imho. И максимально точно и однозначно формулировать свои мысли.

Спустя 23 минуты, 41 секунда (5.01.2012 - 20:16) Bustle написал(а):
Но теперь то все поняли, чего хотел inpost. Так зачем продолжать эти религиозные войны? ph34r.gif

Спустя 21 минута, 54 секунды (5.01.2012 - 20:38) nugle написал(а):
Приветствую!
Может поздно, а может и нет
Когда я делал свой первый сайт, я просто брал и делал редирект на эту же страницу и всё...

Спустя 45 минут, 41 секунда (5.01.2012 - 21:24) killer8080 написал(а):
Цитата (Bustle @ 5.01.2012 - 19:16)
Но теперь то все поняли, чего хотел inpost. Так зачем продолжать эти религиозные войны?

Народу охота по холиварить laugh.gif

Спустя 5 минут, 43 секунды (5.01.2012 - 21:30) Игорь_Vasinsky написал(а):
ну раз так дело повернулось.. я бы

1. таймаут на любую запись в БД по session_id() секунды на 3-4
2. и потом header + exit


но если юзер захочет законным путём продублировать свой мессадж - то
4. сравнить текст + session_id с записью в БД (последней)


но мне не критично (4). может он - тупо хочет повторить свой вопрос.

Спустя 36 минут, 21 секунда (5.01.2012 - 22:06) Dron19 написал(а):
Цитата (Игорь_Vasinsky @ 5.01.2012 - 07:48)
Dron19
Цитата
header("Location: " . $_SERVER["PHP_SELF"] . "/");

а вдруг url не простой?
header("Location: " . $_SERVER["REQUEST_URI"]);

да ты прав wink.gif
Ну ты просто посмотри в какое время я это писал, при том, что я не проснулся так рано ohmy.gif

Спустя 16 минут, 22 секунды (5.01.2012 - 22:22) Игорь_Vasinsky написал(а):
да.. не.. нормально..я просто акцентировал.


вот мне сёдня пришло в голову: таймаут на любую запись в БД для определённого session_id - в принципе 3-4 сек это нормальный интервал для выявлени флудера

а js может прочитать keycode после записи и выдать алерт, например с последующим редиректом.

Спустя 56 минут, 35 секунд (5.01.2012 - 23:19) sebastjan написал(а):
Цитата (Dron19 @ 5.01.2012 - 15:30)
Цитата (sebastjan @ 5.01.2012 - 08:35)
Против такого вадализма можно использовать задержку времни несколько секунд.
А если поглубже копнуть то можно просто сравнивать  отправленные сообщения, если одинаковые то не писать в БД и выводить юзеру сообщение что тема уже добавлена.

А если ты делаешь какой-нибудь чат и хочешь от ф5 избавиться, что бы одинаковые сообщения не плодили от одного пользователя, и с твоим алгоритмом как думаешь, что будет, если к примеру Маша пишет Саше привет и она еи в ответ пишет привет? ))))

С чатом думаю аналогично проверка на одинаковые сообщения поможет.
Если ОНа пишет в ответ (привет) так как и ОН, это будет от другой сессии и это не блокировать.
Можно и на яваскрипт организовать проверку одинаковых паразитных сообщений и выкидывать Алерт с предупреждением.
Честно говоря чат никогда не писал, просто разглагольствую. Это скорее спецап по НОДЕ вопрос, но алгаритм наверное схожий, если подряд больше двух к примеру одинаковых сообщений с одной сессии то можно банить да и тема с задержкой по времени для чата тоже не очень подходит, тут наверное только жосткая проверка на одинаковые сообщения и их количество подойдут.
Про тех кто отключает яваскрипт - так это их проблемма, им тоже алер (вы должны включить яваскрип)
Есть те кто и флашь не устанавливают, это не значит что для них в AVI формате крутить ролик.







Спустя 26 минут, 58 секунд (5.01.2012 - 23:46) Invis1ble написал(а):
Цитата
Про тех кто отключает яваскрипт - так это их проблемма, им тоже алер (вы должны включить яваскрип)

laugh.gif

Спустя 2 минуты, 1 секунда (5.01.2012 - 23:48) Игорь_Vasinsky написал(а):
а чё мой последний пост игнорируете? как задумка?

Спустя 6 минут, 20 секунд (5.01.2012 - 23:54) sebastjan написал(а):
Цитата (Игорь_Vasinsky @ 5.01.2012 - 20:48)
а чё мой последний пост игнорируете? как задумка?

как для меня так это нормальный способ, правда для чатов немного не то.
Чатисты ОНИ такие, три секунды влом им ждать.
Наледники так сказать Феликса Железного- Чакисты.

Спустя 6 минут, 22 секунды (6.01.2012 - 00:01) Игорь_Vasinsky написал(а):
ohmy.gif а я не про чат.. комменты - тока... в остально дубляж допустим biggrin.gif

Спустя 2 дня, 13 часов, 29 минут, 16 секунд (8.01.2012 - 13:30) alex12060 написал(а):
Я не особо понял, зачем тебе это, и каковы правила использования примера, но все-же внесу пару строк от себя

Ну допустим, я ввел текст: Привет
Нажал сабмит и понеслась.


if(isset($_POST['text']))
{
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_POST['text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
) or die(mysql_error());
}


Ну во первых, самое простое это принудительно хедером выкинуть назад.


if(isset($_POST['text']))
{
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_POST['text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
) or die(mysql_error());

header('Location: '.$_SERVER['HTTP_REFERER']); // но думаю, лучше собрать адрес вручную, не суть
}


можно неявно защититься, с помощью проверки дубляжа:


if(isset($_POST['text']))
{

$res = mysql_query("
SELECT 1 FROM `t_mess`
WHERE `text` = '"
.$_POST['text']."' AND `id_user` = ".$id_user."
AND `id_topic` = "
.$id_topic) or die(mysql_error());

if (mysql_num_rows($res) == 0) {
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_POST['text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
) or die(mysql_error());
}
}



Но это не самый оптимальный вариант, особенно если будет много полей.

Можно еще яваскриптом, но его спокойно можно отрубить.

Ну более вариантов пока в голову не приходит.

Спустя 1 час, 43 минуты, 54 секунды (8.01.2012 - 15:14) twin написал(а):
Цитата (inpost @ 5.01.2012 - 11:55)
От неё не избавиться людям smile.gif Ещё раз повторюсь, есть вандал, который жмёт Ф5 постоянно, и есть ЗАЩИТА ОТ Ф5, о которой шла речь, читать надо внимательно как минимум заголовок.

Ах вот ты как. Хорошо. Где в твоем задании было про запрет перенаправления в браузере? Еще раз повторю, от штатной ситуации с F5 спасает обычный редирект. И не нужно из мухи лепить слона. Если задание стояло бы корректно (защита от флуда), предлагались бы иные решения.

Сперва нужно научиться ставить корректные задачи, потом пытаться ловить людей на незнании матчасти. У меня гдето тут на форуме висит класс загрузки изображений. Уже года два. Там есть пример использования. И в нем форма прошита сессией. Ну никогда у меня в голову не придет использовать такую прошивку на стороне админки - один головняк и глюки. А вот редирект от F5 стоит везде. Ибо мало ли кто ошибется. Это защита от случайностей. От дурака, если хочешь. Ты же хотел защиту от вандализма, а представил все это, как безабидный сброс POST

Спустя 15 минут, 2 секунды (8.01.2012 - 15:29) Vladimir67 написал(а):
Хм....
У меня стоит так
.......................
foreach ($data as $dt)
$dt = '';
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
break;

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

Спустя 4 часа, 53 минуты, 34 секунды (8.01.2012 - 20:22) inpost написал(а):
twin
Ты где-то видел, что я пытался "ловить людей на незнании матчасти"?
Ты слишком узко смотришь в этом вопросе. Ну сколько мне ещё повторять, что вопрос в том, чтобы кнопка Ф5 не создала дубль. Делай всё, что хочешь, но чтобы я, нажимая на кнопку Ф5, не смог повторно отправить данные. Главной особенностью было то, что я не спрашивал как правильно, а спросил коротко, как бы каждый из вас сделал бы в данной ситуации, если бы такую цель поставил бы КЛИЕНТ. А всё то, что это неправильно, и я тут несу истину, а кругом свиньи - не было в моих словах вообще.

Спустя 12 часов, 9 минут, 42 секунды (9.01.2012 - 08:32) twin написал(а):
Цитата (inpost @ 8.01.2012 - 17:22)
twin
Ты где-то видел, что я пытался "ловить людей на незнании матчасти"?

Вот:
Цитата
Проверить, сколько человек всё же справились бы с заданием  И, кстати, один очень умный человек меня разочаровал
Ну а то, что большинство ответит неправильно - это было очевидно, мне как раз нужны были эти неправильные ответы для своих гнусных целей
По крайней мере это на 99% истолковывается именно так. В отличие от.
Цитата
Ты слишком узко смотришь в этом вопросе. Ну сколько мне ещё повторять, что вопрос в том, чтобы кнопка Ф5 не создала дубль.

Теперь то зачем повторять, все уже свершилось. Ты добился своих гнусных целей biggrin.gif
Цитата
Делай всё, что хочешь, но чтобы я, нажимая на кнопку Ф5, не смог повторно отправить данные.
Так все-таки "нажимая на кнопку Ф5", или "отключив автоматическое перенаправление и нажимая кнопку Ф5"? Ты вот споришь до сих пор, считая, что в любой поставленной задаче нужно предусматривать все возникшие нюансы. Это здорово, я сам всегда об этом твердил. Но есть же пределы разумного. Если ты поставил вопрос так, как выше, то я на 100% могу сказать, что твоя защита не сработает. Выкладывай свой вариант и я точно так же покажу, что ты предусмотрел не все.

Спустя 29 минут, 13 секунд (9.01.2012 - 09:01) Эли4ка написал(а):
а если просто поставить каптчу?

Спустя 18 минут, 55 секунд (9.01.2012 - 09:20) Игорь_Vasinsky написал(а):
Эли4ка
а что капча меня за руку схватит - когда я полезу F5 нажимать?

Спустя 1 час, 42 минуты, 58 секунд (9.01.2012 - 11:03) SoMeOnE написал(а):
Игорь_Vasinsky
рекапча хватает...)))

Спустя 2 минуты, 51 секунда (9.01.2012 - 11:06) Игорь_Vasinsky написал(а):
ну что за мода готовое хватать. прям лего-программисты.

Спустя 5 часов, 7 минут, 50 секунд (9.01.2012 - 16:14) inpost написал(а):
twin
Я же ответил одному человеку, а не всем smile.gif Ок, в следующий раз буду в личку писать, чтобы не было всяких левых подозрений вроде "99% истолковывается именно так".
К тому же я не озвучил свои гнусные цели, поэтому неизвестно, зачем я это всё делал.



Спустя 3 минуты, 38 секунд inpost написал(а):
twin
К тому же если пробежаться по ответам, то видно и хеш-защита, и капча. Разве эти стандартные методы выше чем "пределы разумного"? Мне кажется наоборот, это более адекватные ответы.



Спустя 8 минут, 49 секунд inpost написал(а):
Игорь_Vasinsky
Ты попросил, чтобы не игнорировал я:

1. таймаут на любую запись в БД по session_id() секунды на 3-4
(у меня стоял тайм-аут около минуты, всё равно кто-то умудрился продублировать запись!).
2. и потом header + exit
(тоже было)

но если юзер захочет законным путём продублировать свой мессадж - то
4. сравнить текст + session_id с записью в БД (последней)
(В связи с особенностью вышеизложенного сайта, я так и реализовал в частном случае проблему. В других местах использовал другие способы).

А где пункт 3?! smile.gif

Спустя 37 минут, 41 секунда (9.01.2012 - 16:52) SoMeOnE написал(а):
Цитата (Игорь_Vasinsky @ 9.01.2012 - 08:06)
ну что за мода готовое хватать. прям лего-программисты.

Ну готовое не сразу хватал.
Во первых заказчик сказал что хочет ту капчу, которая на гугле. Так и сказал)))
При работе с ней обнаружил защиту от f5.

А во вторых, что плохого использовать готовые универсальные решение, там где это имеет место естественно ?)

Спустя 44 минуты, 48 секунд (9.01.2012 - 17:36) Игорь_Vasinsky написал(а):
а чем те таймаут на запись в БД не канает? админки ohmy.gif нахрена мне в админке защита от себя ph34r.gif

Спустя 1 час, 12 минут, 7 секунд (9.01.2012 - 18:48) killer8080 написал(а):
Цитата (SoMeOnE @ 9.01.2012 - 15:52)
А во вторых, что плохого использовать готовые универсальные решение, там где это имеет место естественно ?)

Рекапча - это сторонний ресурс. Нет ничего хорошего в том, что бы делать функционал своего сайта зависимым от чужого ресурса. Если их сервера задидосят, твой сайт ляжет вместе с ними wink.gif

Спустя 3 часа, 28 минут, 3 секунды (9.01.2012 - 22:16) inpost написал(а):
Игорь_Vasinsky
Да это тролль один. Обычно под анонимами троллит, а в этой теме закрыт доступ анонимам, вот он и создал акк для этого smile.gif Не обращай внимание на тех, кто будет автоматически баниться/удаляться.

Спустя 47 минут, 7 секунд (9.01.2012 - 23:04) SoMeOnE написал(а):
Цитата (killer8080 @ 9.01.2012 - 15:48)
Цитата (SoMeOnE @ 9.01.2012 - 15:52)
А во вторых, что плохого использовать готовые универсальные решение, там где это имеет место естественно ?)

Рекапча - это сторонний ресурс. Нет ничего хорошего в том, что бы делать функционал своего сайта зависимым от чужого ресурса. Если их сервера задидосят, твой сайт ляжет вместе с ними wink.gif

Ну не думаю, что серверы гугла ляжут. А во вторых не я же настоял на рекапче.
Я просто отметил, что приходилось ей единожды пользоваться. И отметил что она от f5 защищает...))) wink.gif

Спустя 8 часов, 39 минут, 2 секунды (10.01.2012 - 07:43) twin написал(а):
Цитата (inpost @ 9.01.2012 - 13:14)
К тому же если пробежаться по ответам, то видно и хеш-защита, и капча. Разве эти стандартные методы выше чем "пределы разумного"? Мне кажется наоборот, это более адекватные ответы.

Опять ты за свое. Ну нельзя так ставить вопрос, нельзя пытаться делать универсальных решений для всего. Вот прикинь ситуацию - комменты можно оставлять только из личного кабинета. Оправдано ли в этом случае применение капчи? А вот редирект вполне разумен. Хэш-защита, как ты её назвал, мне лично претит по моральным соображениям - с какого перепуга я не могу двух одинаковых комментов оставить? А тайм-аут вообще бесит. Это вынужденные меры и применять их нужно там, где горячий участок фронта. Ты же пытаешься уничтожить кнопку F5 как таковую, в любых её проявлениях.

Спустя 50 минут, 54 секунды (10.01.2012 - 08:34) NitroGenerate написал(а):
У меня ТТ, там такая же беда, в общем решил редиректом, а потом еще и дописал проверку по конкретному сообщению. Если уже есть такое сообщение в БД, ошибка.
Причем проверка будет по всем трем полям. Так как многие любят писать одно слово "Спасибо" в комментах к разным файлам.
Прежде чем проверять обрабатываем переменную в POSTe


Просмотрел некоторые ответы.
Считаю капчу в комментах - злом! Это отпугивает многих. И лично меня тоже.
Я хочу написать пару слов и тут на тебе, сиди глаза ломай и вводи символы...

Спустя 14 часов, 47 минут, 57 секунд (10.01.2012 - 23:21) Vladimir67 написал(а):
Цитата (NitroGenerate @ 10.01.2012 - 05:34)



Просмотрел некоторые ответы.
Считаю капчу в комментах - злом! Это отпугивает многих. И лично меня тоже.
Я хочу написать пару слов и тут на тебе, сиди глаза ломай и вводи символы...

Совершенно согласен!!!!!,
в особенности как обычный юзер.

Спустя 6 месяцев, 1 день, 1 час, 51 минута, 20 секунд (12.07.2012 - 01:13) 12345 написал(а):
Я делаю так:



if(isset($_POST['text']) and trim($_POST['text']) !== "" and $_SESSION['tehpod_text']!==$_POST['text'])
{
echo "Сообщение добавленно.<br><br>";
mysql_query("
INSERT INTO `t_mess` SET
`text` = '"
.$_POST['text']."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic."
"
);
$_SESSION['tehpod_text']=$_POST['text'];
}

<form action="" method="post">
<
textarea name="text"></textarea>
<
br />
<
input type="submit" />
</
form>


как вы смотрите на этот вариант?

Спустя 7 часов, 36 минут, 41 секунда (12.07.2012 - 08:50) killer8080 написал(а):
12345
хранить в сессии большие тексты не есть гуд.

Спустя 12 минут, 28 секунд (12.07.2012 - 09:02) 12345 написал(а):
ну а чтож тогда еще делать? надоже както защищатся от F5

Спустя 5 минут, 3 секунды (12.07.2012 - 09:07) killer8080 написал(а):
Цитата (12345 @ 12.07.2012 - 09:02)
ну а чтож тогда еще делать? надоже както защищатся от F5

в большинстве случаев достаточно обычного редиректа. Но при разработке кроме защиты от F5 нужно учитывать и другие важные моменты, например защита от CSRF, что не менее важно.

Спустя 32 секунды (12.07.2012 - 09:08) Pulse написал(а):
Проще всего постить ajax'ом, тогда по сути и от F5 защищаться не надо...

Спустя 1 минута, 50 секунд (12.07.2012 - 09:09) killer8080 написал(а):
Цитата (Pulse @ 12.07.2012 - 09:08)
Проще всего постить ajax'ом, тогда по сути и от F5 защищаться не надо...

а что мешает аяксом посылать многократно один и тот же запрос? wink.gif

Спустя 6 минут, 51 секунда (12.07.2012 - 09:16) Pulse написал(а):
Цитата
а что мешает аяксом посылать многократно один и тот же запрос? wink.gif

оно то да, ничего не мешает, но вопрос топика вроде как не в этом wink.gif

Спустя 3 минуты, 53 секунды (12.07.2012 - 09:20) killer8080 написал(а):
Цитата (Pulse @ 12.07.2012 - 09:16)
но вопрос топика вроде как не в этом

защита от F5 подразумевают защиту от случайной повторной отправки данных, в том числе и дважды щелкнуть по сабмиту smile.gif

Спустя 5 минут, 43 секунды (12.07.2012 - 09:26) Pulse написал(а):
Цитата (killer8080 @ 12.07.2012 - 09:20)
Цитата (Pulse @ 12.07.2012 - 09:16)
но вопрос топика вроде как не в этом

защита от F5 подразумевают защиту от случайной повторной отправки данных, в том числе и дважды щелкнуть по сабмиту smile.gif

Можно кнопку залочить после первого клика tongue.gif

Спустя 2 минуты, 38 секунд (12.07.2012 - 09:28) killer8080 написал(а):
Цитата (Pulse @ 12.07.2012 - 09:26)
Можно кнопку залочить после первого клика

я бы даже сказал - нужно, собственно это уже и будет защитой smile.gif
плюс очистить форму.

Спустя 4 минуты, 4 секунды (12.07.2012 - 09:33) Pulse написал(а):
Цитата (killer8080 @ 12.07.2012 - 09:28)
Цитата (Pulse @ 12.07.2012 - 09:26)
Можно кнопку залочить после первого клика

я бы даже сказал - нужно, собственно это уже и будет защитой smile.gif
плюс очистить форму.

Ну вот. Можно утверждать, как самое удобное и безкастыльное решение biggrin.gif

Спустя 6 минут, 59 секунд (12.07.2012 - 09:40) killer8080 написал(а):
Цитата (Pulse @ 12.07.2012 - 09:33)
Ну вот. Можно утверждать, как самое удобное и безкастыльное решение

Не вижу ничего кастыльного в редиректе.

Спустя 2 минуты, 51 секунда (12.07.2012 - 09:42) Pulse написал(а):
Цитата (killer8080 @ 12.07.2012 - 09:40)
Цитата (Pulse @ 12.07.2012 - 09:33)
Ну вот. Можно утверждать, как самое удобное и безкастыльное решение

Не вижу ничего кастыльного в редиректе.

Не очень удобно делать flash messages...

Спустя 4 минуты, 42 секунды (12.07.2012 - 09:47) killer8080 написал(а):
Цитата (Pulse @ 12.07.2012 - 09:42)
Не очень удобно делать flash messages...

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

Спустя 3 минуты, 40 секунд (12.07.2012 - 09:51) Pulse написал(а):
Цитата (killer8080 @ 12.07.2012 - 09:47)
Цитата (Pulse @ 12.07.2012 - 09:42)
Не очень удобно делать flash messages...

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

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

Спустя 2 часа, 37 минут, 55 секунд (12.07.2012 - 12:29) kamanch написал(а):
Как-то так :)

<?php
$error = array();
if(isset($_POST['text'])) {
include_once 'config.php';
$text=mysql_real_escape_string($_POST['text']);
if(strlen($text) > 0){
$id_user = 1;
$id_topic = 1;
$query="INSERT INTO `t_mess`
SET `text`= '"
.$text."',
`id_user` = "
.$id_user.",
`id_topic` = "
.$id_topic;
if(mysql_query($query)) {
header("Location: ".$_SERVER['PHP_SELF']);
} else {
$error[] = mysql_error();
}
}
else {
$error[] = "Не ввели текст";
}
}

?>

<form action="" method="post">
<
textarea name="text"></textarea>
<
br />
<
input type="submit" />
</
form>

<?php
if(count($error) > 0){
foreach ($error as $value) {
echo $value;
}
}

?>


С Новым Годом :)

Спустя 14 минут, 54 секунды (12.07.2012 - 12:44) GET написал(а):
h.n.81

и что это даст? Еще один POST не придет при нажатии на обновить?

Спустя 3 минуты, 50 секунд (12.07.2012 - 12:47) GET написал(а):
Мне кажется...вообще способа нормального кроме редиректа и последующего уничтожения сессии не может быть. Хром запоминает поля...какой-нибудь humen-simulator можно настроить на хром, который будет постоянно так делать.

Можно либо считать попытки....но все это ерунда, единственный способ - капча.

Спустя 26 секунд (12.07.2012 - 12:48) killer8080 написал(а):
h.n.81
после header("Location: ".$_SERVER['PHP_SELF']); нужно останавливать скрипт, нет смысла выводить контент вместе с заголовком редиректа. Плюс нельзя показывать ошибки mysql_error() посетителям, это уже можно расценивать как уязвимость. Но и опять же, о защите от CSRF никто не думает smile.gif

Спустя 39 секунд (12.07.2012 - 12:48) killer8080 написал(а):
Цитата (A.B.C. @ 12.07.2012 - 12:47)
Можно либо считать попытки....но все это ерунда, единственный способ - капча.

не единственный, и в данном случае вообще лишний.

Спустя 1 минута, 12 секунд (12.07.2012 - 12:50) kamanch написал(а):
Цитата (A.B.C. @ 12.07.2012 - 09:44)
h.n.81

и что это даст?  Еще один POST не придет при нажатии на обновить?

Нет, не придет.

Цитата
Плюс нельзя показывать ошибки mysql_error() посетителям

Это от лени написано было.

Обычно я пишу так: "DB Error Modul ... Code #..." ну и уникальный (мой) номер ошибки.
Потом легко искать по коду ошибки.

Спустя 9 минут, 20 секунд (12.07.2012 - 12:59) GET написал(а):
killer8080

Объясни почему капча лишний способ от редиректа?

Капча не сработала, обработчик POST не работает что не так?

Спустя 7 минут, 13 секунд (12.07.2012 - 13:06) killer8080 написал(а):
Цитата (h.n.81 @ 12.07.2012 - 12:50)
Обычно я пишу так: "DB Error Modul ... Code #..." ну и уникальный (мой) номер ошибки.
Потом легко искать по коду ошибки

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

Спустя 52 секунды (12.07.2012 - 13:07) dron4ik написал(а):
<?php header('Location: http://mesite.com'); ?>

Спустя 1 минута, 43 секунды (12.07.2012 - 13:09) killer8080 написал(а):
Цитата (A.B.C. @ 12.07.2012 - 12:59)
killer8080

Объясни почему капча лишний способ от редиректа?

Капча не сработала, обработчик POST не работает что не так?


У капчи другое назначение, она нужна чтоб отличить людей от ботов. Представь если бы тебе нужно было на каждый пост вводить капчу, как бы тебе это понравилось? Юзабельность не должна страдать smile.gif

Спустя 1 минута, 33 секунды (12.07.2012 - 13:10) GET написал(а):
killer8080

Да, точно ...я просто не понял о чем речь идет

Спустя 1 час, 34 минуты, 30 секунд (12.07.2012 - 14:45) justyork написал(а):
Редирект или nginx


_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.