|
|
|
| Всем привет!
Необходимо реализовать авторизацию на админ. страницы. Есть вот такой скрипт:
<?php
if (!defined('Phoenix')) exit;
include_once('dealCommon.php');
function auth()
{
global $_COOKIE, $_POST;
$login = trim($_POST['login']);
$pass = md5($_POST['pass']);
if (!get_magic_quotes_gpc())
{
$login = mysql_escape_string($login);
}
if (!empty($login))
{
$q = mysql_query("SELECT id, level FROM login_user WHERE BINARY login = '$login' and BINARY pass = '$pass'");
if ($r = mysql_fetch_object($q))
{
$sid = md5(uniqid(rand(), 1));
$time = time() + 3600;
mysql_query("UPDATE login_user SET sid = '$sid', exp = $time WHERE id = {$r -> id}");
setcookie("sid", $sid, 0, "/");
return $r -> level;
}
}
$sid = addslashes($_COOKIE['sid']);
if (!empty($sid))
{
$time = time();
$q = mysql_query("SELECT BINARY id, level FROM login_user WHERE sid = '$sid' AND exp >= $time");
if ($r = mysql_fetch_object($q))
{
return $r -> level;
}
}
echo "
<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html;\">
<title>Login to Control Panel</title>
<link href=\"images/dealcenter.css\" type=text/css rel=stylesheet>
</head>
<body bgcolor=\"#f7f7f7\" link=\"#586992\" vlink=\"#586992\" alink=\"#036AB6\">
<TABLE border=\"0\" width=\"100%\" height=\"100%\">
<TR>
<TD><CENTER>
<TABLE CELLSPACING=\"1\" BORDER=\"0\" CELLPADDING=\"0\" BGCOLOR=\"#dae6f1\">
<TR>
<TD><FONT color=\"black\" FACE=\"Verdana, Arial, Helvetica, sans-serif\" size=\"3\"><B> Authorization</B></FONT></TD>
</TR>
<TR>
<TD><TABLE bgcolor=white border=0>
<TR>
<td colspan=3 height=\"15\"></td>
</TR>
<TR><form name=\"auth\" method=\"POST\">
<TD rowspan=\"3\" width=\"70\"><center><IMG SRC=\"images/secure.jpg\" WIDTH=\"55\" HEIGHT=\"55\" BORDER=\"0\" ALT=\"\"></TD>
<TD><FONT color=\"#000000\" FACE=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><B>Login:</B></TD>
<TD width=\"100\"><input type=\"text\" style=\"width:130\" name=\"login\"></TD>
</TR>
<TR>
<TD><FONT color=\"#000000\" FACE=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><B>Password:</b></TD>
<TD><input type=\"password\" style=\"width:130\" name=\"pass\"></TD>
</TR>
<TR>
<TD><input type=\"hidden\" name=\"action\" value=\"check\"></TD><TD><input type=\"submit\" class=\"button\" style=\"WIDTH:90\" value=\"Login\"></TD>
</form></TR>
<TR>
<td colspan=3 height=\"10\"></td>
</TR>
</TABLE></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</body>
</html>";
exit;
}
?>
|
Можно ли назвать это достаточно хорошей защитой админ. страниц? | |
|
|
|
|
|
|
|
для: Vados
(28.05.2007 в 00:30)
| | if (!get_magic_quotes_gpc()) вызван слишком поздно и учитывает не все варианты развития событий. Это то, что видно сразу. Завтра может еще что-нибудь найду.
И что значит слово BINARY , постоянно повторяемое?
Ответить желательно со ссылкой либо на стандарт, либо на мануал. | |
|
|
|
|
|
|
|
для: Trianon
(28.05.2007 в 00:38)
| | Если при создании таблицы не был задан атрибут BINARY для столбцов, то величины в столбцах типа CHAR и VARCHAR сортируются и сравниваются без учета регистра. При задании атрибута BINARY величины в столбце сортируются и сравниваются с учетом регистра в соответствии с порядком таблицы ASCII на том компьютере, где работает сервер MySQL. Атрибут BINARY не влияет на процессы хранения или извлечения данных из столбца.
Атрибут BINARY является "прилипчивым''. Это значит, что, если в каком-либо выражении использовать столбец, помеченный как BINARY, то сравнение всего выражения будет выполняться как сравнение величины типа BINARY.
Касаемо стандарта, то думаю, здесь может помощь расканье в доке http://www.mysql.com
Встречный вопрос, а какие варианты нужно еще учесть? | |
|
|
|
|
|
|
|
для: Vados
(28.05.2007 в 01:02)
| | Это всё так, только почему этот атрибут оказался в тексте запроса SELECT , а не в описании таблицы (Запрос CREATE TABLE)?
Нужно учесть вариант, что кому-то захочется ввести апостроф, кавычку, обратный слэш в поле пароля. В этом случае криптошеш md5 у Вас будет посчитан неправильно. | |
|
|
|
|
|
|
|
для: Vados
(28.05.2007 в 00:30)
| | $_COOKIE и $_POST и так суперглобальные массивы. | |
|
|
|