[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита от F5
S{oRpiO
Искал в поиске но так и не нашел собственно вопрос в топике кто как избавляется от лишних записей в базу при обновлении страницы?



Спустя 23 минуты, 12 секунд (20.08.2009 - 17:59) Gabriel написал(а):

Спустя 2 часа, 22 минуты, 55 секунд (20.08.2009 - 20:22) ANG3 написал(а):
Капчу ставь. CAPTCHA.ru wink.gif

Спустя 51 минута (20.08.2009 - 21:13) FatCat написал(а):
PHP
function create_guest_session() {
        global 
$DB$INFO$std$ibforums;
        

        
$DB->query("SELECT id, ip_address, running_time FROM ibf_sessions WHERE ip_address='".$this->ip_address."' AND member_name = ''");
        
        if ( 
$DB->get_num_rows() )
        {
            
$result $DB->fetch_row();
            
$this->session_id  $result['id'];
            
$this->last_click $result['running_time'];
            
$this->update_guest_session();
        }
        else
        {
            
// Создаем новую запись/сессию.
        
}
    }

Спустя 15 минут, 46 секунд (20.08.2009 - 21:29) Nikitian написал(а):
После добавления данных в базу делайте редирект на какую-либо другую страницу, либо на эту же, но с параметрами, запрещающими добавление данных.
PHP
header('Location: /');

Спустя 3 часа, 33 минуты, 52 секунды (21.08.2009 - 01:02) FatCat написал(а):
Цитата (Nikitian @ 20.08.2009 - 22:29)
После добавления данных в базу делайте редирект на какую-либо другую страницу

Зачем лишние перемещения пользователя? Опять же, поисковки редиректные страницы считают ошибками.

Поэтому я предложил привязать сессии к айпишникам. При запросе страницы айпишник проверяется на наличие в текущих сессиях. Если присутствует - апдейтится имеющаяся сессия. И лишь если айпишник новый, создается новая сессия.

Дополнительные плюсы:
1. Выставив время жизни сессии в 24 часа мы автоматически получаем статистику абсолютных юников за сутки. Очень полезная информация.
2. В сессии хранится время последнего апдейта (в моем примере это running_time), по разнице с текущим можно увидеть интервал времени между запросами страниц; чрезвычайно полезная информация для выявления и блокировки парсеров контента и прочих дерьмоботов.

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

Спустя 9 часов, 12 минут, 54 секунды (21.08.2009 - 10:15) Nikitian написал(а):
Поисковики не заполняют и не ходят по формам. А данные в базу в 90% случаев записываются через отправку формы.

Спустя 22 минуты, 43 секунды (21.08.2009 - 10:38) FatCat написал(а):
Nikitian
Согласен. Для отправки информации пользователем лучше пользовать редирект.

Спустя 3 дня, 11 часов, 32 минуты, 9 секунд (24.08.2009 - 22:10) S{oRpiO написал(а):
на самом деле это было нужно для админки

все остальные формы отправляются сразу на почту компании

Спустя 9 месяцев, 12 часов, 25 минут, 41 секунда (25.05.2010 - 10:36) Sender написал(а):
Защита через Java , (извините) я считаю бредом.

Вот что я придумал месяц назад для своей гостевой.

Метод будет работать если
1.используется PHP,
2. скрипт формы и скрипт "обработки формы" - 2 разных файла (ну или разные $_GET запросы)

Основан на сессиях:


<?  
/*в скрипт с Вашей формой: */
$_SESSION['otpravleno'] = "net";
?>


<?  
/*в скрипте который обрабатывает полученные данные формы:*/
if(!isset($_SESSION['otpravleno'])) { exit(); }
if(isset($_SESSION['otpravleno'])) { $otpravleno = $_SESSION['otpravleno']; if($otpravleno == "da"){
echo "Вы уже заполнили эту форму !"; exit(); } }
$_SESSION['otpravleno'] = "da";

?>

Не забудьте поставить
session_start();
в верху каждого скрипта где используются сессии.



Кому помогло, ставим мне плюсик в карме smile.gif

Спустя 12 минут, 41 секунда (25.05.2010 - 10:49) waldicom написал(а):
Цитата (Sender @ 25.05.2010 - 09:36)
Кому помогло, ставим мне плюсик в карме

А кому нет?
Что делать тому, кто не понял, для чего нужны условия (скрипт формы и скрипт "обработки формы" - 2 разных файла (ну или разные $_GET запросы)), для чего нужны сессии и почему не использовать всего один оператор вместо всего того, что Вы написали?

Спустя 15 минут, 21 секунда (25.05.2010 - 11:04) Sender написал(а):
скрипт формы это =

Например файл comment.php
<form name="moyaforma" method="post" action="write_message.php">
<b>
Ваше имя: </b>
<br><input
type="text" name="username" size="40" maxlength="20"> <br><br><b>Сообщение:</b><br>
<textarea
name="usertext" cols="70" rows="5" ></textarea><br>
<input
type="submit" value="Отправить">
<input
type="reset" value="Очистить">
</form>


Сюда надо вставить <? $_SESSION['otpravleno'] = "net"; ?>



скрипт "обработки формы" в данном случае - выше означенный файл write_message.php

<? /*  файл  write_message.php */ 


if(!isset($_SESSION['otpravleno'])) { exit(); }
if(isset($_SESSION['otpravleno'])) { $otpravleno = $_SESSION['otpravleno']; if($otpravleno == "da"){
echo "Вы уже заполнили эту форму !"; exit(); } }
$_SESSION['otpravleno'] = "da";

/* если всё1 нормально, то добавление записи в гостевую продолжится */

$username = $_POST['username'];
$usertext = $_POST['usertext'];

ну и так далее..

?>



PS 2 waldicom, если Вы можете предложить чтото лучше - давайте. На данный момент, я доволен своим скриптом.

Спустя 4 минуты, 56 секунд (25.05.2010 - 11:09) waldicom написал(а):
Не надо кричать, я прекрасно слышу.
Во-первых, С КАКОГО ПЕРЕПУГУ я должен использовать два разных файла, когда все прогрессивное человечесвто использует один?
Во-вторых, нахрена тут сессии?

Спустя 2 минуты, 21 секунда (25.05.2010 - 11:11) Basili4 написал(а):
Sender
а header("Location:"); Вы не используете по религиозным причинам ????????

Спустя 3 минуты, 6 секунд (25.05.2010 - 11:14) Sender написал(а):
Цитата (waldicom @ 25.05.2010 - 08:09)
Не надо кричать, я прекрасно слышу.
Во-первых, С КАКОГО ПЕРЕПУГУ я должен использовать два разных файла, когда все прогрессивное человечесвто использует один?
Во-вторых, нахрена тут сессии?

Я не использовал капс лок, и не раздражён. Я спокоен.

1. Почему 2 файла ? Для того чтобы было понятно. Кто хочет использовать один файл ( у меня на сайте тоже 1 файл ) пускай учится как пользоватся переменной $_GET

2. Сессии не принципиально, можно использовать и куки. Дело вкуса cool.gif

>> а header("Location:"); Вы не используете по религиозным причинам ????????
da

Спустя 4 минуты, 12 секунд (25.05.2010 - 11:18) waldicom написал(а):
Цитата (Sender @ 25.05.2010 - 10:14)
>> а header("Location:"); Вы не используете по религиозным причинам ????????
da

Может объясните, почему? Вроде нормальный способ...

Спустя 3 минуты, 26 секунд (25.05.2010 - 11:22) Basili4 написал(а):
Sender
Цитата (Basili4 @ 25.05.2010 - 08:11)
Сессии не принципиально, можно использовать и куки. Дело вкуса


Куки мммммммм.
Цитата (Basili4 @ 25.05.2010 - 08:11)
( у меня на сайте тоже 1 файл )


А как зовут ваш сайт Я тут навскидку придумал способ забить вашу базу. если вы для проверок используете куки.

Спустя 4 минуты, 54 секунды (25.05.2010 - 11:27) zarafar написал(а):
Цитата
А как зовут ваш сайт Я тут навскидку придумал способ забить вашу базу. если вы для проверок используете куки.


Basili4 если я ничего не путаю, то тема называется не "Защита от ботов", а "Защита от F5" smile.gif

Спустя 3 минуты, 28 секунд (25.05.2010 - 11:30) Basili4 написал(а):
waldicom

Незнал наверно посему велоспиеды и городил.
Сессию захламлял куками пользоватся предлагал.
Он бы еще сылбы оставлял а js нажимал её. Или вообще пользователя просил Будте так любезны нажмите сюда а то при обновлении страницы в базу еще раз запись попадет laugh.gif

Спустя 2 минуты, 33 секунды (25.05.2010 - 11:33) Basili4 написал(а):
zarafar

Я совершено не против. Но любая оплошность типа как использовать в приведеном выше примере способна принести очень много бед. Я лишь хотел подчеркуть этот факт.

Спустя 17 минут, 19 секунд (25.05.2010 - 11:50) Sender написал(а):
Для проверок использую только сессии. (весь сайт на них). Ссылку на сайт могу дать в ЛС.

Я изначально привёл пример на сессиях, так как с куками НЕ очень хорошо знаком, но так как Вы "засыпали" вопросами то я растерявшись, сказал что можно использовать и куки.

Теперь отвечу почему именно сессии:
Сама сессия (файл сессии с данными) хранится на сервере.

потому у клиента хранится только ID сессии, и всё что хранится в сессиях пользователь не может изменить сам (в отличии от кук).




header("Location:"); - можно использовать только если нету вверху <html> ( а у меня он есть )
http://php.net/manual/en/function.header.php
Поэтому, у меня так:

если коммент удачно добавился, то пишет, мол "Ваш коментарий успешно добавлен". и хтмл-овский рефреш на comment.php

В противном случае, пишет адекватную ошибку (заранее предусмотреную, а не php ошибку)

Спустя 8 минут, 1 секунда (25.05.2010 - 11:58) Basili4 написал(а):
Дружище а ты Колумб. Я спецально для тебя отруою тайну
<? А тут insert в таблу ?>


<html>
<meta
http-equiv="Refresh" content="10; URL=http://www.mysite/index.html">
<H1>
Ваша запись обновлена </H1>
</html>



И все проблемы за борт. Через 10 секунд совершится чудо переход на страницу
http://www.mysite/index.html На кой сесии лепить ????????

Спустя 5 минут, 55 секунд (25.05.2010 - 12:04) Sender написал(а):
Цитата (Sender @ 25.05.2010 - 08:50)
и хтмл-овский рефреш на comment.php


Цитата (Basili4 @ 25.05.2010 - 08:58)
<meta http-equiv="Refresh" content="10; URL=http://www.mysite/index.html">



Спустя 3 минуты, 31 секунда (25.05.2010 - 12:08) Basili4 написал(а):
Sender
Я тебе грю что надо не на comment.php сылатся который судя по всему коммент добовляет а сначала доболять а потом выводить сообщение и переходить.
Так мне кажется логичней а если не вставится запись ??????

Спустя 22 минуты, 32 секунды (25.05.2010 - 12:30) Sender написал(а):
Отвечаю в этой теме сегодня последний раз.

Раз интересно как у меня устроено:


Файл comment.php вся гостевая тут.
comment.php?addmessage добавление сообщения.

Порядок исполнения скрипта comment.php?addmessage ( он расположен вверху файла )

если чтото не устраивает то выводим сабж в чём дело и exit();

1. если айпи пользователя забанен то сабж и exit();
2. Проверка капчи
3. проверка на F5
4. разные проверки защиты
5. добавление комментария
6. Сообщение об успешном добавление коментария и хтмл рефреш
7. конечные теги хтмл
8. <? exit(); ?>

Спустя 1 час, 56 минут, 1 секунда (25.05.2010 - 14:26) twin написал(а):
exit в боевом скрипте юзеру... Да Вы, батенька, гурман...

Потом,
Цитата
потому у клиента хранится только ID сессии, и всё что хранится в сессиях пользователь не может изменить сам (в отличии от кук).
я бы не был столь категоричным в выводах. Кроме того, это лишняя нагрузка.

header("Location:"); - можно использовать только если нету вверху <html> ( а у меня он есть )

Это тоже не факт, хотя больше говорит о неверной компановке скрипта.

Цитата
В противном случае, пишет адекватную ошибку (заранее предусмотреную, а не php ошибку)

А данные в форму возвращаются? Если что то случилось, мне сообщение придется переписывать заново?

Стоит все-таки прислушаться к советам, ведь дело говорят.

Спустя 2 года, 23 дня, 19 часов, 38 минут, 55 секунд (19.06.2012 - 10:05) Игорь_Vasinsky написал(а):
Цитата
А данные в форму возвращаются? Если что то случилось, мне сообщение придется переписывать заново?


ну хром например в истории хранит данные

а так

<input type="text" value="<?=isset($_POST['text']) ? $_POST['text'] : null;?>">

Спустя 1 час, 2 минуты, 22 секунды (19.06.2012 - 11:07) twin написал(а):
Хром с его шпионскими наклонностями фтопку.)))

А вопрос надо читать, прежде чем некроманией заниматься.
Цитата
Порядок исполнения скрипта comment.php?addmessage ( он расположен вверху файла )

если чтото не устраивает то выводим сабж в чём дело и exit();

Спустя 1 час, 13 минут, 53 секунды (19.06.2012 - 12:21) Игорь_Vasinsky написал(а):
Свернутый текст
Цитата
Хром с его шпионскими наклонностями фтопку.)))

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

Спустя 3 часа, 12 минут, 43 секунды (19.06.2012 - 15:34) killer8080 написал(а):
Игорь_Vasinsky
Во раскопал biggrin.gif
Кстати, почему то никто не вспомнил о защите от CSRF атак smile.gif
Быстрый ответ:

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