Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

02.11.2008, 13:24
|
|
Постоянный
Регистрация: 19.02.2008
Сообщений: 438
Провел на форуме: 956872
Репутация:
186
|
|
Сообщение от Spyder
вот кто нить напрямую обратиться к base.php и вся ваша хэк логинка летит мимо
Делай тогда с .htaccess'ом, а то бред)
Это будет позже продумано =))
|
|
|

02.11.2008, 13:34
|
|
Постоянный
Регистрация: 19.02.2008
Сообщений: 438
Провел на форуме: 956872
Репутация:
186
|
|
Я вот вроде добился своего, код немного смешной, но рабочий
PHP код:
<?php
$f = file("base.php");
if(isset($login) && isset($password)) {
foreach($f as $d) {
$d = trim($d);
list($user, $pass) = split(":", $d);
if($login == $user && $password == $pass) {
print "Вошли";
$good = 1;
} else {
$bad = 1;
}
}
if ($good == 1 && $bad == 1) {
} else {
print "Облом";
}
} else {
print <<<HERE
<form method = "post">
Логин: <input type = "text" name = "login"><br />
Пароль: <input type = "text" name = "password"><br />
<input type = "submit" value = "Вход">
</form>
HERE;
}
?>
|
|
|

02.11.2008, 14:15
|
|
Постоянный
Регистрация: 19.02.2008
Сообщений: 438
Провел на форуме: 956872
Репутация:
186
|
|
а это регистрация, если кому понадобится...
PHP код:
<?php
if (isset($login) && isset($password)) {
$fp = fopen('base.php', 'a');
fputs($fp, "\r\n" . $login . ':' . $password);
fclose($fp);
print $login . ", спасибо за регистрацию";
} else {
print <<<HERE
<form method = "post">
Логин: <input type = "text" name = "login"><br />
Пароль: <input type = "text" name = "password"><br />
<input type = "submit" value = "Регистрация">
</form>
HERE;
}
?>
|
|
|

02.11.2008, 14:53
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
Ru}{eeZ меня видимо одного смущает, что с такой регой и страницей логина может быть неограниченное количество строк, с одинаковым логином, но разными паролями, а значит никто из таких пользователей залогиниться не сможет. Включенный Register_globals - зло. Твой скрипт будет рад обрабатывать 10к строк, если к нему будут обращаться каждую секунду.
Если же хочется мучаться с файлами, то:
PHP код:
<?
if (isset($_POST['login']) && isset($_POST['password']))
{
$f=file('base.php');
if (in_array($_POST['login'].':'.$_POST['password']."\r\n",$f)) {print "Вошли";}
else {print "Облом";}
} else {
?>
<form method = "post">
Логин: <input type = "text" name = "login"><br />
Пароль: <input type = "text" name = "password"><br />
<input type = "submit" value = "Вход">
</form>
<?
}
?>
|
|
|

02.11.2008, 15:32
|
|
Постоянный
Регистрация: 19.02.2008
Сообщений: 438
Провел на форуме: 956872
Репутация:
186
|
|
Да ладно, я всё это мутил ради самообразования(  ), cms я пока писать не собираюсь) Но всеравно спасибо)
|
|
|

04.11.2008, 00:40
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
base.php:
PHP код:
<? header("Location: index.php"); die('хм..');
admin:test
?>
|
|
|

04.11.2008, 01:46
|
|
Новичок
Регистрация: 02.02.2006
Сообщений: 28
Провел на форуме: 351198
Репутация:
54
|
|
советую в цикл foreach добавить break;
Код:
if($login == $user && $password == $pass) {
print "Вошли";
$good = 1;
break;
}
и ещё:
переменные $good и $bad лучше объявить:
Код:
$f = file("base.php");
$good = 0;
$bad = 0;
и ещё, вот этот код:
Код:
if ($good == 1 && $bad == 1) {
} else {
print "Облом";
}
в случае, если логин и пароль совпадут с первой строкой в файле и записей в нём будет одна, тогда условие не выполнится! (хотя данные корректны)
В любом случае, наличие переменной $bad в коде не оправдано! Лучше убери.
И следует контролировать длину проверяемых данных (функция substr)
Код:
$f = file("base.php");
$good = 0;
if(isset($_POST['login']) && isset($_POST['password']))
{
$p_pass = substr($_POST['password'], 0, 10);
$p_login = substr($_POST['login'], 0, 10);
foreach($f as $d) {
$d = trim($d);
list($user, $pass) = split(":", $d);
if($p_login == $user && $p_pass == $pass) {
$good = 1;
break;
}
}
if ($good == 1) {
print "Вошли";
} else {
print "Облом";
}
} else {
print <<<HERE
......
и ещё в файле base.php аккаунты лучше хранить массивом, а не в текстовом виде, тогда автоматом увеличивается скорость работы скрипта и пропадает угроза безопасеости.
при поиске не нужно будет перебирать все элементы и использовать функцию in_array, а просто обратиться к массиву по индексу.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|