|
| |
|
|
| |
для: Suhrob
(22.06.2006 в 07:22)
| | | Вроде разобрался, скрипт внедрил, но заметил такую вещь. Если в файле arp.txt присутствуют примерно одинаковые записи скрипт находит первый вариант и считает его положительным. предположим что обратился пользователь с именем user1 c ip адреса 192.168.33.10 скрипт посчитает результат положительным, так как дальше есть такая запись
192.168.33.101 00:ff:df:bc:aa:aa # user1_1 . Напишите пожалуйста как побороть эту проблему.
------------arp.txt--------------------
192.168.33.1 00:c0:b7:7f:05:d2 # user1
192.168.33.10 03:f0:f0:3b:28:c3 # user2
192.168.33.15 00:b4:d8:87:5a:a7 # sttt
192.168.33.101 00:ff:df:bc:aa:aa # user1_1 | |
| |
|
|
| |
|
|
| |
для: Suhrob
(20.06.2006 в 06:18)
| | | Не получается у меня правильно и красиво все прописать, то ругается на синтаксис, то не хочет переходить на следующую функцию.. Помогите пожалуйста доработать скрипт..
[code]
<?php
// Имя сервера базы данных, например $dblocation = "mysql28.noweb.ru"
// сейчас выставлен сервер локальной машины
$dblocation = "localhost";
// Имя базы данных
$dbname = "UTM5";
// Имя пользователя... Скорее всего будет совпадать с вашим доменным именем
// у нас, например $dbuser = "softtime";
$dbuser = "test";
// Пароль - в комментариях не нуждается ;-)
$dbpasswd = "****";
// Соединяемся с сервером базы данных
$ipaddr = getenv('REMOTE_ADDR');
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) {
echo( "<P>В настоящий момент сервер базы данных не
доступен, поэтому корректное отображение
страницы невозможно.</P>" );
exit();
}
// Выбираем базу данных
if (! @mysql_select_db($dbname,$dbcnx) ) {
echo( "<P>В настоящий момент база данных не доступна,
поэтому корректное отображение страницы
невозможно.</P>" );
exit();
}
// Формируем и выполняем SQL-запрос для посетителя с
// именем $_POST['name']
$query = "SELECT uname FROM ip_groups WHERE uname='".$_POST['user']."'";
$nme = mysql_query($query);
if(!$nme)
{
echo "Ошибка выполнения запроса";
exit();
}
// Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($nme) > 0)
{
// Получаем пароль
$user = mysql_result($nme,0);
// Сравниваем пароль из базы данных и введённый посетителем
if ($_POST['user'] == $user)
$query = "SELECT upass FROM ip_groups WHERE uname='".$_POST['user']."'";
$nme = mysql_query($query);
$old_password = mysql_result($nme,0);
if ($_POST['old_password'] == $old_password)
$old_pass = 1;
else
{
header("Location: test3.php?action=2");
//echo "Ошибка идентификации: неправильный пароль";
exit();
}
//$_POST['user'] = "test2";
// Читаем содержимое файла arp.txt
$contents = file_get_contents("arp.txt");
$pattern = "|".preg_quote($_SERVER['SERVER_ADDR'])."[^\r\n]+".preg_quote($_POST['user'])."|isU";
if(!preg_match($pattern,$contents))
$is_arp = false;
//echo "IP-адреса нет в arp.txt"; если рез-т отриц-ый, нужно чтоб скрипт полез в базу на сверку ip
else $is_arp = true;
//Если рез-т положительный мне нужно, чтоб обработчик
// перешел в низ кода, где $new_pass=$HTTP_POST_VARS ["r_new_password"];
// "IP-адрес присутствует в arp.txt";
if ($is_arp == true)
$query = "SELECT ip FROM ip_groups WHERE ip=INET_ATON('$ipaddr') AND uname='".$_POST['user']."'";
$nme = mysql_query($query);
if(mysql_num_rows($nme) > 0)
$res_m=1;
else
{
$res_m=0;
echo "Это не твой логин!!!!!"; Здесь нужно чтоб его выкидывало при отрицательном рез-те
exit();
}
$new_pass=$HTTP_POST_VARS ["r_new_password"];
if ($_POST['new_password'] == $new_pass)
$query = "UPDATE ip_groups SET upass='".$_POST['new_password']."' WHERE uname='".$_POST['user']."'";
else
{
//echo "Не совпадают поля новый пароль и его подтверждение";
header("Location: test3.php?action=3");
exit();
}
$nme = mysql_query($query);
if(!$nme)
{
echo "Ошибка выполнения запроса";
exit();
}
if(mysql_query($query))
//echo "Смена пароля прошла удачно";
header("Location: test3.php?action=ok");
exit();
}
else
{
//echo "Такого логина нет в системе!";
header("Location: test3.php?action=1");
exit();
}
?>
[code] | |
| |
|
|
| |
|
|
| |
для: cheops
(19.06.2006 в 19:44)
| | | Напиши пожалуйста куда вписать этот кусок кода, я совсем запутался, бегаю между книжкой и тем что ты мне написал. И там если не ошибаюсь, вроде как надо было preg_quote($_SERVER['REMOTE_ADDR']) а не SERVER_ADDR. | |
| |
|
|
| |
|
|
| |
для: Suhrob
(19.06.2006 в 18:46)
| | | А почему в блоке
<?php
else
$is_arp = true;
exit();
$new_pass=$HTTP_POST_VARS ["r_new_password"];
?>
| exit(); стоит - он же всегда будет срабатывать? | |
| |
|
|
| |
|
|
| |
для: Suhrob
(19.06.2006 в 14:00)
| | | Что то проверка на IP не выполняется .. вроде поместил до проверки и внесения в таблицу нового пароля, но он как будто и не видит код для проверки ip. Прошу дальнейшей помощи.
<?php
$dblocation = "localhost";
$dbname = "UTM5";
$dbuser = "test";
$dbpasswd = "****";
// Соединяемся с сервером базы данных
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) {
echo( "<P>В настоящий момент сервер базы данных не
доступен, поэтому корректное отображение
страницы невозможно.</P>" );
exit();
}
// Выбираем базу данных
if (! @mysql_select_db($dbname,$dbcnx) ) {
echo( "<P>В настоящий момент база данных не доступна,
поэтому корректное отображение страницы
невозможно.</P>" );
exit();
}
// Формируем и выполняем SQL-запрос для посетителя с
// именем $_POST['name']
$query = "SELECT uname FROM ip_groups WHERE uname='".$_POST['user']."'";
$nme = mysql_query($query);
if(!$nme)
{
echo "Ошибка выполнения запроса";
exit();
}
// Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($nme) > 0)
{
// Получаем пароль
$user = mysql_result($nme,0);
// Сравниваем пароль из базы данных и введённый посетителем
if ($_POST['user'] == $user)
$query = "SELECT upass FROM ip_groups WHERE uname='".$_POST['user']."'";
$nme = mysql_query($query);
$old_password = mysql_result($nme,0);
if ($_POST['old_password'] == $old_password)
$old_pass = 1;
else
{
header("Location: test.php?action=2");
//echo "Ошибка идентификации: неправильный пароль";
exit();
}
$_POST['user'] = "user5";
// Читаем содержимое файла arp.txt
$contents = file_get_contents("arp.txt");
$pattern = "|".preg_quote($_SERVER['REMOTE_ADDR'])."[^\r\n]+".preg_quote($_POST['user'])."|isU";
if(!preg_match($pattern,$contents))
$is_arp = false;
echo "Это не Ваш логин!";
else
$is_arp = true;
exit();
$new_pass=$HTTP_POST_VARS ["r_new_password"];
if ($_POST['new_password'] == $new_pass)
$query = "UPDATE ip_groups SET upass='".$_POST['new_password']."' WHERE uname='".$_POST['user']."'";
else
{
//echo "Не совпадают поля новый пароль и его подтверждение";
header("Location: test.php?action=3");
exit();
}
$nme = mysql_query($query);
if(!$nme)
{
echo "Ошибка выполнения запроса";
exit();
}
if(mysql_query($query))
//echo "Смена пароля прошла удачно";
header("Location: test.php?action=ok");
exit();
}
else
{
//echo "Такого логина нет в системе!";
header("Location: test.php?action=1");
exit();
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: cheops
(19.06.2006 в 12:09)
| | | Спасибо, буду пробовать.
Ip в базе хранятся в непонятном мне формате, но при таком запросе: select * from ip_groups where ip=inet_aton('172.16.4.88') вроде как можно вытащить ip в читабельном виде. А сами ip адреса хранятся в поле ip этой же таблицы. | |
| |
|
|
| |
|
|
| |
для: Suhrob
(19.06.2006 в 07:59)
| | | А в каком поле и в каком виде хранится IP-адрес в базе данных?
Опеределить имеется ли IP-адрес соответствующий текущему пользователю в файле arp.txt можно при помощи кода
<?php
$_POST['user'] = "user5";
// Читаем содержимое файла arp.txt
$contents = file_get_contents("arp.txt");
$pattern = "|".preg_quote($_SERVER['SERVER_ADDR'])."[^\r\n]+".preg_quote($_POST['user'])."|isU";
if(!preg_match($pattern,$contents)) $is_arp = false; // IP-адреса нет в arp.txt
else $is_arp = true; // IP-адрес присутствует в arp.txt
?>
|
| |
| |
|
|
| |
|
|
| | Всем здравствуйте! Собственно надо организовать проверку на валидность IP клиента:
Есть форма, с помощью которой пользователи могут изменить свой пароль в базе. Форму со скриптом я сделал с помощью этого сайта, огромная благодарность за это, но вот добавили дополнительную задачу. Пароль может изменить только тот пользователь, которому соответсвует его ip адрес. Пользователь имеет два ip адреса, первый вида 172.16.ХХ.ХХ, 10.16.ХХ.ХХ используется, если он использует vpn подключение, этот ip хранится в mysql в той же таблице где хранится его пароль и логин.
Второй ip выдается dhcp сервером и хранится в файле в таком виде: то бишь ip mac login
----------------arp.txt---------------------------------
192.168.33.1 00:c0:b7:7f:05:d2 # user1
192.168.33.10 03:f0:f0:3b:28:c3 # user2
192.168.33.100 00:b0:18:a0:dd:92 # user3
192.168.33.101 00:b4:d8:87:5a:a7 # user4
----------------------------------------------------------
вот сам скрипт для смены пароля:
<?php
$dblocation = "localhost";
$dbname = "test";
$dbuser = "test";
$dbpasswd = "****";
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) {
echo( "<P>В настоящий момент сервер базы данных не
доступен, поэтому корректное отображение
страницы невозможно.</P>" );
exit();
}
// Выбираем базу данных
if (! @mysql_select_db($dbname,$dbcnx) ) {
echo( "<P>В настоящий момент база данных не доступна,
поэтому корректное отображение страницы
невозможно.</P>" );
exit();
}
$query = "SELECT uname FROM ip_groups WHERE uname='".$_POST['user']."'";
$nme = mysql_query($query);
if(!$nme)
{
echo "Ошибка выполнения запроса";
exit();
}
if(mysql_num_rows($nme) > 0)
{
$user = mysql_result($nme,0);
if ($_POST['user'] == $user)
$query = "SELECT upass FROM ip_groups WHERE uname='".$_POST['user']."'";
$nme = mysql_query($query);
$old_password = mysql_result($nme,0);
if ($_POST['old_password'] == $old_password)
$old_pass = 1;
else
{
header("Location: test.php?action=2");
//echo "Ошибка идентификации: неправильный пароль";
exit();
}
$new_pass=$HTTP_POST_VARS ["r_new_password"];
if ($_POST['new_password'] == $new_pass)
$query = "UPDATE ip_groups SET upass='".$_POST['new_password']."' WHERE uname='".$_POST['user']."'";
else
{
//echo "Не совпадают поля новый пароль и его подтверждение";
header("Location: test.php?action=3");
exit();
}
$nme = mysql_query($query);
if(!$nme)
{
echo "Ошибка выполнения запроса";
exit();
}
if(mysql_query($query))
//echo "Смена пароля прошла удачно";
header("Location: test.php?action=ok");
exit();
}
else
{
//echo "Такого логина нет в системе!";
header("Location: test.php?action=1");
exit();
}
?>
|
Так вот надо организовать, дополнительную проверку на соответствие пользователя его ip адресу , то есть для начала выяснить его ip адрес, сопоставить его с тем что в файле, напротив его логина , если в файле не найдено надо пойти в базу и сравнить там, если где то сошлось, то смену пароля можно продолжить, если соответсвие не найдено ни в одном из источников то выкидыаем ошибку, что он пытается изменить не свой логин. Дополнительно все действия пользователей должны записываться в лог, чтоб можно было разобраться кто хулиганит. Лог формата: дата, логин, ip, сделано или не сделано. Помогите пожалуйста внедрить такую проверку, буду очень признателен за любое внимание. | |
| |
|
|
|