Бан лист нарушителей

#1 16 января 2012 в 18:31
Который раз наблюдаю, что после добавления пользователя в бан лист он продолжает гулять по сайту, не смотря на бан даже по IP. Может можно как то реализовать завершение сессии у этого пользователя? Или как-нибудь модернизировать бан лист!?
#2 16 января 2012 в 18:33
Tesper, проверял лично данную функцию — гулять не удавалось…
#3 16 января 2012 в 18:38
Madmax, и всё же можно как то завершать сессию пользователя, для админов-параноиков?
#4 14 февраля 2012 в 03:06

Tesper, проверял лично данную функцию — гулять не удавалось ...

Madmax
Прямо сейчас проверил — пользователь спокойно продолжает гулять по сайту…
#5 14 февраля 2012 в 10:26
Аналогичная проблема.
#6 14 февраля 2012 в 11:29
А как быть с теми у кого ип адрес меняется каждый раз при подключении к интернету?
#7 14 февраля 2012 в 22:09
Madmax, попробуй проверить тоже самое, но с модема.
я в одной газете производил следующие действия:
прошел по ссыле>проголосовал>закрыл>браузер>вырубил>интернет.
включил инет>открыл браузер>прошел по c.......
в общем я за 3 дня вывел человека на первое место.
пысы
правда они один хер меня кинули. мну это уже другая история
#8 15 февраля 2012 в 01:20
Проблема кстати не решаема в принципе, объясню почему.

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

Во вторых если динамический IP-адрес, то достаточно заново подключиться к Интернету и матери всех, на чем свет стоит заново, пока тебя опять на 3 мин не заблочат.

В третьих некоторые используют различные проги или браузеры для анонимного серфинга. Он лайн сервисов тьма, так для примера
anonimsurfer.profikom.ru/
www.samair.ru/proxy/type-15.htm
anonymouse.org

Даже если админ совсем разозлиться и сделает безумный бан по маске то и тут начинаем юзать ssl анонимайзер и опять возвращаемся

Короче вариантов много можно писать и писать. Одним словом бан сделан для нормальных пользователей, казлы его всегда обойдут. smile
#9 15 февраля 2012 в 01:35

Одним словом бан сделан для нормальных пользователей

arianfinist
"бана нет!", Вы хотели сказать, я Вас правильно пониманию?
#10 15 февраля 2012 в 10:10

"бана нет!", Вы хотели сказать, я Вас правильно пониманию?

Олег Васильевич я
Такова суровая виртуальная реальность.

И это не имеет никакого отношения к недоработке в InstantCMS, на всех других двигах Joomla, Wordpress, Drupal и.т.д. то же самое
#11 16 февраля 2012 в 17:08
Нашел решение:
1. Открываем /core/classes/user.class.php
2. Ищем следующее:

  1. public function checkBan(){
  2.  
  3. $inDB = cmsDatabase::getInstance();
  4. $inCore = cmsCore::getInstance();
  5.  
  6. $current_ip = $this->ip;
  7.  
  8. if ($inDB->rows_count('cms_banlist', "ip = '$current_ip' AND status=1")){
  9.  
  10. $ban = $inDB->get_fields('cms_banlist', "ip = '$current_ip' AND status=1", 'int_num, int_period, autodelete, id, status, bandate');
  11. $interval = $ban['int_num'] . ' ' .$ban['int_period'];
  12.  
  13. //Check expired
  14. $sql = "SELECT *
  15. FROM cms_banlist
  16. WHERE id = {$ban['id']} AND bandate <= DATE_SUB(NOW(), INTERVAL $interval) AND int_num > 0
  17. LIMIT 1";
  18.  
  19. $rs = $inDB->query($sql);
  20.  
  21. if (!$inDB->errno()){
  22. if ($inDB->num_rows($rs)){
  23. if ($ban['autodelete']){
  24. //delete
  25. $inDB->query("DELETE FROM cms_banlist WHERE id={$ban['id']}");
  26. } else {
  27. //close
  28. $inDB->query("UPDATE cms_banlist SET status=0 WHERE id={$ban['id']}");
  29. }
  30. } else {
  31. echo '<div style="color:red"><strong>Ваш доступ к сайту заблокирован</strong></div>';
  32. echo '<div style="padding:15px;">';
  33. echo '<div><strong>Дата блокировки:</strong> '.$ban['bandate'].'</div>';
  34. if ($ban['int_num']<=0){
  35. echo '<div><strong>Срок блокировки:</strong> бесконечен</div>';
  36. } else {
  37. echo '<div><strong>Срок блокировки:</strong> '.$interval.'</div>';
  38. }
  39. echo '</div>';
  40. $inCore->halt();
  41. }
  42. }
  43. }
  44. }
3. Полностью заменяем этот код на этот:

  1. public function checkBan(){
  2.  
  3. $inDB = cmsDatabase::getInstance();
  4. $inCore = cmsCore::getInstance();
  5.  
  6. $user_id = isset($_SESSION['user']['id']) ? $_SESSION['user']['id'] : 0;
  7.  
  8.  
  9. if ($inDB->rows_count('cms_banlist', "user_id = '$user_id' AND status=1")){
  10.  
  11. $ban = $inDB->get_fields('cms_banlist', "user_id = '$user_id' AND status=1", 'int_num, int_period, autodelete, id, status, bandate');
  12. $interval = $ban['int_num'] . ' ' .$ban['int_period'];
  13.  
  14. //Check expired
  15. $sql = "SELECT *
  16. FROM cms_banlist
  17. WHERE id = {$ban['id']} AND bandate <= DATE_SUB(NOW(), INTERVAL $interval) AND int_num > 0
  18. LIMIT 1";
  19.  
  20. $rs = $inDB->query($sql);
  21.  
  22. if (!$inDB->errno()){
  23. if ($inDB->num_rows($rs)){
  24. if ($ban['autodelete']){
  25. //delete
  26. $inDB->query("DELETE FROM cms_banlist WHERE id={$ban['id']}");
  27. } else {
  28. //close
  29. $inDB->query("UPDATE cms_banlist SET status=0 WHERE id={$ban['id']}");
  30. }
  31. } else {
  32. echo '<div style="color:red"><strong>Ваш доступ к сайту заблокирован</strong></div>';
  33. echo '<div style="padding:15px;">';
  34. echo '<div><strong>Дата блокировки:</strong> '.$ban['bandate'].'</div>';
  35. if ($ban['int_num']<=0){
  36. echo '<div><strong>Срок блокировки:</strong> бесконечен</div>';
  37. } else {
  38. echo '<div><strong>Срок блокировки:</strong> '.$interval.'</div>';
  39. }
  40. echo '</div>';
  41. $inCore->halt();
  42. }
  43. }
  44. }
  45. }
4. И по желанию можно убрать на мой взгляд весьма глупую функцию, которая при наличии пользователя в бан-листе выдает ошибку авторизации:

  1. if (self::isBanned($user['id'])) {
  2. $inDB->query("UPDATE cms_banlist SET ip = '{$this->ip}' WHERE user_id = '{$user['id']}' AND status = 1");
  3. return $default_back_url;
  4. }
И так, что же у нас получилось: теперь независимо от IP пользователя если его логин в бан-листе, то он не сможет пользоваться сайтом. Если выполнили 4 пункт, то при авторизации пользователя встретит уведомление о том, что он забанен и покажет ему сроки.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожие темы

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.