блокирование логина при попытке его использования с 2-х разных IP

Sophia

Новичок
Блокирование логина при попытке его использования с 2-х разных IP - Сильно обновлено!

я делаю для себя один маленький проект, на который доступ будет только моим самым близким друзьям (пользователей будет не более 10)

доступ на каталог уже разграничен с помощью скрипта

мне очень Важно, чтобы логинами/паролями не могли воспользоваться другие люди...

для этого я сейчас установила скрипт который хранит логины в базе данных, ведет лог заходов, а также переадресовывает на разные страницы в зависимости от логина... вот структура базы:

таблица log_login:

username varchar(20)
password varchar(50)
date varchar(20)
time varchar(20)
ip_addr varchar(20)


таблица authorize:

username varchar(20)
redirect varchar(100) - адрес страницы, на которую будет переадресован пользователь в зависимости от его логина
last_login date


получается такой лог:

Username: test
Date: 2007-08-01
Time: 02:22
IP Addres: 99.99.99.999


если под тем же логином зайдет человек с другого IP это будет отражено отдельной записью в логе (с указанием времени)

помогите мне, пожалуйста, сделать так, чтобы если в течении 12 часов логин используется со второго IP то меняется страница (поле redirect таблицы authorize), на которую будет переадресован пользователь (там я напишу, что логин временно заблокирован)

подскажите, пожалуйста, какие и куда строки нужно дописать в скрипт редиректа (см. ниже)


а вот собственно скрипт редиректа, который обрабатывает форму:

=============================
PHP:
<?

//prevents caching
header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: post-check=0, pre-check=0",false);
session_cache_limiter();

session_start();

//clear session variables
session_unset();


//require the functions file
require ("config.php");
require ("functions.php");

//check to see if cookies are already set, remember me
if ((!$lr_user) || (!$lr_pass))
{

$username = $_POST[username];
$password = $_POST[password];

}else{

$username = $lr_user;
$password = $lr_pass;

}

//if username or password is blank, send to errorlogin.html
if ((!$username) || (!$password)) 
{

	header("Location:$base_dir/errorlogin.html");
	exit;
}

//sets cookies to remember this computer if the user asks to
if ($_POST[remember] == "Yes")
{
setcookie("lr_user", $username, $duration, "/", $domain);
setcookie("lr_pass", $password, $duration, "/", $domain);
}

if ($_POST[activate] == "Yes")
{
		//make the connection to the database
		$connection = @mysql_connect($server, $dbusername, $dbpassword) or die(mysql_error());
		$db = @mysql_select_db($db_name,$connection)or die(mysql_error());
				
		//build and issue the query
		$sql ="UPDATE $table_name SET verified = '1' WHERE username = '$_POST[username]'";
		$result = @mysql_query($sql,$connection) or die(mysql_error());
}

//sets session variables
sess_vars($base_dir, $server, $dbusername, $dbpassword, $db_name, $table_name, $username, $password);

//check to see if the user has to change their password
if ($_SESSION[pchange] == "1")
{
	$_SESSION[redirect] = "$base_dir/pass_change.html";
}

//check to see if the user has activated the account
if ($_SESSION[verified] == "0")
{
	$_SESSION[redirect] = "$base_dir/not_activated.html";
}

//make the connection to the database
$connection = @mysql_connect($server, $dbusername, $dbpassword) or die(mysql_error());
$db = @mysql_select_db($db_name,$connection)or die(mysql_error());
		
//build and issue the query
$sql ="SELECT * FROM banned";
$result = @mysql_query($sql,$connection) or die(mysql_error());

while ($sql = mysql_fetch_object($result)) 
	{
	$banned = $sql -> no_access;
	if ($username == $banned || $REMOTE_ADDR == $banned)
		{
			include ('banned.html');
			exit;
		}
	}

$last_log = last_login();

//updates table with last log as now
$sql = "UPDATE $table_name SET last_login = '$last_log' WHERE username = '$_SESSION[user_name]'";
$result = @mysql_query($sql,$connection) or die(mysql_error());

if (($_SESSION[redirect] != "$base_dir/errorlogin.html") && ($log_login == "1"))
{
	include('loglogin.php');
}

//redirects the user	
header("Location:$_SESSION[redirect]");

?>
=============================





София
 

dimagolov

Новичок
самим скриптом на форуме не помогают.

а что до идей
1. доступ надо будет разгранчивать на уровне не апача (htaccess), а внутри скриптов, через регистрацию в БД.
2. пишем все логины и активность залогиненых пользователей в базу и при попытке зайти под другим IP проверяем IP на совпадение.

Но в общем случае так делать нельзя, потому что сейчас у большинства IP динамические и при обрыве-востановлении конекта пользователя будет на час отбивать от сайта.
 

Wicked

Новичок
Sophia
вообще, если пользователи сознательные, они сами не будут давать кому попало свои логины-пароли. А если им захочется слить информацию с сайта кому-нибудь еще, то тут никакие средства не помогут.
 

Sophia

Новичок
Автор оригинала: Wicked
Sophia
вообще, если пользователи сознательные, они сами не будут давать кому попало свои логины-пароли. А если им захочется слить информацию с сайта кому-нибудь еще, то тут никакие средства не помогут.
да это понятно, но это может произойти и "случайно"

у одной моей подруги как раз был такой случай - у нее завелся троян, который отправлял с ее компа какую-то информацию владельцу трояна


я просто почитала этот форум (столько много действительно полезных советов и ответов на вопросы!) и подумала, что мою маленькую проблему СПЕЦИАЛИСТЫ сразу смогут решить (причем потратят на это несколько минут своего драгоценного времени)

ничего похоже я в поиске не нашла и подумала, что это может быть интересно и другим
 

dimagolov

Новичок
Sophia, надо не заводить троянов вместо того, чтобы выдумывать как жить с ними. ну и регулярно менять пароли на критичных акаунтах. реально можно блокировать повторный логин с другого адреса на минут 10-15 ради того, чтобы быть уверенным что только один экземпляр пользователя активен в каждый момент времени, часто в этом есть и смысл и необходимость, а web приложения не позволяют серверу однозначно определять момент ухода пользователя. более длинные задержки череваты разными боками во вполне нормальных ситуациях.

Специалисты тут не для того, чтобы решать чьи-то любые, пусть даже пустячные проблемы. Они тут для того, чтобы подсказать какое правильное и оптимальное решение будет у вашей задачи. И далеко не всегда пути решение такие, как предполагает автор. Более того, не всегда поставленную задачу надо вообще решать, потому что бессмысленных задач более чем достаточно встречается, так как они часто являются путем решения некой более общей задачи.

Про безопастность. В закрытых системах часто реализуют жесткую привязку логинов к статическим IP пользователей в комбинации с аппаратным контролем IP-MAC-порт коммутатора. Таким образом пользователь привязывается к конкретному физическому носителю, а это позволяет организоавывать контроль доступа к информации в комбинации с контролем доступа в конкретное помещение. Что конечно при определенных обстоятельствах все равно позволяет получить несанкционированный доступ, но все же значительно его усложняет.
 

push

Новичок
как вариант реализации можно вот такое сделать, использовать mod_auth_mysql для apache. Авторизация через бд, так что от этого плясать можно хорошо и комфортно...
и кстати не обязательно удалять юзера если используете файл в качестве хранения юзера, можно добавлять перед ним # это его просто заблокирует... проще будет опять же открыть доступ если ошибка была...
 

Wicked

Новичок
Sophia
ну и причем тут "в течение часа" и прочая ерунда? Не сидеть же твоим подругам на твоем сайте круглосуточно :)

Если троян украдет пароли, то и доступ его владелец рано или поздно он получит.

Так что Вам не сайт надо переделывать, а подругам anti-spyware ставить :)
 

Sophia

Новичок
это просто был один из многочисленных вариантов, как мой пароль может оказаться у других людей (у нее уже давно все стоит KIS)... больше всего меня, конечно, волнует вариант при котором пароль специально передадут другому человеку (2 курс института... сами понимаете - сегодня лучшие подруги, а завтра...)

жаль, что здесь похоже не получится получить помощь как я надеялась :( :( :(

неужели придется своими примитивными приемами обходиться?


вот кстати, мой супер-примитивный обходной путь:

так как людей не много я могу сделать разные входы, которые по сути будут одной и той же страницей, собранной из одного и того же большого куска (через include) + уникальный счетчик на каждой, который будет фиксировать IP и время захода

привязку к логину я сделать не могу - поэтому счетчиков будет много (для каждой страницы свой)

но этот способ все-равно не даст мне возможности сразу пресечь вход других пользователей - я только потом увижу, что страницу просматривали под одним логином с разных IP (так как почти все потенциальные посетители сидят в локалках с постоянным IP, а остальные в СТРИМ ADSL WIFI, который я сама вообще очень редко переподключаю - только когда глюки провайдера... то 2 IP будут почти точно означать, что пользуется кто-то еще)


ну помогите мне, пожалуйста, чтобы мне не заниматься это хренью, которую я придумала в обход :rolleyes:
 

Wicked

Новичок
Недавно поднималась такая же тема, но я ее не нашел. Лично мое предложение там было следующим: у каждого пользователя попросить их ню-фотографии, которые показываются сразу после логина :) Пыла сдавать кому бы то ни было свои явки-пароли у них явно поубавится.

Еще, следуя той теме, нужно различать следующие ситуации: либо вы хотите, чтобы посторонний человек вообще не смог воспользоваться системой, либо вы хотите сделать так, чтобы он не мог ей полноценно пользоваться, если речь идет про постоянный доступ. В первом случае что-либо сделать - дело гиблое. Во втором, действительно, поможет фиксирование IP на час.
 

Sophia

Новичок
для меня все-таки, главное, чтобы посторонние не могли полноценно пользоваться

в моем примере я вообще допускала, что посторонний зайдет через 1 час 1 секунду после нормального хозяина и его при этом ни в чем не заподозрят (я надеюсь, что нормальные пользователи будут достаточно часто заходить под своими логинами)

но лучше все-таки, наверное, заменить (я поправила первый пост) 1 час на 12 часов - т.е. если посторонний зайдет даже через 11 часов 59 минут после входа владельца аккаунта, то аккаунт сразу блокируется, а если посторонний зайдет через 12 часов 1 минуту, то ничего не происходит и "чужак" нормально смотрит мой сайт (я его возможно потом поймаю в логах...)

и я не против вообще блокировать логин (мне просто сразу позвонят и скажут, что логин перестал работать... а я проверю какой IP сейчас у человека и вручную включу назад логин, если все нормально)

в этой варианте Вы сможете мне помочь?
 

dimagolov

Новичок
Автор оригинала: Sophia
но лучше все-таки наверное лучше заменить (я поправлю первый пост) 1 час на 12 часов
проще пароль убивать каждый раз после логина а для следующего юзер звонит и спрашивает пароль, который админ и генерит в этот момент и задиктовывает вслух. Посде чего заход возможен в течении 1-2 минут с момента генерации, то есть вбить пароль и нажать login, чтобы не успели продиктовать подруге.

так как для каждого юзера будет создаваться сессия, которую оставлять жить на час-два, то перелогиниваться придется по большей части раз в день.

и накакая проверка IP не нужна :)
 

Sophia

Новичок
Автор оригинала: dimagolov
проще пароль убивать каждый раз после логина а для следующего юзер звонит и спрашивает пароль, который админ и генерит в этот момент и задиктовывает вслух. Посде чего заход возможен в течении 1-2 минут с момента генерации, то есть вбить пароль и нажать login, чтобы не успели продиктовать подруге.

так как для каждого юзера будет создаваться сессия, которую оставлять жить на час-два, то перелогиниваться придется по большей части раз в день.

и накакая проверка IP не нужна :)
очень смешно ;)

одно дело, когда человек не сможет сразу зайти из-за смены IP (ну не всегда я дома у компьютера сижу), а другое дело, что *добропорядочные* пользователи не смогут зайти пока я не дойду до дома (мое присутствие на сайте вовсе не обязательно... остальные тоже могут находится на нем без меня)

да и по 8-10 раз в день создавать пароли как-то круто очень :)
 

HraKK

Мудак
Команда форума
Sophia
Что же у вас за сайт что вы так хотите его защитить. Это не празное любопытсво, разьясните будьте любезны.
 

WP

^_^
Sophia, алгоритмы обнаружения утечки (манипуляции с историей входов (IP-адресов) которые прозвучали) следует рассматривать в последнюю очередь. Начать нужно с методов предотвращающих перехват идентификационных данных третьими лицами. Для этого используйте SSL (Secure Sockets Layer) и при авторизации передавайте md5-оттиск пароля и псевдослучайной соли, которая передается с сервера отдельно (эти операции выполняются на Javascript), это необходимо чтобы помешать неправомерному доступу в случае перехвата данных. Помимо этого необходимо защититься от троянских коней которые следят за парольными формами и нажатиями клавиш. Во-первых полю (HTML-элементу input) необходимо присвоить тип text, а не password, для того чтобы форма не воспринималась троянскими конями как парольная, а для того чтобы текст не был виден при вводе нужно указать цвет текста идентично фону поля (либо, если Вам позволят знания, можно поставить хук на onkeydown и эмулировать парольное поле). Во-вторых, если этого недостаточно, можно сделать ввод с экранной клавиатуры которая располагается в произвольном месте на экране, если и этого недостаточно то можно сделать передачу на основе кликов (или движений) по картинке.
Помимо этого нужно сделать привязку сессии к IP-адресу, а также можно фиксировать все IP-адреса и предоставить возможность указать в настройках доверенные маски IP-адресов, и если происходит попытка входа с другого IP, запрещать доступ с записью в журнал. Если же доверенные маски не указаны, блокировать доступ с записью в журнал если произведена попытка авторизации при существовании другой активной сессии.
 

Baranov_Dron

Новичок
хм недавно видел защиту интересную, в твоём случае самое оно! короче бери на сайте моделей фотки девушек 20ти можно больше.
дальше кидай их в папку images_security. и во время авторитизации помимо логина-пароля выводи 4-10 фоток. среди этих фото одна должна быть ты, отки должны грузится строга рэндумно. и внизу надпись выбирите самую красивую девушку. ну естественно ею будешь являться ты!!! если да раза ошибаются бан на час к примеру и письмо тебе типа сайт атакуют) ещё один плюс если среди друзей парни, то узнаешь их мнение о тебе) если подруги то тоже)))
ИМХО!!! лучшая защита креативная!!! а не всекие там md5 кеши... капчи...
 

baev

‹°°¬•
Команда форума
Sophia, завтра (второго августа) подъезжайте к Парку культуры в городе Москве — там можно будет выбрать защиту для сайта (лучшее соотношение цена/качество — гарантировано)
 

Baranov_Dron

Новичок
2 HraKK
>для меня все-таки, главное, чтобы посторонние не могли >полноценно пользоваться
 

HraKK

Мудак
Команда форума
Baranov_Dron
И чем твоя идея помешает ПОЛНОЦЕННО пользоватся? Расскажи пожалуйста?
Учти что я знаю чужой пароль и как он выглядит.
 
Сверху