Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » как вставить защиту

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

mihas36



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть страница регистрации, нужно вставить защиту по ip, от повторной реги. подскажите кто знает. ато уже в базе замучился искать одинаковые  ip.  
 
<?PHP
$_OPTIMIZATION["title"] = "Регистрация";
$_OPTIMIZATION["description"] = "Регистрация пользователя в системе";
$_OPTIMIZATION["keywords"] = "Регистрация нового участника в системе";
 
if(isset($_SESSION["user_id"])){ Header("Location: /account"); return; }
?>
<div class="s-bk-lf">
    <div class="acc-title">Регистрация</div>
</div>
<div class="silver-bk"><div class="clr"></div>    
<?PHP
    
    # Регистрация
 
    if(isset($_POST["login"])){
    
    if(isset($_SESSION["captcha"]) AND strtolower($_SESSION["captcha"]) == strtolower($_POST["captcha"])){
    unset($_SESSION["captcha"]);
 
    $login = $func->IsLogin($_POST["login"]);
    $pass = $func->IsPassword($_POST["pass"]);
    $rules = isset($_POST["rules"]) ? true : false;
    $time = time();
    $ip = $func->UserIP;
    
    $email = $func->IsMail($_POST["email"]);
    $referer_id = (isset($_COOKIE["i"]) AND intval($_COOKIE["i"]) > 0 AND intval($_COOKIE["i"]) < 1000000) ? intval($_COOKIE["i"]) : 1;
    $referer_name = "";
    if($referer_id != 1){
        $db->Query("SELECT user FROM db_users_a WHERE id = '$referer_id' LIMIT 1");
        if($db->NumRows() > 0){$referer_name = $db->FetchRow();}
        else{ $referer_id = 1; $referer_name = "Admin"; }
    }else{ $referer_id = 1; $referer_name = "First"; }
    
        if($rules){
 
            if($email !== false){
        
            if($login !== false){
            
                if($pass !== false){
            
                    if($pass == $_POST["repass"]){
                        
                        $db->Query("SELECT COUNT(*) FROM db_users_a WHERE user = '$login'");
                        if($db->FetchRow() == 0){
                        
                        # Регаем пользователя
                        $db->Query("INSERT INTO db_users_a (user, email, pass, referer, referer_id, date_reg, ip)  
                        VALUES ('$login','{$email}','$pass','$referer_name','$referer_id','$time',INET_ATON('$ip'))");
                        
                        $lid = $db->LastInsert();
                        
                        $db->Query("INSERT INTO db_users_b (id, user, a_t, last_sbor) VALUES ('$lid','$login','1', '".time()."')");
                        
                        # Вставляем статистику
                        $db->Query("UPDATE db_stats SET all_users = all_users +1 WHERE id = '1'");
                        
                        echo "<center><b><font color = 'green'>Вы успешно зарегистрировались. Используйте форму слева для входа в аккаунт</font></b></center><BR />";
                        ?></div>
                        <div class="clr"></div>    
                        <?PHP
                        return;
                        }else echo "<center><b><font color = 'red'>Указанный логин уже используется</font></b></center><BR />";
                        
                    }else echo "<center><b><font color = 'red'>Пароль и повтор пароля не совпадают</font></b></center><BR />";
            
                }else echo "<center><b><font color = 'red'>Пароль заполнен неверно</font></b></center><BR />";
            
            }else echo "<center><b><font color = 'red'>Логин заполнен неверно</font></b></center><BR />";
 
        }else echo "<center><font color = 'red'><b>Email имеет неверный формат</b></font></center>";
 
        }else echo "<center><b><font color = 'red'>Вы не подтвердили правила</font></b></center><BR />";
    
        }else echo "<center><font color = 'red'><b>Символы с картинки введены неверно</b></font></center>";
 
    }
    
    
?>
 
 
<BR />
<form action="" method="post">
<table width="500" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td align="left" style="padding:3px;">Ваш псевдоним: <font color="#FF0000">*</font></td>
    <td align="left" style="padding:3px;"><input name="login" type="text" size="25" maxlength="10" value="<?=(isset($_POST["login"])) ? $_POST["login"] : false; ?>"/></td>
  </tr>
  <tr>
    <td colspan="2" align="left" style="padding:3px;">Поле псевдоним должно иметь от 4 до 10 символов (только англ. символы).</td>
    </tr>
<tr>
    <td align="left" style="padding:3px;">Email: <font color="#FF0000">*</font></td>
    <td align="left" style="padding:3px;"><input name="email" type="text" size="25" maxlength="50" value="<?=(isset($_POST["email"])) ? $_POST["email"] : false; ?>"/></td>
  </tr>
  <tr>
    <td colspan="2" align="left">&nbsp;</td>
    </tr>
  <tr>
    <td align="left" style="padding:3px;">Пароль: <font color="#FF0000">*</font></td>
    <td align="left" style="padding:3px;"><input name="pass" type="password" size="25" maxlength="20" /></td>
  </tr>
  <tr>
    <td colspan="2" align="left" style="padding:3px;">Поле Пароль должно иметь от 6 до 20 символов (только англ. символы).</td>
    </tr>
  <tr>
    <td align="left" style="padding:3px;">Пароль еще раз: <font color="#FF0000">*</font></td>
    <td align="left" style="padding:3px;"><input name="repass" type="password" size="25" maxlength="20" /></td>
  </tr>
  <tr>
    <td colspan="2" align="left" style="padding:3px;">Пароли должны совпадать.</td>
    </tr>
  <tr>
    <td colspan="2" align="left">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="2" align="left" style="padding:3px;">
    С <a href="/rules" target="_blank" class="stn">правилами</a> проекта ознакомлен(а) и принимаю: <input name="rules" type="checkbox" /></td>
  </tr>
<tr>
    <td align="left" style="padding:3px;">
    <a href="#" onclick="ResetCaptcha(this);"><img src="/captcha.php?rnd=<?=rand(1,10000); ?>"  border="0" style="margin:0;"/></a>
    </td>
    <td align="left" style="padding:3px;">Введите символы с картинки<input name="captcha" type="text" size="25" maxlength="50" /></td>
  </tr>
  <tr>
    <td colspan="2" align="left">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="2" align="center" style="padding:3px;"><input name="registr" type="submit" value="Зарегистрироваться" style="height: 30px;"></td>
  </tr>
</table>
</form>
 
</div>
<div class="clr"></div>    

Всего записей: 11 | Зарегистр. 28-12-2013 | Отправлено: 00:19 03-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mihas36

Цитата:
нужно вставить защиту по ip, от повторной реги

сохраняете в базу вместе с регистрационными данными и IP, а потом, при регистрации, проверяете.
 
только так вы убьете целые сети сидящие за NAT.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:46 03-02-2014
mihas36



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
 
Ну а я о чём. Только как это всё правильно оформить?

Всего записей: 11 | Зарегистр. 28-12-2013 | Отправлено: 01:30 05-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mihas36

Цитата:
Только как это всё правильно оформить?

со стороны клиентской формы - никак, там ничего не нужно.
более того, IP и так сохраняется - INET_ATON('$ip'))
 
все, что нужно, перед тем, как создавать новый аккаунт, проверить его и выдать сообщение, если совпадают
 
прямо за  
 if($pass == $_POST["repass"]){  
                         
можно сделать поиск по IP в базе пользователей и выдать сообщение, если он там уже есть.
 
$db->Query("SELECT COUNT(*) FROM db_users_a WHERE ip= INET_ATON('$ip')");  
if($db->FetchRow() != 0){  
  die('IP уже есть');
}
 
только глупо это и не нужно - в наше время сменить IP не проблема.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:42 05-02-2014 | Исправлено: Cheery, 01:56 05-02-2014
mihas36



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
 
Получается нет никакого способа?  
как же капы (буксы) с этим борятся? А я там рекламу частенько заказываю.
наверное я не за то дело взялся.
 
Спасибо за помощь!

Всего записей: 11 | Зарегистр. 28-12-2013 | Отправлено: 03:11 05-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mihas36

Цитата:
Получается нет никакого способа

способа для чего? ну вы можете проверять IP, но зачем? я же говорю - вы вырезаете тех, кто сидит за NAT (то есть использует один внешний IP), к тому можно найти прокси/VPN/Tor и зарегистрироваться с нового IP

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:18 05-02-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » как вставить защиту


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru