X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Не обрабатывется MD5
Rinat1994
Rinat1994
Topic Starter сообщение 21.6.2012, 7:59; Ответить: Rinat1994
Сообщение #1


Есть проблемка
Короче когда на локалке регистрируюсь не работает передача password, просто пустая строка идет,
А когда на сервер в инете ставил там обработка и передача идет но уже тупо без шифрования,

# phpMyAdmin SQL Dump
# version 2.5.6
# http://www.phpmyadmin.net
#
# Хост: localhost
# Время создания: Авг 09 2009 г., 20:22
# Версия сервера: 3.23.53
# Версия PHP: 4.3.6
#
# БД : `mysql`
#
# --------------------------------------------------------
#
# Структура таблицы `messages`
#
CREATE TABLE `messages` (
  `id` int(9) NOT NULL auto_increment,
  `author` varchar(15) NOT NULL default '',
  `poluchatel` varchar(15) NOT NULL default '',
  `date` date NOT NULL default '0000-00-00',
  `text` text NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=8;
#
# Дамп данных таблицы `messages`
#

# --------------------------------------------------------
#
# Структура таблицы `oshibka`
#
CREATE TABLE `oshibka` (
  `ip` varchar(12) NOT NULL default '',
  `date` datetime NOT NULL default '0000-00-00 00:00:00',
  `col` int(1) NOT NULL default '0'
) TYPE=MyISAM;
#
# Дамп данных таблицы `oshibka`
#

# --------------------------------------------------------
#
# Структура таблицы `users`
#
CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `login` varchar(15) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `avatar` varchar(255) NOT NULL default '',
  `email` varchar(255) NOT NULL default '',
  `activation` int(1) NOT NULL default '0',
  `date` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=41;
#
# Дамп данных таблицы `users`
#


reg.php

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Регистрация на сайте StopFace.ru</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script src="js/jquery-1.7.2.min.js"></script>
<script src="js/lightbox.js"></script>
<link href="css/lightbox.css" rel="stylesheet" />
<script type="text/javascript" src="js/zoom.js"></script>
<script type="text/javascript" src="js/ajaxupload.3.5.js" ></script>

<script>
    $(document).ready(function(){
    $('#login-trigger').click(function(){
     $(this).next('#login-content').slideToggle();
     $(this).toggleClass('active');    
    
     if ($(this).hasClass('active')) $(this).find('span').html('&#x25B2;')
      else $(this).find('span').html('&#x25BC;')
     })
    });
</script>
</head>
<body>
<div id="wrapper">
<div id="header_mini">
     <div id="logo">
         <a href="index.php" class="logo"></a>
        </div>
        <div id="top_menu1">
          <div id="top_menu">
              <ul>
               <li><a href="photo.php">Добавить фото</a></li>
                  <li><a href="top100.php">ТОП 100</a></li>
              </ul>
          </div>
<div id="forma">
        <nav>
<ul>
  <li id="login">
   <a id="login-trigger" href="#">
    Войти
   </a>
   <div id="login-content">
    <form action="testreg.php">
     <fieldset id="inputs">
      <input id="username" type="login" name="Login" placeholder="Логин" required>  
      <input id="password" type="password" name="Password" placeholder="Пароль" required>
     </fieldset>
     <fieldset id="actions">
      <input type="submit" id="submit" value="Войти">
      <label><input type="checkbox" checked="checked"> Запомнить меня</label>
     </fieldset>
    </form>
   </div>                    
  </li>
  <li id="signup">
   <a href="reg.php">Регистрация</a>
  </li>
</ul>
</nav>
</div>
      
        </div>
        <div id="clear"></div>
      
    </div>
    <div id="content">
     <div id="forms_reg">
         <h1>Регистрация</h1>
            <table cellpadding="0" cellspacing="10" border="0">
             <form action="save_user.php" method="post" enctype="multipart/form-data">
    <tr>
     <td><label><span style="color:red;">*</span> Логин:</label></td>
     <td><input name="login" type="text" size="15" maxlength="15"></td>
                </tr>
              
  <!-- В текстовое поле (name="login" type="text") пользователь вводит свой логин -->
    <tr>
     <td><label><span style="color:red;">*</span> Пароль:</label></td>
     <td><input name="password" type="password" size="15" maxlength="15"></td>
    </tr>
              
  <!-- В поле для паролей (name="password" type="password") пользователь вводит свой пароль -->
    <tr>
     <td><label><span style="color:red;">*</span> E-mail:</label></td>
     <td><input name="email" type="text" size="15" maxlength="15"></td>
    </tr>
              
  <!-- Вводим е-майл -->
  
    <tr>
     <td><label>&nbsp;&nbsp;Выберите ваше изображение: <br></label></td>
     <td><input type="FILE" name="fupload"></td>
    </tr>
                <br>
  <!-- В переменную fupload отправится изображение, которое выбрал пользователь. -->
    <tr>
                 <td colspan="2"><label><span style="color:red;">*</span> Введите код с изображения:</label></td>
    </tr>
    
                    <tr>
                     <td colspan="2"><img src="code/my_codegen.php"></td>
     </tr>
                    <tr>
                     <td colspan="2"><input type="text" name="code" style="width:138px;"></td>
                   </tr>
  <!-- В code/my_codegen.php генерируется код и рисуется изображение -->
     <tr>
      <td colspan="2"><input type="submit" name="submit" value="Зарегистрироваться"
                        style="background:#95b3ce; border:1px solid #6f8aa2;
                        color:#FFF; font-size:14px; font-family:Arial, Helvetica, sans-serif; width:165px;"></td>
     <!-- Кнопочка (type="submit") отправляет данные на страничку save_user.php  -->
     </tr>
   </form>
  <tr>
        <td colspan="2">
        <span style="color:#9f1919; font-size:12px; font-family:Arial, Helvetica, sans-serif;">
        <br>
        * - Надписи помеченные звечдочкой обязательны к заполнению.
        </span>
        </td>
        </tr>
        </table>
        </div>

    </div>
    
    <div id="footer">
     <div id="footer_menu">
         <ul>
             <li><a href="#">Главная</a></li>
                <li><a href="#">Добавить фото</a></li>
                <li><a href="#">ТОП 100</a></li>
            </ul>
        </div>
        <div id="copy">
   © 2012 <a href="index.php">StopFace.ru</a>. Все права защищены.
        </div>
    </div>
</div>
</body>
</html>



save_user.php
<?php
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
//заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
if (isset($_POST['code'])) { $code = $_POST['code']; if ($code == '') { unset($code);} } //заносим введенный пользователем защитный код в переменную $code, если он пустой, то уничтожаем переменную
if (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') { unset($email);} } //заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную

if (empty($login) or empty($password)or empty($code) or empty($email)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!"); //останавливаем выполнение сценариев
}
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) //проверка е-mail адреса регулярными выражениями на корректность
{exit ("Неверно введен е-mail!");}

function generate_code() //запускаем функцию, генерирующую код
{
              
    $hours = date("H"); // час      
    $minuts = substr(date("H"), 0 , 1);// минута
    $mouns = date("m");    // месяц            
    $year_day = date("z"); // день в году
    $str = $hours . $minuts . $mouns . $year_day; //создаем строку
    $str = md5(md5($str)); //дважды шифруем в md5
$str = strrev($str);// реверс строки
$str = substr($str, 3, 6); // извлекаем 6 символов, начиная с 3
// Вам конечно же можно постваить другие значения, так как, если взломщики узнают, каким именно способом это все генерируется, то в защите не будет смысла.
    $array_mix = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
    srand ((float)microtime()*1000000);
    shuffle ($array_mix);
//Тщательно перемешиваем, соль, сахар по вкусу!!!
    return implode("", $array_mix);
}
function chec_code($code) //проверяем код
{
    $code = trim($code);//удаляем пробелы
    $array_mix = preg_split ('//', generate_code(), -1, PREG_SPLIT_NO_EMPTY);
    $m_code = preg_split ('//', $code, -1, PREG_SPLIT_NO_EMPTY);
    $result = array_intersect ($array_mix, $m_code);
if (strlen(generate_code())!=strlen($code))
{
    return FALSE;
}
if (sizeof($result) == sizeof($array_mix))
{
    return TRUE;
}
else
{
    return FALSE;
}
}
// после сравнения проверяем, пускать ли пользователя дальше или, он сделал ошибку, и остановить скрипт
if (!chec_code($_POST['code']))
{
exit ("Вы ввели неверно код с картинки."); //останавливаем выполнение сценариев
}

//если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);
//удаляем лишние пробелы
$login = trim($login);
$password = trim($password);

// дописываем новое********************************************
//добавляем проверку на длину логина и пароля
if (strlen($login) < 3 or strlen($login) > 15) {
exit ("Логин должен состоять не менее чем из 3 символов и не более чем из 15."); //останавливаем выполнение сценариев
}
if (strlen($password) < 3 or strlen($password) > 15) {
exit ("Пароль должен состоять не менее чем из 3 символов и не более чем из 15."); //останавливаем выполнение сценариев
}
if (empty($_FILES['fupload']['name']))
{
//если переменной не существует (пользователь не отправил изображение),то присваиваем ему заранее приготовленную картинку с надписью "нет аватара"
$avatar = "avatars/net-avatara.jpg"; //можете нарисовать net-avatara.jpg или взять в исходниках
}
else
{
//иначе - загружаем изображение пользователя
$path_to_90_directory = 'avatars/';//папка, куда будет загружаться начальная картинка и ее сжатая копия

if(preg_match('/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))//проверка формата исходного изображения
  {
    
  $filename = $_FILES['fupload']['name'];
  $source = $_FILES['fupload']['tmp_name'];
  $target = $path_to_90_directory . $filename;
  move_uploaded_file($source, $target);//загрузка оригинала в папку $path_to_90_directory
if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
$im = imagecreatefromgif($path_to_90_directory.$filename); //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}
if(preg_match('/[.](PNG)|(png)$/', $filename)) {
$im = imagecreatefrompng($path_to_90_directory.$filename);//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}

if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
  $im = imagecreatefromjpeg($path_to_90_directory.$filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}

//СОЗДАНИЕ КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ ВЗЯТО С САЙТА www.codenet.ru
// Создание квадрата 90x90
// dest - результирующее изображение
// w - ширина изображения
// ratio - коэффициент пропорциональности
$w = 150;  // квадратная 90x90. Можно поставить и другой размер.
// создаём исходное изображение на основе
// исходного файла и определяем его размеры
$w_src = imagesx($im); //вычисляем ширину
$h_src = imagesy($im); //вычисляем высоту изображения
         // создаём пустую квадратную картинку
         // важно именно truecolor!, иначе будем иметь 8-битный результат
         $dest = imagecreatetruecolor($w,$w);
         // вырезаем квадратную серединку по x, если фото горизонтальное
         if ($w_src>$h_src)
         imagecopyresampled($dest, $im, 0, 0,
                          round((max($w_src,$h_src)-min($w_src,$h_src))/2),
                          0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
         // вырезаем квадратную верхушку по y,
         // если фото вертикальное (хотя можно тоже серединку)
         if ($w_src<$h_src)
         imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
                          min($w_src,$h_src), min($w_src,$h_src));
         // квадратная картинка масштабируется без вырезок
         if ($w_src==$h_src)
         imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
  
$date=time(); //вычисляем время в настоящий момент.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы у аватаров не было одинаковых имен.
//почему именно jpg? Он занимает очень мало места + уничтожается анимирование gif изображения, которое отвлекает пользователя. Не очень приятно читать его комментарий, когда краем глаза замечаешь какое-то движение.
$avatar = $path_to_90_directory.$date.".jpg";//заносим в переменную путь до аватара.
$delfull = $path_to_90_directory.$filename;
unlink ($delfull);//удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было - получить миниатюру.
}
else
         {
   //в случае несоответствия формата, выдаем соответствующее сообщение
        
exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>"); //останавливаем выполнение сценариев
      }
//конец процесса загрузки и присвоения переменной $avatar адреса загруженной авы
}
$password = md5($password);//шифруем пароль
$password = strrev($password);// для надежности добавим реверс
$password = $password."b3p6f";
//можно добавить несколько своих символов по вкусу, например, вписав "b3p6f". Если этот пароль будут взламывать метадом подбора у себя на сервере этой же md5,то явно ничего хорошего не выйдет. Но советую ставить другие символы, можно в начале строки или в середине.
//При этом необходимо увеличить длину поля password в базе. Зашифрованный пароль может получится гораздо большего размера.

// дописали новое********************************************
// Далее идет все из первой части статьи,но необходимо дописать изменение в запрос к базе.
// подключаемся к базе
include ("mysql.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
// проверка на существование пользователя с таким же логином
$result = mysql_query("SELECT id FROM users WHERE login='$login'",$link);
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {
exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин."); //останавливаем выполнение сценариев
}
// если такого нет, то сохраняем данные
$result2 = mysql_query ("INSERT INTO users (login,password,avatar,email,date) VALUES('$login','$password','$avatar','$email',NOW())");
// Проверяем, есть ли ошибки
if ($result2=='TRUE')
{
$result3 = mysql_query ("SELECT id FROM users WHERE login='$login'",$link);//извлекаем идентификатор пользователя. Благодаря ему у нас и будет уникальный код активации, ведь двух одинаковых идентификаторов быть не может.
$myrow3 = mysql_fetch_array($result3);
$activation = md5($myrow3['id']).md5($login);//код активации аккаунта. Зашифруем через функцию md5 идентификатор и логин. Такое сочетание пользователь вряд ли сможет подобрать вручную через адресную строку.
$subject = "Подтверждение регистрации";//тема сообщения
$message = "Здравствуйте! Спасибо за регистрацию на citename.ru\nВаш логин: ".$login."\n
Перейдите по ссылке, чтобы активировать ваш аккаунт:\nhttp://localhost/test3/activation.php?login=".$login."&code=".$activation."\nС уважением,\n
Администрация citename.ru";//содержание сообщение
mail($email, $subject, $message, "Content-type:text/plane; Charset=windows-1251\r\n");//отправляем сообщение

echo "Вам на E-mail выслано письмо с cсылкой, для подтверждения регистрации. Внимание! Ссылка действительна 1 час. <a href='index.php'>Главная страница</a>"; //говорим о отправленном письме пользователю
}
else {
exit ("Ошибка! Вы не зарегистрированы."); //останавливаем выполнение сценариев
     }
?>
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Rinat1994
Rinat1994
Topic Starter сообщение 21.6.2012, 9:10; Ответить: Rinat1994
Сообщение #2


Все сам разобрался просто переменные пересекались :) ппц а вчера весь день просидел

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


 



RSS Текстовая версия Сейчас: 29.3.2024, 18:07
Дизайн