Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 06.09.2012
Сообщений: 9
1

Проверка на дырки, мой первый работоспособный скрипт регистрации и авторизации

11.09.2012, 11:42. Показов 3421. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем. Значит так, я новичок во всем этом(программирование).

Я написал скрипт авторизации и регистрации. Вот интересно в нем много дырок?
И вообще как определить где есть дырки а где нету?

И если можно пару примеров по защите.

вот собственно сам скрипт
Кликните здесь для просмотра всего текста

index.php
Кликните здесь для просмотра всего текста

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
include_once('./md5My.gmg');
if($go == 'exit'){
    unset($_SESSION['login']);
    session_destroy();
    exit("<html><head><meta    http-equiv='Refresh' content='0;    URL=./index.php'></head></html>");
 
}
if(!isset($_SESSION['login'])){
 
?>
 
<form action="?go=vxod" method="POST">
 <table width="1" align="center">
    <tr>
        <td align="right">Логин: </td>
        <td align="left"><input type="text" name="login" size="15"/></td>
    </tr>
    <tr>
        <td align="right">Пароль</td>
        <td align="left"><input type="password" name="pass" size="15"/></td>
    </tr>
    <tr>
        <td align="right"><a href="index.php?go=reg">Register</a></td>
        <td align="left"><input type="submit" value="Вход"/></td>
    </tr>
</table>
</form>
<?php
if($go == 'vxod'){
 
 if(empty($_POST['login']) or empty($_POST['pass'])){
    echo 'Пожалуйста заполните все поля';
 }else{
    $login = $_POST['login'];
    $pass = md5(md5My($_POST['pass']));
    
    $login = htmlspecialchars($login);
    $pass = htmlspecialchars($pass);
    
    include_once('./conf.php');
    $query = mysql_query("SELECT * FROM users WHERE login = '".$login."' AND pass = '".$pass."'");
    $row = mysql_num_rows($query);
    if($row > 0){
        $_SESSION['login'] = $login;
        setcookie("Login", $login, time() + 9999999);
        setcookie("pass", $pass, time() + 9999999);
        exit("<html><head><meta    http-equiv='Refresh' content='0;    URL=./index.php'></head></html>");
    }else{
        echo 'Извените такого пользователя не существует, или пароль введен не верно';
    }
 }
}
} else {
    echo 'Добро пожаловать '.$_SESSION['login'].'<br>';
    echo '<a href="?go=exit">Выход</a>';
}
 
 
?>


страница регистрации reg.php

Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
 
if($_POST['submit']){
    if(empty($_POST['login']) or !preg_match("/[a-zA-Z0-9]/", $_POST['login']) or strlen($_POST['login']) > 16){
        echo 'Поле логин не правильно заполнено!';
    }elseif(empty($_POST['pass']) or !preg_match("/[a-zA-Z0-9]/",$_POST['pass']) or strlen($_POST['pass']) > 16){
        echo 'Поле пароля не правильно заполнено!';
    }elseif(empty($_POST['mail']) or !eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$", $_POST['mail']) or strlen($_POST['mail']) > 50){
        echo 'Поле E - mail не правильно заполнено!';
    }elseif($_POST['pass'] != $_POST['pass2']){
        echo 'Пароли не совпадают!';
    }else{
        include_once('./conf.php');
        include_once('./md5My.gmg');
        $login = $_POST['login'];
        $pass = md5(md5My($_POST['pass']));
        $mail = $_POST['mail'];
        
        $login = htmlspecialchars($login);
        $pass = htmlspecialchars($pass);
        $mail = htmlspecialchars($mail);
        $login = trim($login);
        $pass = trim($pass);
        $mail = trim($mail);
        
        $query = mysql_query("SELECT * FROM users WHERE login = '".$login."'");
        $row = mysql_num_rows($query);
        if($row > 0){
            echo 'Такой пользователь сущ.';
        }else{
            $insert = mysql_query("INSERT INTO users(id, login, pass, mail) VALUES(NULL,'".$login."' ,'".$pass."' ,'".$mail."')");
            
            echo 'Регистрация завершена <a href="./index.php">На Главную</a>';
            $_SESSION['login'] = $login;
        }
    }
}
 
?>
 
<form name="registration" action="" method="POST">
<table align="center" bgcolor="#ffffff" width="483px">
    <tr>
        <td align="right">Логин:</td>
        <td align="left"><input type="text" name="login" size="15"/></td>
    </tr>
    <tr>
        <td align="right">Пароль</td>
        <td align="left"><input type="password" name="pass" size="15"/></td>
    </tr>
    <tr>
        <td align="right">Повторите пароль</td>
        <td align="left"><input type="password" name="pass2" size="15"/></td>
    </tr>
    <tr>
        <td align="right">E-Mail</td>
        <td align="left"><input type="text" name="mail" size="15"/></td>
    </tr>
    <tr>
        <td align="right">О Себе</td>
        <td align="left"><textarea name="about" rows="4" cols="13"></textarea></td>
    </tr>
    
    <tr>
        <td align="right"><a href="?go=back">Назад</a></td>
        <td align="left"><input type="submit" name="submit" value="Регистрация"/></td>
    </tr>
 
