|
|
|
| Вот переписал на сесии. Так надежно? Если нет то что поправить.
<?
session_start();
require_once ("config.php");
echo $_SESSION['username'];
if(!$_SESSION['username'])
{
echo "
<center>
<table border=0 cellspacing=0 cellpadding=0 width=40% height=100% >
<tr>
<td>
<center>
<table border=0 cellspacing=00 cellpadding=50 bgcolor=#ffffff width=500>
<tr>
<td>
<img src='skin/31.png' align=left ><br><br>
<form action='armor.php' method='POST'>
<center>Пользователь: <input type=text name=user size='25'><br><br>
<center>Пароль: <input type=password name=pswrd size='25'><br><br>
<center><input type='submit' name=go value='Войти в панель администрирования'>
</form><br><br>
<center><a href='../'>На главную страницу</a></center>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</center>";
if(isset($go))
{
$pswrd = MD5($_POST['pswrd']);
$user = $_POST['user'];
$nme = mysql_query("SELECT pass = '$pswrd' FROM users WHERE user='$user'");
if(!$nme) exit ("Ошибка выполнения запроса");
if (mysql_num_rows ($nme) > 0)
{
$username = md5($_POST['pswrd'],$_POST['user']);
$_SESSION['username'] = "$username";
echo "<html><head><META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php'></head><html>";
}
}
exit;
}
?>
|
| |
|
|
|
|
|
|
|
для: Doorgen
(23.12.2008 в 15:57)
| | Что не кто не может подсказать надежно это или нет? | |
|
|
|
|
|
|
|
для: Doorgen
(24.12.2008 в 08:50)
| | Мягко говоря это ненадёжно...
где вы взяли вот это?
$nme = mysql_query("SELECT pass = '$pswrd' FROM users WHERE user='$user'");
|
| |
|
|
|
|
|
|
|
для: Doorgen
(24.12.2008 в 08:50)
| | эта 5 | |
|
|
|
|
|
|
|
для: Doorgen
(23.12.2008 в 15:57)
| | на мой взгляд запрос к бд лучше такой
SELECT * FROM user WHERE login='$login' AND pass='$pass'
И в сессии заносить так же id пользователя, на мой взгляд так проще реализовать работу. | |
|
|
|
|
|
|
|
для: SteAlzzer
(24.12.2008 в 10:26)
| | Запрос уже поменян давно :) просто редактировать не могу первое сообщение :)
А насчет id у меня только 1 пользователь, это как бы вход в админку. | |
|
|
|
|
|
|
|
для: Doorgen
(24.12.2008 в 11:53)
| | тогда былобы не плохо сделать авторизацию через .htaccess | |
|
|
|
|
|
|
|
для: Doorgen
(24.12.2008 в 11:53)
| | тогда былобы не плохо сделать авторизацию через .htaccess | |
|
|
|
|
|
|
|
для: Doorgen
(24.12.2008 в 11:53)
| | тогда былобы не плохо сделать авторизацию через .htaccess | |
|
|
|
|
|
|
|
для: SteAlzzer
(24.12.2008 в 12:08)
| | О да! | |
|
|
|
|
|
|
|
для: Zend72
(24.12.2008 в 12:16)
| | А если все таки посмотреть на то что я написал, а не то что можно, это надежно?
Другой вариант просто не приемлем. Только сессии | |
|
|
|
|
|
|
|
для: Doorgen
(25.12.2008 в 17:46)
| | Нет, не надёжно. Вы не обработали переменную при запросе и это чревато инъекцией. ВОО(.............)ООТ ТАКЕННАЯ ИГЛА!!! | |
|
|
|
|
|
|
|
для: Doorgen
(25.12.2008 в 17:46)
| | само использование сессий достаточно надежно
единственное,
что хотелось бы посоветовать не использовать в запросах непроверенных переменных,
вы про инъекции что-нибудь слышали? | |
|
|
|
|
|
|
|
для: Avanturer
(25.12.2008 в 17:58)
| | Нет не слышал, ну думаю догадываюсь про что говориться.
Наверное про то что можно скрипт вписать в это поле. Я прав?
А если я проверю их тогда так можно защититься? | |
|
|
|
|
|
|
|
для: Doorgen
(26.12.2008 в 22:38)
| | Не проверить, а правильно обработать.
if(!get_magic_quotes_gpc())
$_POST['user'] = mysql_escape_string($_POST['user']);
$user = $_POST['user'];
|
| |
|
|
|
|
|
|
|
для: AcidTrash
(26.12.2008 в 22:53)
| | Вот так нормально?
if(!$_SESSION['username'])
{
echo "<center>
<table border=0 cellspacing=0 cellpadding=0 width=40% height=100% >
<tr>
<td>
<center>
<table border=0 cellspacing=0 cellpadding=50 bgcolor=#ffffff width=600>
<tr>
<td>
<img src='skin/31.png' align=left ><br><br>
<form action='header.php' method='POST'>
<center>Пользователь: <input type=text name=user size='25'><br><br>
<center>Пароль: <input type=password name=pswrd size='25'><br><br>
<center><input type='submit' name=auto value='Войти в панель администрирования'>
</form><br><br>
<center><a href='../'>На главную страницу</a></center>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</center>";
if(isset($auto))
{
$user = mysql_escape_string($_POST['user']);
$pswrd = mysql_escape_string(MD5($_POST['pswrd']));
$nme = mysql_query("SELECT * FROM user WHERE user='$user' and pswrd = '$pswrd'");
if(!$nme) exit ("Ошибка выполнения запроса");
if (mysql_num_rows ($nme) > 0)
{
$username = md5($_POST['pswrd'],$_POST['user']);
$_SESSION['username'] = "$username";
echo "<html><head><META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php'></head><html>";
}
}
exit;
}
|
| |
|
|
|
|
|
|
|
для: Doorgen
(27.12.2008 в 15:04)
| | Нет, не нормально.
if(isset($auto))
{
Вот использование это полный п... ц
Если register_globals будет выключен условие не сработает.
Проверяйте if(isset($_POST[auto]))
Не надо быть зависимым от register_globals, тем более вам это может стать большой проблемой.
Далее нет проверки, включены ли магические кавычки, а применять без этого mysql_escape_string не целесообразно.
Пароль, смысла нет обрабатывать, если вы уже его захешировали.
P.S. Выше привел пример. | |
|
|
|
|
|
|
|
для: AcidTrash
(27.12.2008 в 21:18)
| | А могли бы вы переделать как надо, эту авторизацию. Я бы вам был очень благодарен.
А то не совсем понимаю что нужно изменить. | |
|
|
|
|
|
|
|
для: Doorgen
(29.12.2008 в 14:54)
| | Переделать не переделать, но кое что посоветовать я Вам наверное смог бы...
Для начала позаботьтесь о магических кавычках, вот тут хотя бы почитайте. Ну и:
<?
session_start();
require_once ("config.php");
if(!$_SESSION['username'])
{
// тег <center> не желателен к применению, так как выведен из обихода в новом стандарте
// и вообще лучше поменять блоки местами и ывыводить html не через echo, а в чистом виде
echo "<center>
<table border=0 cellspacing=0 cellpadding=0 width=40% height=100% >
<tr>
<td>
<center>
<table border=0 cellspacing=0 cellpadding=50 bgcolor=#ffffff width=600>
<tr>
<td>
<img src='skin/31.png' align=left ><br><br>
<form action='header.php' method='POST'>
<center>Пользователь: <input type=text name=user size='25'><br><br>
<center>Пароль: <input type=password name=pswrd size='25'><br><br>
<center><input type='submit' name=auto value='Войти в панель администрирования'>
</form><br><br>
<center><a href='../'>На главную страницу</a></center>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</center>";
// Вот это откуда взялось - не понятно.
if(isset($auto))
{
$user = mysql_escape_string($_POST['user']);
// Тут обработка явно лишняя, всё равно из хэша иньекции не сделать.
//$pswrd = mysql_escape_string(md5($_POST['pswrd']));
$pswrd = md5($_POST['pswrd']);
// Здесь совсем не обязательно перебирать все записи, достаточно одной.
// И еще, переменные внутри кавычек конечно интерпретируются, но это делает код не очень читаемым,
// а самое главное, такой запрос проходит в почти 1,5 раза медленнее.
//$nme = mysql_query("SELECT * FROM user WHERE user='$user' and pswrd = '$pswrd'");
$nme = mysql_query("SELECT * FROM users WHERE user='".$user."' AND pswrd = '".$pswrd."' LIMIT 1");
// Оставлять юзера один на один с пустым экраном и непонятной надписью не очень то красиво.
// Отправьте его на форму хотя бы.
if(!$nme)
{
//exit ("Ошибка выполнения запроса");
header("location: header.php");
exit();
}
if (mysql_num_rows ($nme) > 0)
{
// Вот эта комбинация совсем не понятна, какая разница, что записано в переменную
// сессии, можно просто "ok" или 1
//$username = md5($_POST['pswrd'],$_POST['user']);
//$_SESSION['username'] = $username;
$_SESSION['username'] = 1;
// Тут мне кажется уместнее был бы хидер
//echo "<html><head><META HTTP-EQUIV='REFRESH' CONTENT='1; URL=index.php'></head><html>";
header("location: index.php");
}
}
// И это в конце скрипта совсем не обязательно.
//exit;
}
|
| |
|
|
|
|
|
|
|
для: Николай2357
(29.12.2008 в 18:16)
| | С пустым экраном я пользователя не оставляю, если пароль не верен то форма не пропадает.
Не вижу вообще не каких изменения в защите.
А почему center вышел? Все работает причем во всех браузерах. И сомневаюсь что куда то денется. | |
|
|
|
|
|
|
|
для: Doorgen
(31.12.2008 в 00:22)
| | 1.Форма у Вас пропадет при неудачном запросе.
2. А о какой защите вообще речь, если тут не понятно что и как должно работать. Откуда Вы достали переменную $auto? Я Вам написал советы по оптимизации кода, а защита - дело индивидуальное. Или Вы хотите потом кого то крайним сделать, мол это не я защиту писал? Сами, сами...))))
3. Не факт что будет работать через пару тройку лет. Или Вы сайт на один день делаете? В новом стандарте разметки такого тега нет, значит и новые версии браузеров могут их проигнорировать. | |
|
|
|
|
|
|
|
для: Doorgen
(31.12.2008 в 00:22)
| | Примерно такая структура должна быть чтобы не было пустых страниц
<?
define('MQ', get_magic_quotes_gpc());
// MQ чтобы было видно внутри функций
$error = '';
function mq_strip($txt, $length=1024) { // удаление слэшей
// можно убрать ограничение $length
// , но сним можно например mq_strip($msg, 2048) ограничить сообщения
$txt = (MQ) ? stripslashes(trim($txt)): trim($txt);
return substr($txt, 0, $length);
} // end of mq_strip
session_start();
if(isset($_POST['user']) && isset($_POST['pswrd']) ) {
// если заполонили и отправили
$user = mq_strip($_POST['user'], 25);
$pswrd = mq_strip($_POST['pswrd'], 25); // 25 maximum
if ($user == '')
$error .= '<div>Не указан пользователь.</div>';
else $_SESSION['username'] = htmlspecialchars($user);
// сразу htmlspecialchars чтобы выводить
if (strlen($pswrd) < 3) // 3 minimum
$error .= '<div>Не указан пароль.</div>';
else if ($error == '') {
// всё заполнено
require_once ("config.php");
$sql = mysql_query('SELECT u_id FROM users WHERE user="'
. mysql_escape_string($user) . '" AND pswrd = "'
. md5($pswrd) . '" LIMIT 1');
if(!$sql) $error .= '<div>Ошибка запроса.</div>';
else if (mysql_num_rows($sql) > 0) {
$_SESSION['u_id'] = mysql_result($sql, 0);
// тоже не помешает , если конечно в таблице есть u_id
header("location: index.php");
//там уже можно показать echo $_SESSION['username'];
exit;
}
else $error .= '<div>Ошибка идентификации.</div>';
}
//
}
?>
<style>
.error * { text-align:center; color: red; border:double 3px darkred; padding: 1ex;}
</style>
<?
if ($error != '') echo '<div class="error">'
. $error . "</div>\n";
?>
<center>
<table border=0 cellspacing=0 cellpadding=0 width=40% height=100% >
<tr> <td> <center>
<table border=0 cellspacing=0 cellpadding=50 bgcolor=#ffffff width=600>
<tr><td><img src='skin/31.png' align=left ><br><br>
<form action='' method='POST'>
<center>Пользователь: <input type=text name=user size='25' value="<?
if (isset($_SESSION['username']))
echo $_SESSION['username'];
?>"><br><br>
<center>Пароль: <input type=password name=pswrd size='25'><br><br>
<center><input type='submit' name=auto value='Войти в панель администрирования'>
</form><br><br>
<center><a href='../'>На главную страницу</a></center>
</td></tr></table>
</center>
</td></tr></table>
</center>
| Но не запускал , и SELECT u_id FROM users | |
|
|
|
|
|
|
|
для: xx77
(31.12.2008 в 03:26)
| | >define('MQ', get_magic_quotes_gpc());
>// MQ чтобы было видно внутри функций
А get_magic_quotes_gpc() внутри функций не видно? | |
|
|
|
|
 1.2 Кб |
|
|
для: Root
(31.12.2008 в 11:39)
| | Мне так больше нравится.
Легко изменить, если таких функций много , и всётаки чуть менее затратно , читать константу , чем вызывать функцию,если надо много раз вызывать.
Вот прикрепил например тест.
Не на много конечно, и может повлиять только если много-много вызовов функций
, но всётаки что-то в этом есть :)
// Хотя возможно был смысл в том чтобы запихать определение этой константы вместе с определением функции в ту часть кода которая выполняется только если передана форма , но так оно виднее :) | |
|
|
|
|
|
|
|
для: xx77
(31.12.2008 в 13:29)
| | 1 Форму прошить сессией
2 Капча) | |
|
|
|