Перейти к содержимому

Фото
- - - - -

Сломался скрипт


  • Вы не можете создать новую тему
  • Please log in to reply
21 ответов в этой теме

#1 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 05 Июль 2005 - 20:37

Вообщем, решил поставить шифрование, поначалу все работало, но потом перестало, я решил сделать как было, без шифровки, но к моему удивлению, работать скрипт не стал даже после удаления шифрования. Тоесть он работает, однако когда вводишь данные, то пишет что пароль или логин не верный, хотя логин и пасс верны. Вот сам скрипт, огромное спасибо Setor'у за его создание:
AUTH.PHP
<?
include("parser2.php");
?>
<? 
$ip = getenv("REMOTE_ADDR");
$br = getenv("HTTP_USER_AGENT");
$ref = getenv("HTTP_REFERER");

if($_POST['login'] == $login && $_POST['pass'] == $pass){
   session_start();
   $_SESSION['logged'] = 1;
   echo "<p align=center><b>Доступ: <font color=green>Открыт.</font></b><br>Вы вошли.<br>Добро пожаловать <u><b>".$username."</b></u></p>";
} else {
   echo "<p align=center><b>Доступ: <font color=red>Закрыт.</font></b><br>Неверный логин и/или пароль.</p>";
}
?>
PARSER2.PHP
<?
$login_data = file("passwords.txt");
foreach($login_data as $line)
{
   list( $login,$pass,$username ) = explode(":|:", $line);
}
?>
LOGIN.HTM
<html>
<head>
<title>Вход в закрытую зону</title>
</head>
<body  bgcolor="#FFFFFF">
<center>
<b><font color=red>Доступ только доверенным лицам</font></b><br><br>
<img src="lock.gif" alt="Авторизация" width="184" height="193" align="left"/>
<form action="auth.php" method="POST">
Логин<font color=red>*</font>:&nbsp;&nbsp;<input name="login" type="text" value="" /><br><br>
Пароль<font color=red>*</font>:<input name="pass" type="password" value="" /><br><br>
<input type="submit" name="enter" value="Вход" />
<input type="reset" name="reset" value="Сброс" /><br>
<li><font color=red>*</font> - Является обязательным для заполнения.
</form>
</center>
</body>
</html>
PASSWORDS.TXT
a:|:b:|:c:|:
Помогите решить проблему

Сообщение изменено: Z_e_N! (05 Июль 2005 - 21:21 )

  • 0

#2 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 05 Июль 2005 - 22:12

Зачем ты изменил код в parser.php - у тебя там нет проверки на логин... найди старую тему и просмотри код ещё раз!

Т.е. ты сравниваешься с самым последним логином в файле passwords.txt (который можно посмотреть браузером, набрав его адрес ;))

if($_POST['login'] == $login && $_POST['pass'] == $pass){
переменные $login и $pass замени на другие и в самом начале скрипта инициализируй их пустыми!
$login = $pass = '';
  • 0

#3 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 05 Июль 2005 - 22:18

про парсер понятно, а про второе поподробнее )
  • 0

#4 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 05 Июль 2005 - 22:25

Куда ещё подробнее?

<?
$login = $pass = '';

include("parser2.php");

//...
Иначе есть возможность войти с любым логином и любым паролем ;)
  • 0

#5 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 05 Июль 2005 - 22:30

вставил старый парсер, но он не пашет...пишет ошибку.к тому же он работал у меня и так...как в этой теме...клянусь
  • 0

#6 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 05 Июль 2005 - 22:36

Какую ошибку?

Добавлено в [mergetime]1120595777[/mergetime]
Что не работает?
Точнее пожалуйста)
  • 0

#7 crazy russian

crazy russian
  • Пользователь
  • 153 сообщений

Отправлено 06 Июль 2005 - 07:44

Перед тем как продолжить что-либо делать на PHP - внимательно прочитай http://www.php.net/m...e.variables.php несколько раз, до полного усвоения.
  • 0

#8 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 07 Июль 2005 - 21:54

Короче, забил на этот скрипт, и написал новый, вот он, но в нем неизвестная мне ошибка,вот код: а ошибка такая - Parse error: parse error in f:\home\127.0.0.1\www\auth.php on line 12

auth.php
<?
if(!file_exists(config.inc.php)){
echo "<p align=center>Произошла ошибка. База данных временно не доступна. Извините за неудобвства.</p>";
} else {
include "config.inc.php";
function login()
{
if($_POST['login'] = $login && $_POST['pass'] = $pass)
session_start();
$_SESSION['log']=1;
Show();
else
$_SESSION['log']=0;
echo "<p align=center>Неверный логин и/или пароль</p>";
}

if(isset($_SESSION['log']))
{
$_SESSION['log']=1;
Show();
else
$_SESSION['log']=0;
login();
}

function Show()
{
echo "<p align=center>ВАША СЕКРЕТНАЯ ИНФОРМАЦИЯ: TOP SECRET RESEARCH LAB<br>
Для безопасного выхода нажимайте кнопку<b><a href='logout.php'>Выход</a></b></p>";
}
}
?>

скажите что неверно ?

Сообщение изменено: Z_e_N! (07 Июль 2005 - 21:59 )

  • 0

#9 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 07 Июль 2005 - 22:35

Ты хотябы банально изучил синтаксис языка...

if ( condition )
{
   //...
}
else
{
  // ...
}

Ты не расставил скобки... А эта неизвестная тебе ошибка гласит, что ошибка на 12й строке! Смотришь на эту строку и думаешь, что с ней не так...

  • 0

#10 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 07 Июль 2005 - 22:37

но это же функция.я пересмотрел миллионы примеров и там сказано - function {//info}
  • 0

#11 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 07 Июль 2005 - 22:40

Да, функция не видит локальных переменных $login & $password... Их нужно объявить глобальными:
function login()
{
global $login, $password;
//...
}

Добавлено в [mergetime]1120768706[/mergetime]
Z_e_N!, при чём тут функция? проблема в IF'е!

Добавлено в [mergetime]1120768755[/mergetime]
Потом, знак "=" - это знак присваивания. А знак "==" - знак сравнения. У тебя уже 3я ошибка ;)

Добавлено в [mergetime]1120768818[/mergetime]
Да и вообще, чушь какая-то, а не скрипт... что он делает? Нифига он не делает :) Ты хоть сам понял, что написал?
  • 0

#12 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 07 Июль 2005 - 22:40

но да ладно, починил спасибо, вроде пашет но есть еще ошибка - Notice: Use of undefined constant config - assumed 'config' in f:\home\xen.com\www\auth.php on line 2
  • 0

#13 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 07 Июль 2005 - 22:41

P.S. учи базовый синтаксис... и тот код, что я писал - был рабочим ;) а то, что написал ты... сам понимаешь ;)
  • 0

#14 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 07 Июль 2005 - 22:46

Ну я стараюсь сам, я думал мой код имеет хоть какое то значение .хотя почему он не имеет его вовсе не знаю
  • 0

#15 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 07 Июль 2005 - 23:02

Напиши на бумаге что ты хочешь получить. Продумай алгоритм. И пиши :) Язык программирования - это обычный язык общения программиста и компьютера!

Я всегда записываю какие-то сложные алгоритмы. В твоём случае должно получиться что-то вроде этого:

1) При заходе на секретную страницу проверяем, есть ли у нас к ней доступ
1.1) Если есть, то показываем, если нет, то просим авторизоваться
2) Авторизация:
2.1) Надо ввести логин и пароль
2.2) Если логин и пароль подошли, получаем доступ к странице

Если синтаксис языка ты знаешь, то решишь эту простую задачу. Я сейчас например, пишу очень сложную систему авторизации для своего проекта. Уже дня 2 вожусь... На данный момент 350 строк чистого кода. Тут самое сложное - продумать алгоритм, обдумать все возможные и невозможные ситуации. Всё отладить... Это огромный труд! И я знаю, что это кривой вариант и его придётся переанализировать и отчасти переписывать. Это называется рефакторингом кода. Но сейчас он работает и надо заниматься другими делами.

Наверное, самое сложное - это связать между собой все части системы. Например, получаешь ошибку в модуле посреди его работы, ты должен что-то предпринять и красиво завершить работу скрипта :) Вот этоу же искусство!

Добавлено в [mergetime]1120770132[/mergetime]
Жаль, что приходится писать для PHP4... На PHP 5 было бы куда изящнее :(
  • 0

#16 crazy russian

crazy russian
  • Пользователь
  • 153 сообщений

Отправлено 08 Июль 2005 - 08:24

Программирование не искусство, Setor, программирование это рабочий процесс. Не вводи человека в заблуждение, а то ведь он так и будет относиться к программированию: нахрена читать какие-то мануалы, наступит озарение - само попрет ;]
  • 0

#17 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 08 Июль 2005 - 09:31

Если ты хотел оскарбить - не вышло, а мануалы я читал.но помоему от Сетора я больше узнаю чем от мануалов )) А вообще я хотел, при заходе на страницу, идентифицирование сесии, если они есть то функция - Show, где вся секртеная информация, если сессии небыли установлены, то функция - login, где просят авторизироваться, где при правильном логине и пароле сессии присваивается значение -1, и показывается функция - Show, а если не верны, то сессии присваивается значение - 0, и система пишет ошибка..

Сообщение изменено: Z_e_N! (08 Июль 2005 - 09:38 )

  • 0

#18 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 08 Июль 2005 - 11:05

Если данные не верны, то сессия тебе не нужна :)

crazy russian, я думаю, есть разница - написать красиво и написать криво... вот тебе и искусство ;)
  • 0

#19 crazy russian

crazy russian
  • Пользователь
  • 153 сообщений

Отправлено 08 Июль 2005 - 11:51

Z_e_N!, я хотел тебе указать на то, что твой последующий вопрос был напрямую связан с тем, что рассказывается по ссылке которую я тебе дал. Вывод напрашивается сам собой - либо ты вообще не читал, либо просмотрел в поисках картинок эротического содержания, но, не нашел и закрыл это дело. Чтобы было понятнее - я говорю про global переменные. Неужели так сложно было понажимать по линкам и потратить немного своего времени и решить свою проблему самостоятельно?


Setor, как скажешь. Главное чтобы это не превращалось в ожидание помощи свыше. или сбоку :]

Сообщение изменено: crazy russian (08 Июль 2005 - 11:52 )

  • 0

#20 ParadoxL

ParadoxL
  • Постоялец
  • 4 756 сообщений
  • Откуда:Edinburg

Отправлено 08 Июль 2005 - 12:41

Оодного не понял, скрипт сломался (как гласит название) или его сломали чьи-то шаловливые ручки? :)

Добавлено в [mergetime]1120819296[/mergetime]
Z_e_N!, пробуй себя сперва в более простых алгоритмах. Шашки запрограммируй например. Ну не знаю ... фази функции. Когда изучишь хорошо синтаксис, тогда можешь переходить к таким ответвенным моментам как безопасность.
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#21 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 18 Июль 2005 - 07:58

Спасибо друзья, собрался я с силами и скрипт выполнил, я аж сам доволен - сессии, MD5 + sha1 шифровка, отправка на мыло после 5 неверных попыток залогиниться и т.д.Только не знаю как сделать чтобы когда 5 раз неверно ввели пароль, форма больше не показывалась.Кукисами - обойдут.сессии - хз.есть идеи ?
  • 0

#22 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 18 Июль 2005 - 11:17

Ты что, суперскеретный сайт делаешь? У тебя пароль состоит из 4х цифр? Забей ты на это! Если боишься подбора паролей, напиши строку в том месте, где у тебя bad_password: sleep(1); - и твой скрипт будет "спать" одну секунду, потом продолжится выполнение... Это затормозит любую атаку ;) Для формы - если ты параноик, ставь куки.

P.S. иногда людям в голову приходят такие бредовые идеи... иногда просто невозможно понять их смысл. На форуме PHPClub обычно спрашивают: "А зачем тебе это надо?"

Добавлено в [mergetime]1121678243[/mergetime]
Да, ответ на вопрос: храни идентификатор пользователя (например, его IP) и кол-во неудачных попыток и время в базе данных или в файле, формат которого тебе уже известен. Парсер у тебя уже есть. Только тебе придётся добавлять и удалять строки ;) Но это тоже просто.
  • 0