</table>
</form>


Подключение к бд conf.php
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
$conn = array(); // Объявляем массив для коннекта к базе
$conn['server'] = 'localhost'; //Сервер базы
$conn['user'] = 'root'; //Пользователь БД
$conn['pass'] = 'vertrigo'; //Пароль от БД
$conn['dbName'] = 'blog'; //Соответственно имя БД
 
$connect = mysql_connect($conn['server'], $conn['user'], $conn['pass']) or die(mysql_error());
mysql_select_db($conn['dbName'], $connect) or die(mysql_error());
 
?>


собственно md5My.gmg(.txt)
Кликните здесь для просмотра всего текста

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
function md5My($val) {
    $val = str_replace('a','ch2',$val);
    $val = str_replace('b','e2a',$val);
    $val = str_replace('c','tr5',$val);
    $val = str_replace('d','gf4',$val);
    $val = str_replace('e','nh4',$val);
    $val = str_replace('f','qw2',$val);
    $val = str_replace('g','zx3',$val);
    $val = str_replace('h','222',$val);
    $val = str_replace('i','tr3',$val);
    $val = str_replace('j','w1r',$val);
    $val = str_replace('k','rfg',$val);
    $val = str_replace('l','cdh',$val);
    $val = str_replace('m','1sx',$val);
    $val = str_replace('n','4db',$val);
    $val = str_replace('o','xp4',$val);
    $val = str_replace('p','axf',$val);
    $val = str_replace('q','34f',$val);
    $val = str_replace('r','xvt',$val);
    $val = str_replace('s','09f',$val);
    $val = str_replace('t','4dc',$val);
    $val = str_replace('u','vjk',$val);
    $val = str_replace('v','qwe3',$val);
    $val = str_replace('w','xcv',$val);
    $val = str_replace('x','er3',$val);
    $val = str_replace('y','1wr',$val);
    $val = str_replace('z','pes',$val);
    
    $val = str_replace('A','ch2',$val);
    $val = str_replace('B','e2a',$val);
    $val = str_replace('C','tr5',$val);
    $val = str_replace('D','gf4',$val);
    $val = str_replace('E','nh4',$val);
    $val = str_replace('F','qw2',$val);
    $val = str_replace('G','zx3',$val);
    $val = str_replace('H','222',$val);
    $val = str_replace('I','tr3',$val);
    $val = str_replace('J','w1r',$val);
    $val = str_replace('K','rfg',$val);
    $val = str_replace('L','cdh',$val);
    $val = str_replace('M','1sx',$val);
    $val = str_replace('N','4db',$val);
    $val = str_replace('O','xp4',$val);
    $val = str_replace('P','axf',$val);
    $val = str_replace('Q','34f',$val);
    $val = str_replace('R','xvt',$val);
    $val = str_replace('S','09f',$val);
    $val = str_replace('T','4dc',$val);
    $val = str_replace('U','vjk',$val);
    $val = str_replace('V','qwe3',$val);
    $val = str_replace('W','xcv',$val);
    $val = str_replace('X','er3',$val);
    $val = str_replace('Y','1wr',$val);
    $val = str_replace('Z','pes',$val);
    
    return $val;
}
?>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.09.2012, 11:42
Ответы с готовыми решениями:

Скрипт регистрации и авторизации
Помогите написать php скрипты: регистрации(формы:Логин, Имя, Фамилия, Отчество, Пароль, Повтор...

Нужен скрипт регистрации и авторизации с проверкой
Всем привет товарищи! Нужна книга или ссылка на статью, а ещё лучше готовый срипт регистрации и...

Есть php скрипт регистрации и авторизации, как создать защищённые страницы
Привет всем форумчанам! У меня опять проблема: есть полностью рабочий скрипт регистрации и...

грамотная проверка регистрации и авторизации? (php + mysql + jq)
здравствуйте. не могли бы вы подсказать пример где подробно описывается как правильно сделать...

23
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,801
11.09.2012, 12:17 2
начнем сразу с 1ого файла :
PHP
1
2
3
4
5
if($go == 'exit'){
    unset($_SESSION['login']);
    session_destroy();
    exit("<html><head><meta    http-equiv='Refresh' content='0;    URL=./index.php'></head></html>"); 
}
откуда взялся $go ? может $_GET['go'] ?
далее идет ансет , а если ент такой переменной - ошибка ?
PHP
1
2
3
4
5
if(isset($_GET['go']) && $_GET['go'] == 'exit' && isset($_SESSION['login'])){
    unset($_SESSION['login']);
    session_destroy();
    exit("<html><head><meta    http-equiv='Refresh' content='0;    URL=./index.php'></head></html>"); 
}
зачем изврощатся с mymd5 ? можно просто префикс к паролью приделать и мд5 уже хрен взломаешь незная префикса ...
в общем недочетом много...

Добавлено через 1 минуту
п.с. если уж и решили свой мд5 делать то почитайте про фунцкцию strtr(); - куда проще чем 100 реплейсов
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.09.2012, 12:36 3
1. зачем извлекать записи (да еще и * - все записи) если можно подсчитать число таких пользователей - используйте COUNT MySQL
2. вы уверены что htmlspecialchars вас спасет от инъекции? наберите в логине ' or 1=1 LIMIT 1 --' а пароль любой
Это касательно первого файла..

Добавлено через 6 минут
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
if($_POST['submit']){
PHP
1
if(isset($_POST['submit'])){
0
201 / 199 / 4
Регистрация: 13.06.2012
Сообщений: 1,009
Записей в блоге: 3
11.09.2012, 12:37 4
PHP
1
2
3
4
$pass = md5(md5My($_POST['pass']));
    
    $login = htmlspecialchars($login);
    $pass = htmlspecialchars($pass);
с паролем то зачем так ?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.09.2012, 12:40 5
Цитата Сообщение от Den41k0491 Посмотреть сообщение
HTML5
1
<input type="text" name="mail"
есть тип поля email

Добавлено через 46 секунд
в регистрации тоже самое, что и в авторизации - зачем извлекать все записи

Добавлено через 52 секунды
сначала проверяете регулярками и на пустоту, затем очищаете. а если я случайно в конце или начале логина ввел пробел?

Добавлено через 35 секунд
Цитата Сообщение от Den41k0491 Посмотреть сообщение
!eregi
eregi устаревшие, используйте preg_match
0
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,801
11.09.2012, 12:41 6
где вы вообще сессию открываете?
0
0 / 0 / 0
Регистрация: 06.09.2012
Сообщений: 9
11.09.2012, 13:08  [ТС] 7
Цитата Сообщение от crautcher Посмотреть сообщение
откуда взялся $go ? может $_GET['go'] ?
а в чем разница?

Цитата Сообщение от KOPOJI Посмотреть сообщение
зачем извлекать записи (да еще и * - все записи) если можно подсчитать число таких пользователей - используйте COUNT MySQL
хм мало в этом понимаю, можно примерчик какой нить?

Цитата Сообщение от KOPOJI Посмотреть сообщение
вы уверены что htmlspecialchars вас спасет от инъекции?
а как лучше спастись?

Цитата Сообщение от basili4 Посмотреть сообщение
с паролем то зачем так ?
просто предосторожность

Цитата Сообщение от KOPOJI Посмотреть сообщение
в регистрации тоже самое, что и в авторизации - зачем извлекать все записи
я заменил на такое извлечение

в регистрации
PHP
1
$query = mysql_query("SELECT login FROM users WHERE login = '".$login."'");
в авторизации
PHP
1
$query = mysql_query("SELECT login, pass FROM users WHERE login = '".$login."' AND pass = '".$pass."'");

Цитата Сообщение от KOPOJI Посмотреть сообщение
а если я случайно в конце или начале логина ввел пробел?
ну я подумал что заново введешь ну щас вставил
PHP
1
2
$login = trim($login);
$pass = trim($pass);

Цитата Сообщение от crautcher Посмотреть сообщение
где вы вообще сессию открываете?
Кликните здесь для просмотра всего текста

Главная страница.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
include_once('temp/header.php'); //в этом файле запуск сессии.
 
include_once('temp/r_block.php');
if(isset($_GET['go']) && $_GET['go'] == 'reg'){
    include_once('reg/reg.php');
}else{
 
include_once('temp/main.php');
 
}
 
include_once('temp/footer.php');
?>
вот header.php

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title><?php $title ?> - Блог GMG</title>
<link rel="stylesheet" type="text/css" href="temp/style.css" />
<meta charset="utf-8">
</head>
<body>
 
 
<div id="main">
<center>
  <a href="./index.php"><div id="head">
 
 </div></a>
 </center>
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.09.2012, 13:19 8
скрытый текст
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
<?php $title ?>
а это что может надо
PHP
1
<?php echo $title; ?>
?
Цитата Сообщение от Den41k0491 Посмотреть сообщение
ну щас вставил
Не переменную очищать, а полученные данные сначала очистить - а затем уже проверять на пустоту. если я введу один пробел, то получу ошибку не о том, что пустой логин, а о неверном формате
Цитата Сообщение от Den41k0491 Посмотреть сообщение
а в чем разница?
это будет работать только при register_globals = on
Цитата Сообщение от Den41k0491 Посмотреть сообщение
а как лучше спастись?
mysql_real_escape_string()
Цитата Сообщение от Den41k0491 Посмотреть сообщение
просто предосторожность
странно. сначала шифруете, зачем в html-сущности, зачем очищаете от пробелов по краям
Цитата Сообщение от Den41k0491 Посмотреть сообщение
хм мало в этом понимаю, можно примерчик какой нить?
PHP
1
2
3
4
5
6
$res = mysql_query("SELECT COUNT(*) FROM `table` WHERE ....");
if($res) $data = mysql_fetch_array($res,MYSQL_NUM);
if(!empty($data[0])) echo 'Юзер уже существует';
else {
...
}
Цитата Сообщение от Den41k0491 Посмотреть сообщение
я заменил на такое извлечение
вы же все равно результат не используете.
0
0 / 0 / 0
Регистрация: 06.09.2012
Сообщений: 9
11.09.2012, 13:44  [ТС] 9
так вроде все подправил вот что у меня вышло

index.php - авторизация
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
include_once('./md5My.gmg');
if(isset($_GET['go']) && $_GET['go'] == 'exit' && isset($_SESSION['login'])){
    unset($_SESSION['login']);
    session_destroy();
    exit("<html><head><meta    http-equiv='Refresh' content='0;    URL=./index.php'></head></html>");
 
}
if(!isset($_SESSION['login'])){
 
?>
 
<form action="?go=vxod" method="POST">
 <table width="1" align="center">
    <tr>
        <td align="right">Логин: </td>
        <td align="left"><input type="text" name="login" size="15"/></td>
    </tr>
    <tr>
        <td align="right">Пароль</td>
        <td align="left"><input type="password" name="pass" size="15"/></td>
    </tr>
    <tr>
        <td align="right"><a href="index.php?go=reg">Register</a></td>
        <td align="left"><input type="submit" value="Вход"/></td>
    </tr>
</table>
</form>
<?php
if(isset($_GET['go']) && $_GET['go'] == 'vxod'){
 
$_POST['login'] = trim($_POST['login']);
$_POST['pass'] = trim($_POST['pass']);
 
$_POST['login'] = htmlspecialchars($_POST['login']);
$_POST['pass'] = htmlspecialchars($_POST['pass']);
 
 if(empty($_POST['login']) or empty($_POST['pass'])){
    echo 'Пожалуйста заполните все поля';
 }else{
    $login = $_POST['login'];
    $pass = md5(md5My($_POST['pass']));
    
    include_once('./conf.php');
    
    $login = mysql_real_escape_string($login);
    
    $query = mysql_query("SELECT COUNT(*) FROM users WHERE login = '".$login."' AND pass = '".$pass."'");
    if($query){
    $arrRes = mysql_fetch_array($query, MYSQL_NUM);
    }
    if(!empty($arrRes[0])){
        $_SESSION['login'] = $login;
        setcookie("Login", $login, time() + 9999999);
        setcookie("pass", $pass, time() + 9999999);
        exit("<html><head><meta    http-equiv='Refresh' content='0;    URL=./index.php'></head></html>");
    }else{
        echo 'Извените такого пользователя не существует, или пароль введен не верно';
    }
 }
}
} else {
    echo 'Добро пожаловать '.$_SESSION['login'].'<br>';
    echo '<a href="?go=exit">Выход</a>';
}
 
 
?>
reg.php - регистрация
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
$title = 'Регистрация';
 
if(isset($_POST['submit'])){
 
 $_POST['login'] = trim($_POST['login']);
 $_POST['pass'] = trim($_POST['pass']);
 
 $_POST['login'] = htmlspecialchars($_POST['login']);
 $_POST['pass'] = htmlspecialchars($_POST['pass']);
 
    if(empty($_POST['login']) or !preg_match("/[a-zA-Z0-9]/", $_POST['login']) or strlen($_POST['login']) > 16){
        echo 'Поле логин не правильно заполнено!';
    }elseif(empty($_POST['pass']) or !preg_match("/[a-zA-Z0-9]/",$_POST['pass']) or strlen($_POST['pass']) > 16){
        echo 'Поле пароля не правильно заполнено!';
    }elseif(empty($_POST['mail']) or !eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$", $_POST['mail']) or strlen($_POST['mail']) > 50){
        echo 'Поле E - mail не правильно заполнено!';
    }elseif($_POST['pass'] != $_POST['pass2']){
        echo 'Пароли не совпадают!';
    }else{
        include_once('./conf.php');
        include_once('./md5My.gmg');
        $login = $_POST['login'];
        $pass = md5(md5My($_POST['pass']));
        $mail = $_POST['mail'];
        
        $login = mysql_real_escape_string($login);
        $mail = mysql_real_escape_string($mail);
        
        $query = mysql_query("SELECT COUNT(*) FROM users WHERE login = '".$login."'");
        if($query){
            $arrRes = mysql_fetch_array($query, MYSQL_NUM);
        }
        if(!empty($arrRes[0])){
            echo 'Такой пользователь сущ.';
        }else{
            $insert = mysql_query("INSERT INTO users(id, login, pass, mail) VALUES(NULL,'".$login."' ,'".$pass."' ,'".$mail."')");
            
            echo 'Регистрация завершена <a href="./index.php">На Главную</a>';
            $_SESSION['login'] = $login;
        }
    }
}
 
?>
 
<form name="registration" action="" method="POST">
<table align="center" bgcolor="#ffffff" width="483px">
    <tr>
        <td align="right">Логин:</td>
        <td align="left"><input type="text" name="login" size="15"/></td>
    </tr>
    <tr>
        <td align="right">Пароль</td>
        <td align="left"><input type="password" name="pass" size="15"/></td>
    </tr>
    <tr>
        <td align="right">Повторите пароль</td>
        <td align="left"><input type="password" name="pass2" size="15"/></td>
    </tr>
    <tr>
        <td align="right">E-Mail</td>
        <td align="left"><input type="text" name="mail" size="15"/></td>
    </tr>
    <tr>
        <td align="right">О Себе</td>
        <td align="left"><textarea name="about" rows="4" cols="13"></textarea></td>
    </tr>
    
    <tr>
        <td align="right"><a href="?go=back">Назад</a></td>
        <td align="left"><input type="submit" name="submit" value="Регистрация"/></td>
    </tr>
 
</table>
</form>
ну и для практики и усвоения переделал md5My.gmg

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
function md5My($val) {
    $arrChar = array(
                    'a' => 'pes',
                    'b' => '1wr',
                    'c' => 'er3',
                    'd' => 'qwe3',
                    'e' => '4dc',
                    'f' => 'cdh',
                    'g' => 'xvt',
                    'h' => 'xcv',
                    'i' => '1wr',
                    'j' => 'pes',
                    'k' => '222',
                    'l' => '123',
                    'm' => 'dsd',
                    'n' => 'vfr',
                    'o' => 'ytr',
                    'p' => 'vgj',
                    'r' => 'bnh',
                    's' => 'g5d',
                    't' => 'se5',
                    'u' => 'gfv',
                    'v' => 'ry4',
                    'w' => 'ew3',
                    'x' => 'rt5',
                    'y' => 'wf3',
                    'z' => 'kj7',
                    'A' => 'kub',
                    'B' => 'gyu',
                    'C' => '7jb',
                    'D' => 'vfg',
                    'E' => 'fg5',
                    'F' => 'vdf',
                    'G' => 'gh5',
                    'H' => 'xcv',
                    'I' => 'SD4',
                    'J' => 'Df4',
                    'K' => 'dsw',
                    'L' => 'nju',
                    'M' => 'poi',
                    'N' => 'iop',
                    'O' => 'hjy',
                    'P' => '678',
                    'R' => 'y67',
                    'S' => '76j',
                    'T' => '6u7',
                    'U' => 'n56',
                    'V' => 'ny6',
                    'W' => 'hk7',
                    'X' => 'hn6',
                    'Y' => 'gy6',
                    'Z' => 'jhh',
                    );
    $val = strtr($val, $arrChar);
    return $val;
}
?>
Жду критики!
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.09.2012, 13:58 10
скрытый текст
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
2
if(isset($_GET['go']) && $_GET['go'] == 'vxod'){
$_POST['login'] = trim($_POST['login']);
1. не нужно переобозначать глобальный массив
PHP
1
$login = trim($_POST['login']);
2. То есть, если существует ?go=vxod то существуют и данные в $_POST? а кто сказал что я не могу вручную в адресной строке это написать? и полезут ошибки undefined index...
а пароль и email кто будет mysql_real_escape_string() обрабатывать?

Добавлено через 2 минуты
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
2
3
4
$_SESSION['login'] = $login;
        setcookie("Login", $login, time() + 9999999);
        setcookie("pass", $pass, time() + 9999999);
        exit("<html><head><meta    http-equiv='Refresh' content='0;    URL=./index.php'></head></html>");
а на это ошибок про заголовки не вылетает?

Добавлено через 1 минуту
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
2
3
if($query){
* * * * * * $arrRes = mysql_fetch_array($query, MYSQL_NUM);
* * * * }
зачем одно действие заключать в фигурные скобки?

Добавлено через 54 секунды
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
echo 'Регистрация завершена <a href="./index.php">На Главную</a>';
а если запрос не пройдет?

Добавлено через 2 минуты
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
2
3
4
5
if(isset($_GET['go']) && $_GET['go'] == 'exit' && isset($_SESSION['login'])){
* * unset($_SESSION['login']);
* * session_destroy();
* * exit("<html><head><meta * *http-equiv='Refresh' content='0; * *URL=./index.php'></head></html>");
}
не лучше ли вместо этого проверять - если есть сессия и не пустая, то отображать приветствие, если нету - отображать форму авторизации
0
0 / 0 / 0
Регистрация: 06.09.2012
Сообщений: 9
11.09.2012, 14:03  [ТС] 11
Как то не до понял

Цитата Сообщение от KOPOJI Посмотреть сообщение
а кто сказал что я не могу вручную в адресной строке это написать? и полезут ошибки undefined index...
вот это:

Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
2
3
4
5
if(isset($_GET['go']) && $_GET['go'] == 'vxod'){
$_POST['login'] = trim($_POST['login']);
$_POST['pass'] = trim($_POST['pass']);
$_POST['login'] = htmlspecialchars($_POST['login']);
$_POST['pass'] = htmlspecialchars($_POST['pass']);
переправил на это:
PHP
1
2
3
4
5
6
7
8
9
10
11
if(isset($_GET['go']) && $_GET['go'] == 'vxod'){
 if(isset($_POST['login']) && isset($_POST['pass'])){
    $login = $_POST['login'];
    $pass = $_POST['pass'];
    
    $login = trim($_POST['login']);
    $pass = trim($_POST['pass']);
 
    $login = htmlspecialchars($_POST['login']);
    $pass = htmlspecialchars($_POST['pass']);
 }
и вот тут


Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
2
3
4
5
if(isset($_POST['submit'])){
$_POST['login'] = trim($_POST['login']);
*$_POST['pass'] = trim($_POST['pass']);
$_POST['login'] = htmlspecialchars($_POST['login']);
*$_POST['pass'] = htmlspecialchars($_POST['pass']);
на это

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 if(isset($_POST['login']) && isset($_POST['pass']) && isset($_POST['mail']) && isset($_POST['pass2'])){
    $login = $_POST['login'];
    $pass = $_POST['pass'];
    $pass2 = $_POST['pass2'];
    $mail = $_POST['mail'];
    
    $login = trim($login);
    $pass = trim($pass);
    $pass2 = trim($pass2);
    $mail = trim($mail);
 
    $login = htmlspecialchars($login]);
    $pass = htmlspecialchars($pass);
    $pass2 = htmlspecialchars($pass2);
    $mail = htmlspecialchars($mail);
 }
общий обзор
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
include_once('./md5My.gmg');
if(isset($_GET['go']) && $_GET['go'] == 'exit' && isset($_SESSION['login'])){
    unset($_SESSION['login']);
    session_destroy();
    exit("<html><head><meta    http-equiv='Refresh' content='0;    URL=./index.php'></head></html>");
 
}
if(!isset($_SESSION['login'])){
 
?>
 
<form action="?go=vxod" method="POST">
 <table width="1" align="center">
    <tr>
        <td align="right">Логин: </td>
        <td align="left"><input type="text" name="login" size="15"/></td>
    </tr>
    <tr>
        <td align="right">Пароль</td>
        <td align="left"><input type="password" name="pass" size="15"/></td>
    </tr>
    <tr>
        <td align="right"><a href="index.php?go=reg">Register</a></td>
        <td align="left"><input type="submit" value="Вход"/></td>
    </tr>
</table>
</form>
<?php
if(isset($_GET['go']) && $_GET['go'] == 'vxod'){
 if(isset($_POST['login']) && isset($_POST['pass'])){
    $login = $_POST['login'];
    $pass = $_POST['pass'];
    
    $login = trim($_POST['login']);
    $pass = trim($_POST['pass']);
 
    $login = htmlspecialchars($_POST['login']);
    $pass = htmlspecialchars($_POST['pass']);
 }
 if(empty($login) or empty($pass)){
    echo 'Пожалуйста заполните все поля';
 }else{ 
    include_once('./conf.php');
    
    $login = mysql_real_escape_string($login);
    $pass = mysql_real_escape_string($pass);
    
    $query = mysql_query("SELECT COUNT(*) FROM users WHERE login = '".$login."' AND pass = '".md5(md5My($pass))."'");
    if($query){
    $arrRes = mysql_fetch_array($query, MYSQL_NUM);
    }
    if(!empty($arrRes[0])){
        $_SESSION['login'] = $login;
        setcookie("Login", $login, time() + 9999999);
        setcookie("pass", $pass, time() + 9999999);
        exit("<html><head><meta    http-equiv='Refresh' content='0;    URL=./index.php'></head></html>");
    }else{
        echo 'Извените такого пользователя не существует, или пароль введен не верно';
    }
 }
}
} else {
    echo 'Добро пожаловать '.$_SESSION['login'].'<br>';
    echo '<a href="?go=exit">Выход</a>';
}
 
 
?>
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
$title = 'Регистрация';
 
if(isset($_POST['submit'])){
 if(isset($_POST['login']) && isset($_POST['pass']) && isset($_POST['mail']) && isset($_POST['pass2'])){
    $login = $_POST['login'];
    $pass = $_POST['pass'];
    $pass2 = $_POST['pass2'];
    $mail = $_POST['mail'];
    
    $login = trim($login);
    $pass = trim($pass);
    $pass2 = trim($pass2);
    $mail = trim($mail);
 
    $login = htmlspecialchars($login]);
    $pass = htmlspecialchars($pass);
    $pass2 = htmlspecialchars($pass2);
    $mail = htmlspecialchars($mail);
 }
    if(empty($login) or !preg_match("/[a-zA-Z0-9]/", $login) or strlen($login) > 16){
        echo 'Поле логин не правильно заполнено!';
    }elseif($pass) or !preg_match("/[a-zA-Z0-9]/", $pass) or strlen($pass) > 16){
        echo 'Поле пароля не правильно заполнено!';
    }elseif(empty($mail) or !eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$", $mail) or strlen($mail) > 50){
        echo 'Поле E - mail не правильно заполнено!';
    }elseif($pass != $pass2){
        echo 'Пароли не совпадают!';
    }else{
        include_once('./conf.php');
        include_once('./md5My.gmg');
        
        
        
        
        $login = mysql_real_escape_string($login);
        $pass = mysql_real_escape_string($pass);
        $pass2 = mysql_real_escape_string($pass2);
        $mail = mysql_real_escape_string($mail);
        
        $query = mysql_query("SELECT COUNT(*) FROM users WHERE login = '".$login."'");
        if($query){
            $arrRes = mysql_fetch_array($query, MYSQL_NUM);
        }
        if(!empty($arrRes[0])){
            echo 'Такой пользователь сущ.';
        }else{
            $insert = mysql_query("INSERT INTO users(id, login, pass, mail) VALUES(NULL,'".$login."' ,'".md5(md5My($pass))."' ,'".$mail."')");
            
            echo 'Регистрация завершена <a href="./index.php">На Главную</a>';
            $_SESSION['login'] = $login;
        }
    }
}
 
?>
 
<form name="registration" action="" method="POST">
<table align="center" bgcolor="#ffffff" width="483px">
    <tr>
        <td align="right">Логин:</td>
        <td align="left"><input type="text" name="login" size="15"/></td>
    </tr>
    <tr>
        <td align="right">Пароль</td>
        <td align="left"><input type="password" name="pass" size="15"/></td>
    </tr>
    <tr>
        <td align="right">Повторите пароль</td>
        <td align="left"><input type="password" name="pass2" size="15"/></td>
    </tr>
    <tr>
        <td align="right">E-Mail</td>
        <td align="left"><input type="text" name="mail" size="15"/></td>
    </tr>
    <tr>
        <td align="right">О Себе</td>
        <td align="left"><textarea name="about" rows="4" cols="13"></textarea></td>
    </tr>
    
    <tr>
        <td align="right"><a href="?go=back">Назад</a></td>
        <td align="left"><input type="submit" name="submit" value="Регистрация"/></td>
    </tr>
 
</table>
</form>
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.09.2012, 14:09 12
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
$login = $_POST['login'];
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
$login = trim($login);
вам нравится когда каждое действие расписано на новой строчке? почему бы сразу не сделать как я написал? На 4 строчки код уже сократится, при такой же читабельности
PHP
1
$login = trim($_POST['login']);
Добавлено через 43 секунды
и htmlspecialchars туда же можно, еще минус 4 строчки

Добавлено через 1 минуту
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
if(isset($_POST['login']) && isset($_POST['pass']) && isset($_POST['mail']) && isset($_POST['pass2'])){
isset поддерживает несколько аргументов
PHP
1
if(isset($var1,$var2,$var3,....)) {
1
0 / 0 / 0
Регистрация: 06.09.2012
Сообщений: 9
11.09.2012, 14:09  [ТС] 13
Цитата Сообщение от KOPOJI Посмотреть сообщение
вам нравится когда каждое действие расписано на новой строчке? почему бы сразу не сделать как я написал? На 4 строчки код уже сократится, при такой же читабельности

Оу... Сори не до понял

Так это поправлю, а вот что по части дырок?

СПАСИБО ЗА ПОМОЩЬ... ЗА ЧАС СТОЛЬКО НОВОГО УЗНАЛ

Не по теме:

Эм а как '+' ставить, спасибо говорить ну или репу повышать?

0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.09.2012, 14:15 14
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
preg_match("/[a-zA-Z0-9]/", $pass)
1. то есть логин вида First_name не катит? регулярку можно сократить, модификатор i

Добавлено через 45 секунд
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
$pass2 = mysql_real_escape_string($pass2);
зачем!?

Добавлено через 2 минуты
1. еще есть такая хорошая вещь, как магические кавычки. Если они включены - то нужно очистить от слэшей перед использованием *escape_string()
PHP
1
2
3
4
5
if(get_magic_quotes_gpc()) {
$login = stripslashes($login);
$pass = stripslashes($pass);
....
}
2. mysql_real_escape_string() не экранирует служебные символы - % и _

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Den41k0491 Посмотреть сообщение
Эм а как '+' ставить, спасибо говорить ну или репу повышать?
внизу под постом есть кнопка +1 спасибо и отзыв - можно нажать спасибо можно отзыв оставить, можно и так написать "Спасибо!" :)

1
0 / 0 / 0
Регистрация: 06.09.2012
Сообщений: 9
11.09.2012, 14:16  [ТС] 15
Цитата Сообщение от KOPOJI Посмотреть сообщение
1. то есть логин вида First_name не катит? регулярку можно сократить, модификатор i
Эм как понять? я с этими регулярными выражениями почти не знаком.!


Цитата Сообщение от KOPOJI Посмотреть сообщение
зачем!?
честно тоже думал... и решил поставить в качестве лишней предорсторожности!
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.09.2012, 14:31 16
Цитата Сообщение от Den41k0491 Посмотреть сообщение
честно тоже думал
это для безопасного запроса - а у вас она в запросе не используется. более того, ее можно даже не очищать вообще (только от пробела) - сравнил: сходится - идем дальше, нет - ошибка, и больше она уже не нужна будет вообще.
в регулярке можно и длину сразу проверять. Если по простому то как то так
Код
/^[^_][_A-z0-9]{3,15}+$/i
0
0 / 0 / 0
Регистрация: 06.09.2012
Сообщений: 9
11.09.2012, 14:33  [ТС] 17
Код
get_magic_quotes_gpc
А кода выполняешь
PHP
1
if(get_magic_quotes_gpc())
то функция начинает работать, или она вызывается если в полях присутствуют символы '\', двойных или одинарных ковычек?

Не по теме:

Блин не могу с компа сойти, но время не бесконечно, ушел на работу, буду завтра, продолжу работу по правке:)

0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.09.2012, 14:35 18
Цитата Сообщение от Den41k0491 Посмотреть сообщение
то функция начинает работать, или она вызывается
она просто проверяет, включена ли директива magic_quotes_gpc ( т.н. "магические (или волшебные) кавычки" ) в php.ini. А если она включена - то пых при отправке данных сам добавляет экранирование к символам, а нам это не нужно.
0
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,801
11.09.2012, 15:19 19
советую приучать себя отделять шаблоны (html) от кода
0
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
11.09.2012, 15:37 20
Цитата Сообщение от basili4 Посмотреть сообщение
PHP
1
2
3
4
$pass = md5(md5My($_POST['pass']));
    
    $login = htmlspecialchars($login);
    $pass = htmlspecialchars($pass);
с паролем то зачем так ?
с логином так тоже незачем.

Добавлено через 2 минуты
http://phpfaq.ru/slashes

Добавлено через 2 минуты
Цитата Сообщение от Den41k0491 Посмотреть сообщение
PHP
1
2
3
4
 $login = trim($login);
    $pass = trim($pass);
    $pass2 = trim($pass2);
    $mail = trim($mail);
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    /**
     * Очищает массив от пробелов и слэшей.
     */
    function clearRequest(&$in)
    {
        if ($in && is_array($in))
        {
            foreach ($in as $key => $value)
            {
                if (is_array($value))
                {
                    clearRequest($in[$key]);
                }
                else
                {
                    $value = trim($value);
 
                    if (get_magic_quotes_gpc())
                    {
                        $value = stripslashes($value);
                    }
 
                    $in[$key] = $value;
                }
            }
        }
 
        return $in;
    }
 
clearRequest($_POST);
clearRequest($_GET);
// и т.д.
Добавлено через 1 минуту
собственно md5My.gmg
это что за бредятина? и зачем она нужна?

Добавлено через 1 минуту
PHP
1
exit("<html><head><meta    http-equiv='Refresh' content='0;    URL=./index.php'></head></html>");
чем header функция не катит?
0
11.09.2012, 15:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2012, 15:37
Помогаю со студенческими работами здесь

MVC - мой первый скрипт, оцените/исправьте/добавьте/прокомментируйте
Доброго времени суток, вот я погуглил, почитал всяких статей про MVC на PHP, поюзал немного...

Скрипт регистрации(проверка зарегистрированных юзеров)
Как прикрутить проверку зарегистрированных логинов и майлов к моему скрипту &lt;?php...

Создание регистрации и аутентификации spring. Логика регистрации и авторизации
Для регистрации юзера на сервер приходят данные в json формате(логин пароль подтвержденный пароль)....

Регистрации и авторизации
Как сделать Создание регистрации и авторизации Delphi?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru