ОсновноеRadiotalkПользовательское
MPCHAT - CMS хостинг чатов для профессионалов
90   •   Посмотреть все темы

Запрет или скрытие регистрации

 

25
Tracktor @Tracktor
Всем привет.

Можно ли как-нибудь сделать запрет на регистрацию в чате определённому IP, или хотя бы скрыть ссылку на регистрацию?

Хотелось бы что-то типа "если твой ip такой-то, вывести фразу "Нельзя регистрироваться", иначе - ссылка на регистрацию".
Помогите плиз, сам в этом не соображаю совсем...

3910
Дмитрий @Q-Tec
Нельзя

1095
tip4ik @tip4ik
Всем привет. Спасибо за открытие темы.
Краткое введение. Попросил открыть потому, что тема на самом деле интересная. Я конечно не при делах уже года 3 и ЯС не трогал соответственно столько же, но лично мне категоричный ответ "нельзя" сразу показался слишком резким.
Q-Tec, наверняка имел ввиду, что JavaScript (дальше - ЯС)- клиентский язык, то есть выполняется на машине пользователя, а не на серваке, из чего следует две вещи: 1. Любое ограничение / фильтр, сделаный на ЯС, очень легко обойти, просто просмотрев СОРС или скачав сайт на хард и поправив его (или вообще отключив ЯС в браузере); 2. ИП определить он не может (внеший; внутренний можно при удачном стечении факторов - можно подключить Ява и узнать локальный адрес через нее, по крайней мере так говорят умные люди, я сам хз) . НО...

По пункту 1 - автор и не спрашивал о целесобразности, вопрос был можно или нет. Плюс, на мой взгляд, подобное решение на ЯС защитит то, что практически никто при бане ИП не подумает, что это реализовано через ЯС ))) В любом случае против чайника может прокатить, если не распространяться о способе защиты.

Пункт 2 - мы вообще-то коворим о кодинге, а это значит всегда есть нестандартное решение (что и сделало тему интересной 😊 )

Так вот что сразу на вскидку пришло в голову: действительно чисто на ЯС написать такое нельзя, но я так понимаю и не это автора интересует. Важна не чистота кода (видимо), а то, что код можно реализовать самостоятельно в рамках мпчат (кстати, тут уж извените, я не в курсе как там сейчас все эти формы регистрации выглядят, так что более опытные товарищи, я уверен, меня поправят и дополнят если что). А это значит, что мы и не должны получать ИП сами - функцию можно повзаимствовать просто со стороннего скрипта стороннего проекта, а уж всяких тулзов такого рода в сети хватает. Я взял из яндекса первый попавшийся - ********** - не сочтите за рекламу.
Ну а дальше дело техники:
1. вставляем скрипт в блок, который при возможности пихаем вверх страницы (чтоб он загружался пораньше и не палил контору ))) )
<div id='ip_adress' style='display:none'><script src="http://comp-info.ru/serves/ip/"></script></div>
Блок я сделал невидимым, чтобы не мусолить глаза на странице, но если что можно сделать style='display:block'.

2. Вставляем форму регистрации или ссылку на нее (уж не знаю как там принято у вас) в блок, который тыкаем в произвольное место на странице, но опять же при возможности - пониже (смысл в том, чтобы даже при медленной загрузке все считывалось браузером в последовательности: скрипт_ИП - скрипт_описанный_в_3 - форма регистрации - и не светил суть)
<div id='registr' style='display:block'> ТУТ ИДЕТ ССЫЛКА НА РЕГ. или КОД ФОРМЫ или КАРТИНКА С СИСЬКАМИ или ЕЩЕ ЧТО </div>
3. Пишем простенький скриптик, который будет считывать содержимое блока 1, сверять его с адресом забаненого и менять при совпадении значения блока с ИП содержимое блока 2 (и ставим при возможности после блока 1, но перед 2)

<script>
function CheckIp(){
var GuestAdress = document.all["ip_adress"]; // даем удобоваримое название блоку 1
var str = GuestAdress.innerText; // получаем адресс из блока 1
if (str == '55.66.77.88'){ // сравниваем полученый адрес с IP врага (вместо цифр ставим IP)
var Altern = document.all["registr"]; // даем удобоваримое название блоку 2
Altern.innerHTML = "ПНХ - регистрация закрыта!";} // Изменяем оригинально содержимое блока 2 на то, что должен видеть враг
}
</script>

Вуа-ля!

можно просто скрыть от него блок регистрации сделав вместо
var Altern = document.all["registr"];
Altern.innerHTML = "ПНХ - регистрация закрыта!";}

document.getElementById('registr').style.display='none';}
Т.к. ЯС очевидно не твой конек, поясню, что все что идет в коде после // - это комментарии и их можно удалить (вместе со слэшами, т.е. косыми). Главное ничего остального не трогай и все так и должно быть на своих строчках.


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

P.S.: на всякий случай - не имеет смысла оставлять адресс страницы регистрации стандратным а'ля ввв.мойчат.ком/регистрация 😀
P.P.S.: ну уж совсем на всякий случай: не забудь в <body> вставить onload=CheckIp()

Отредактировано tip4ik - 06.02.2011
6703
Андрей @ZloVeЩиЙ
...мы и не должны получать ИП сами - функцию можно повзаимствовать просто со стороннего скрипта стороннего проекта...

зачем сторонние сервера использовать когда можно и самому IP вытащить?
При наличии информера работает переменная +i_ip+, далее делаем выводы))

Отредактировано ZloVeЩиЙ - 05.02.2011
1095
tip4ik @tip4ik
Если на мпчат есть доступный информер (уж простите - не знаю), то я вообще не понимаю о чем речь и почему никто попросту не ответил человеку по существу. Ну и суть в другом, откуда таскать ИП дело третье, человек не знал как перетащить его в ЯС (и уверен не только он)

2970
удалён @Foggy
tip4ik, ура! я хотел попробовать это написать, понимая идею, что можно сторонними скриптами ip определить, но пожалел своего времени) большое спасибо)
реализация очень хорошая)

а вообще, было бы лучше это куда-нибудь по сильнее упрятать) я про ссылку на сторонний определитель ip. хотя бы прописать его загрузку в самом скрипте, а не в html.

p.s. неплохо так называть переменную для забаненных, переменной для стариков))) это я про Altern)
p.p.s. с возвращением, я полагаю?))
p.p.p.s. ещё можно соединить это с базой забаненных) через информер их подключить к странице регистрации сделать вывод в этот скрипт всех ip-адресов.

ZloVeЩиЙ, мне почему-то казалось, что ip мп скриптом можно вывести только на титулке) только сейчас допёрло, что он тоже через информер)

Отредактировано Foggy - 05.02.2011
6703
Андрей @ZloVeЩиЙ
- Если на мпчат есть доступный информер (уж простите - не знаю), то я вообще не понимаю о чем речь и почему никто попросту не ответил человеку по существу?

- не успел физически, как вариант подойдет?

Вопрос не особой важности\нужности, писать скрипт для одного\двух - не вижу смысла.
Подтолкнуть могу...
Условия, str, display:none|block, приравнивание, информер и переменная i_ip все что нужно.
Разобратся не долго - раз и навсегда, потом это все еще будете не раз использовать...
перед тем как делать что то, нужно поставить определенную задачу, посмотреть что имеем, представить что будет и лишь тогда по алгоритму кодить.

[spoiler=Алгоритм]Если перемення i_ip выдает IP которые я указал -- регистрация запрещена
в другом случае -- display:block для DIV`a с формой регистрации.[/spoiler]

Отредактировано ZloVeЩиЙ - 05.02.2011
8497
Степан @Trilby
гы... Я на эту тему (php-файл на стороне + JS) писал здесь пост, только вот он магическим образом исчез 😒

Отредактировано Trilby - 05.02.2011
1095
tip4ik @tip4ik
м? тема была закрыта, Адмирал по моей просьбе открыл
АПД: ну вот, никто не поправил, а я в строчке if (str == '55.66.77.88') изначально пропустил один знак равно. Поправил

Отредактировано tip4ik - 06.02.2011