Помогите прикрутить Антифлуд!

221
.
Всем доброго дня. Соорудил небольшой скриптик отправки юзерами сообщений на емейл, вобщем то все работает,но хочу поставить защиту от флуда и ничего не получается. С некоторых браузеров,к примеру написал сообщение ввел каптчу адрес - отправил его,да,и тут же нажимаешь кнопку в браузере "назад"(открывается предыдущая страница с данными в формах) и нажимаешь кнопку формы "отправить" - и хоть и высвечивается ошибка что код с каптчи не верен но сообщение отправляется! И так можно до бесконечности, то есть кнопка "назад" и кнопка "отправить" - то есть получается флуд. Пожалуйста помогите мне доделать этот файл чтобы можно было не бояться за флуд или спам из-за этого скрипта. Вот сам файл:
Прикрепленные файлы:
.
BaikerZ (24.03.2013 / 12:30)
Всем доброго дня. Соорудил небольшой скриптик отправки юзерами сообщений на емейл, вобщем то все работает,но хочу поставить защиту от флуда и ничего не получается. С некоторых браузеров,к примеру напи
<?php

define('_IN_JOHNCMS', 1);

require('../incfiles/core.php');
$headmod = 'email';
require('../incfiles/head.php');
$lng_reg = core::load_lng('registration');

if (isset($_SESSION['ref']))
    unset($_SESSION['ref']);

if (!$user_id){
$_SESSION['flood'] = $time;
}else{
mysql_query("UPDATE `users` SET `lastpost` = '" . $time . "'WHERE `id` = '" . $user_id . "' ");
}

$captcha = isset($_POST['captcha']) ? trim($_POST['captcha']) : NULL;

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

$error = array();

// Проверка кода CAPTCHA
if (!$captcha || !isset($_SESSION['code']) || mb_strlen($captcha) < 4 || $captcha != $_SESSION['code']){
$error['captcha'] = $lng['error_wrong_captcha'];
unset($_SESSION['code']);
}else{
    unset($_SESSION['code']);
    $flood = functions::antiflood ();
if ( $flood )
$error[] = 'Флуд!' . ' ' . $flood . '&#160;' . 'секунд';

$to = $_POST [ 'to' ];
$ot = $_POST [ 'ot' ];
$subj = $_POST [ 'subj' ]; 
$mess = $_POST [ 'mess' ];
$subj = " $ot "; 
$headers= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=utf-8 \r\n";
$headers .= "From: <site@briliantik.com> \r\n";

if(empty( $to ) or empty( $ot ) or empty( $subj ) or empty( $mess ) or empty( $captcha ) or empty( $headers )) 
{
echo '<div class="rmenu" style="text-align: center"><b>Вернитесь и Заполните все поля</b>
<b>Письмо не отправлено</b></div>';
}else{
mail ( $to , $subj , $mess , $headers , "From:" . $ot );
echo '<div class="menu" style="text-align: center"><b>Ваше Письмо отправлено</b></div>'; 

}
}

}

if(!$user_id){
echo '<div class="phdr" align="center">Отправка Письма на Емейл</div>'; 
echo 'Ошибка'; 
}else{
echo '<div class="phdr" align="center">Отправка Письма на Емейл</div>'; 

echo '<div class="menu">'; 

    echo '<form action="index.php" method="post">' .  
    '<b>Кому:</b>
<input type="text" name="to" />
' .   
    '<b>Ваше Имя и Фамилия:</b>
<input type="text" name="ot" />
' .  
    '<b>Текст:</b>
<textarea name="mess" value="' . $flood . '"></textarea>
' .  
    '
<big>' . $lng_reg['captcha'] . '</big>
' .
    '<img src="../captcha.php?r=' . rand(1000, 9999) . '" alt="' . $lng_reg['captcha'] . '"  />
' .
    (isset($error['captcha']) ? '<span class="red"><small>' . $error['captcha'] . '</small></span>
' : '') .
    '<input type="text" size="5" maxlength="5"  name="captcha" ' . (isset($error['captcha']) ? ' style="background-color: #FFCCCC"' : '') . '/>
' .
    '<small>' . $lng_reg['captcha_help'] . '</small>
' .
    '<input type="submit" name="go" value="Отправить" /></form>'; 

echo '</div>'; 
 
}

require_once ("../incfiles/end.php");

?>
.
Энштеин, Спасибо твой код очень помог! Только что то не то все равно блин... Получается так что пользователь может отсылать неограниченное число писем на мыло,гораздо с меньшей скоростью теперь,но все же может. Я вот думаю,а если пользователь попадется нехороший все же и просто тупо будет хотя бы рекламу рассылать с этого скрипта. Этот скрипт будет только для зарегистрированных пользователей, можно как то сделать ограничение на отправку писем,допустим 20 писем в сутки?
.
BaikerZ (24.03.2013 / 13:13)
Энштеин, Спасибо твой код очень помог! Только что то не то все равно блин... Получается так что пользователь может отсылать неограниченное число писем на мыло,гораздо с меньшей скоростью теперь,но вс
Можно, в таблице пользователей добавь поле например count_mail и при отправке письма увеличивай это поле на 1, при достижении ограничения выводить пользователю ваш лимит превышен. Ну или пиши отлеьный антифлуд, например отправка раз в 20-30 минут.
.
BaikerZ, И еще совет, не зациеливайся на спаме(рекламе) если кто то захочет прорекламиться то он не станет регаться у тебя чтобы разослать всем спам, ему проще самому поставить скрипт спамера по емайлам и все.
Да и еще, если даже твоих пользователей проспамят то это с одной сторонеы к лучшему, те кто уйдет это пустыфшки(пользователи от которых нету толка) а остануться самые лучшие, итог с 10 хороших ты возмешь больше пользы чем со 100 пустышек.
.
Энштеин (24.03.2013 / 13:23)
Можно, в таблице пользователей добавь поле например count_mail и при отправке письма увеличивай это поле на 1, при достижении ограничения выводить пользователю ваш лимит превышен. Ну или пиши отлеьный
Было бы здорово задействовать базу. Поле такое я смогу в базе создать,только каким оно должно быть как lastpost ? А вот с выводом лимита юзеру - вряд ли один разберусь.
.
BaikerZ (24.03.2013 / 13:26)
Было бы здорово задействовать базу. Поле такое я смогу в базе создать,только каким оно должно быть как lastpost ? А вот с выводом лимита юзеру - вряд ли один разберусь.
Учись!
.
BaikerZ
Ребят,помогите пожалуйста сделать ограничение на отправку писем, поле "email_post" я создал в таблице "users" ведущее счет отправленных юзером сообщений,но правильно установить команду не смог,максимум чего добился это если число писем равно лимиту то в базе они больше не считаются,но отправляются все равно. Чистку раз в сутки я сделаю через CRON. Как сделать так чтобы юзеру открывалась страница ошибки если у него достигнут лимит? Помогите пожалуйста. Вот файл:
Прикрепленные файлы:
Всего: 8