Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Роботы не дают спокойно жить!
 
 автор: sasha12342   (23.10.2013 в 19:17)   письмо автору
 
 

Здравствуйте!
На одном из моих сайтах есть форма регистрации с системой подтверждения е-майл адреса. Когда пользователь переходит по ссылке для активации аккаунта то срабатывает следующий код:
$data = date('y,n,d:H,i,s');

$sql = mysql_query("SELECT id,log,pass FROM reg WHERE id = '$idlog'",$conect);
$row = mysql_fetch_array($sql);
    if ($row=='') {exit ("Система не может Вас распознать. Попробуйте зарегистрироваться повторно.");}
    $id=$row["id"];
    $log=$row["log"];
    $pass=$row["pass"];

if ($id=='') {exit ("Система не может Вас распознать. Попробуйте зарегистрироваться повторно.");}
if ($log=='') {exit ("Система не может Вас распознать. Попробуйте зарегистрироваться повторно.");}
if ($pass=='') {exit ("Система не может Вас распознать. Попробуйте зарегистрироваться повторно.");}

$sql2 = mysql_query("INSERT INTO reg2 (id,log,pass,data) Values ('$id','$log','$pass','$data')", $conect);

"$idlog" получаю методом GET из письма пользователя.

Итак, теперь самое интересное: когда регистрируется новый пользователь, то через определённое время в таблице "reg2" регистрируется, вернее вводит свои данные, какой-то робот, причём поле "data" имеет такой вид: 0000-00-00:00-00-00. То-есть, получается, что он вытаскивает каким-то образом новый "id" пользователя минуя этот кусок кода: "$data = date('y,n,d:H,i,s');"

Если честно, то я вообще не могу понять в чём дело...
Подскажите, кто знает, что я пропустил и как избавиться от этого робота-вредителя?
И почему, в ячейку "data" не заносится переменная "$data" если она объявлена выше?

  Ответить  
 
 автор: Sfinks   (23.10.2013 в 19:27)   письмо автору
 
   для: sasha12342   (23.10.2013 в 19:17)
 

> И почему, в ячейку "data" не заносится переменная "$data" если она объявлена выше?
Во первых, какой тип поля data в MySQL?
Но в любом случае не такой, какой вы ему подсовываете....
Если DATE, то должно быть:
$data = date('Y-m-d');
Если TIMESTAMP, то:
$data = date('Y-m-d H:i:s');

И зачем у вас все вот это?
if ($row=='') {exit ("Система не может Вас распознать. Попробуйте зарегистрироваться повторно.");} 
if ($id=='') {exit ("Система не может Вас распознать. Попробуйте зарегистрироваться повторно.");} 
if ($log=='') {exit ("Система не может Вас распознать. Попробуйте зарегистрироваться повторно.");} 
if ($pass=='') {exit ("Система не может Вас распознать. Попробуйте зарегистрироваться повторно.");} 

Не проше?
if (!$row || !$row["id"] || !$row["log"] || !$row["pass"]) {
  exit ("Система не может Вас распознать. Попробуйте зарегистрироваться повторно.");
}

  Ответить  
 
 автор: sasha12342   (23.10.2013 в 19:51)   письмо автору
 
   для: Sfinks   (23.10.2013 в 19:27)
 

Спасибо за оперативный ответ!

Тип поля: "datetime" но ведь, когда пользователь успевает подтвердить свою регистрацию, то в это поле переменная "$data" записывается без проблем: "2013-10-16 19:10:47"

if (!$row || !$row["id"] || !$row["log"] || !$row["pass"]) {
  exit ("Система не может Вас распознать. Попробуйте зарегистрироваться повторно.");
}


Согласен, поменяю! Но всё-же это не принципиально и не критично...

Меня больше волнует как он выслеживает свежие "id" и подставляет во вторую таблицу свои данные. Он себя чувствует как у себя дома, делает что хочет. Как от него избавиться? И как такое вообще возможно, с технической точки зрения?

  Ответить  
 
 автор: man1   (27.10.2013 в 19:53)   письмо автору
 
   для: sasha12342   (23.10.2013 в 19:17)
 

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

SQL-Injtection в запросе, ненужные проверки почти на каждой строчке и deprecated функции для работы с БД - полный набор, в общем.

>На одном из моих сайтах есть форма регистрации с системой подтверждения е-майл адреса. Когда пользователь переходит по ссылке для активации аккаунта то срабатывает следующий код:
Зачем такая логика работы скрипта? Для чего в таблице reg2 дублировать данные из таблицы reg?

Если это просто активация аккаунта, то логично в таблице reg сделать столбец is_active = 0 (по умолчанию, не активирован), например, и после перехода пользователя по ссылке активации изменять флаг на is_active = 1

Держите нормальный вариант:

<?php

/*
Дамп БД
CREATE TABLE IF NOT EXISTS `reg` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `login` varchar(40) NOT NULL,
  `password` varchar(40) NOT NULL,
  `data` varchar(255) NOT NULL,
  `is_active` int(11) NOT NULL DEFAULT '0',
  `datetime` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

 */

header('Content-Type: text/html; charset=utf-8');

$id = isset($_GET['id']) ? (int) $_GET['id'] : null;

$message_not_found 'Система не может Вас распознать. Попробуйте зарегистрироваться повторно.';
$message_already_activated 'Вы уже прошли процесс активации.';

$dbnx mysqli_connect('localhost''root''''reg');

if (!
$id) {
    exit(
$message_not_found);
}
$sql_query $dbnx->query("SELECT id, is_active FROM reg WHERE id = '$id'");

if (!
$sql_query->num_rows) {
    exit(
$message_not_found);
}

if (
$sql_query->fetch_object()->is_active) {
    exit(
$message_already_activated);
}

$sql_query $dbnx->query("UPDATE reg SET is_active = 1 WHERE id = '$id'");

?> 

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования