Módulo de Segurnça

Bom dia a todos. O módulo de segurança gerado com proteção contra “brutal force”, ao se tentar logar com outro usuário, com login e senha corretos, acusa o bloqueio do mesmo também, mesmo sendo a primeira tentativa. É assim mesmo o funcionamento do algorítimo? Ao haver o bloqueio de um usuário bloqueia todos os outros pelo mesmo tempo configurado no bloqueio?

eu desconheço essa propriedade ou funcionalidade no módulo de segurança: 'Brutal force";

Eu nunca vi isto no Scriptcase.
Mas no meu servidor, com ajuda de softwares de terceiros, implanto uma política contra ataques de força bruta.
Se a pessoa errar a senha mais de 8 vezes o ip é bloqueado por 1 mês.
Não consegue mais acesso ao serviço. A página nem abre para digitar usuário e senha.
Somente entrando em contato com o suporte para desbloquear ou reiniciando o modem em caso de ip dinâmico.

Eu deixava por 10 minutos para liberar o ip. Mas são muitas tentativas por dia.

Tem printscreen do que você chama de proteção contra “brutal force” no scriptcase?

Ok. Calma pessoALL. O termo segundo a NM é “Brute Force”, conforme link (no final do texto):http://www.scriptcase.com.br/recursos-scriptcase-81/

Bloquear o usuário após esgotado o número de tentativas setadas na configuração do MS.

Verificando o código do módulo de segurança, existe uma biblioteca interna que trata da questão. Há um insert na tabela lgn_logged onde são registrados: login, date_login, sc_session e o ip.

Acontece que o usuário é registrado como: blocked, e não o [usr_login], e a mensagem de bloqueio faz menção apenas ao usuário que foi bloqueado. Penso que outro usuário poderia tentar!

Configurei o tempo de bloqueio para 5 min. Durante esse tempo ninguém mais loga no sistema após um usuário ter sido bloqueado!

Biblioteca interna:
[size=medium]sc_logged.php[/size][table][tr][td][font=verdana][font=Verdana][size=medium] 0| <?php
[/size][/font][/font] 1| 2| 3|function sc_logged($user, $ip = ‘’)
4| {
5|$str_sql = “SELECT date_login, ip FROM lgn_logged WHERE login = '”. $user ."’ AND sc_session <> ‘SC_FAIL_SC’";
6| 7|sc_select(data, $str_sql);
8| 9| if({data} === FALSE || !isset($data->fields[0]))
10| {
11|$ip = ($ip == ‘’) ? $_SERVER[‘REMOTE_ADDR’] : $ip;
12|sc_logged_in($user, $ip);
13| return true;
14| }
15| else
16| {
17|sc_reset_apl_conf(“seg_logged”);
18|sc_apl_status(“seg_logged”, ‘on’);
19|sc_redir(“seg_logged”, user=$user, ‘modal’);
20| return false;
21| }
22| }
23| 24| function sc_verify_logged()
25| {
26|$str_sql = “SELECT count() FROM lgn_logged WHERE login = ‘". [logged_user] . "’ AND date_login = ‘". [logged_date_login] ."’ AND sc_session <> ‘SC_FAIL_SC’";
27|sc_lookup(rs_logged, $str_sql);
28| if({rs_logged[0][0]} != 1)
29| {
30|sc_redir(“seg_Login”,"","_parent");
31| }
32| }
33| 34| function sc_logged_in($user, $ip = ‘’)
35| {
36|$ip = ($ip == ‘’) ? $_SERVER[‘REMOTE_ADDR’] : $ip;
37| [logged_user] = $user;
38| [logged_date_login] = microtime(true);
39| 40|$str_sql = “DELETE FROM lgn_logged WHERE login = '”. $user . “’ AND sc_session = ‘SC_FAIL_SC’ AND ip = '”.$ip."’";
41|sc_exec_sql($str_sql);
42| 43|$str_sql = “INSERT INTO lgn_logged(login, date_login, sc_session, ip) VALUES (’”. $user ."’, ‘". [logged_date_login] ."’, ‘". session_id() ."’, ‘". $ip ."’)";
44|sc_exec_sql($str_sql);
45| }
46| 47| function sc_logged_in_fail($user, $ip = ‘’)
48| {
49|$ip = ($ip == ‘’) ? $_SERVER[‘REMOTE_ADDR’] : $ip;
50|$str_sql = “INSERT INTO lgn_logged(login, date_login, sc_session, ip) VALUES (’” . $user . “’, '” . microtime(true) . “’, ‘SC_FAIL_SC’, '” . $ip . “’)”;
51|sc_exec_sql($str_sql);
52| return true;
53| 54| }
55| 56| function sc_logged_is_blocked($ip = ‘’)
57| {
58|$ip = ($ip == ‘’) ? $_SERVER[‘REMOTE_ADDR’] : $ip;
59|$minutes_ago = strtotime("-3 minutes");
60|$str_select = "SELECT count(
) FROM lgn_logged WHERE sc_session = ‘SC_BLOCKED_SC’ AND ip = '”.$ip."’ AND date_login > ‘". $minutes_ago ."’";
61|sc_lookup(rs_logged, $str_select);
62| if({rs_logged} !== FALSE && {rs_logged[0][0]} == 1)
63| {
64|$message = {lang_user_blocked};
65|$message = sprintf($message, 3);
66|sc_error_message($message);
67| return true;
68| }
69| 70|$str_select = “SELECT count(*) FROM lgn_logged WHERE sc_session = ‘SC_FAIL_SC’ AND ip = '”.$ip."’ AND date_login > ‘". $minutes_ago ."’";
71|sc_lookup(rs_logged, $str_select);
72| 73| if({rs_logged} !== FALSE && {rs_logged[0][0]} == 5)
74| {
75|$str_sql = “INSERT INTO lgn_logged(login, date_login, sc_session, ip) VALUES (‘blocked’, '”. microtime(true) ."’, ‘SC_BLOCKED_SC’, ‘". $ip ."’)";
76|sc_exec_sql($str_sql);
77|$message = {lang_user_blocked};
78|$message = sprintf($message, 3);
79|sc_error_message($message);
80| return true;
81| }
82| return false;
83| 84| }
85| 86| 87| function sc_logged_out($user, $date_login = ‘’)
88| {
89|$date_login = ($date_login == ‘’ ? “” : " AND date_login = ‘". $date_login ."’");
90| 91|$str_sql = “SELECT sc_session FROM lgn_logged WHERE login = '”. $user ."’ “. $date_login . " AND sc_session <> ‘SC_FAIL_SC’”;
92|sc_lookup(data, $str_sql);
93| if(isset({data[0][0]}) && !empty({data[0][0]}))
94| {
95|$session_bkp = $_SESSION;
96|$sessionid = session_id();
97|session_write_close();
98| 99|session_id({data[0][0]});
100|session_start();
101|$_SESSION[‘logged_user’] = ‘logout’;
102|session_write_close();
103|104|session_id($sessionid);
105|session_start();
106|$_SESSION = $session_bkp;
107| }
108|109|110|$str_sql = “DELETE FROM lgn_logged WHERE login = '”. $user . "’ " . $date_login;
111|sc_exec_sql($str_sql);
112|sc_reset_global([logged_date_login], [logged_user]);
113| }
114| function sc_looged_check_logout()
115| {
116| if(isset([logged_user]) && ([logged_user] == ‘logout’ || empty([logged_user])))
117| {
118|sc_reset_global ([usr_login], [logged_user], [logged_date_login], [usr_email]);
119| }
120| }
121|122|?> [/td][/tr][/table]

Na verdade o bloqueio de brute force nos serviços de um servidor diverge do conceito que a Netmake quis colocar no Scriptcase.
Ali no Scriptcase ele somente nega o login.
Já no servidor ele bloqueia totalmente o acesso banindo o ip com um DROP nas regras do firewall ou tabela de roteamento.
Eu acho mais seguro o conceito de banir o ip.
Mas a Netmake fez bem em colocar esta opção na aplicação de segurança.
Ela somente estará disponível ao habilitar o: “Proteger os usuários logados.”

Como uso outra forma de gestão dos ataques de força bruta nunca usei esta configuração.
Como nunca usei não posso auxiliar neste caso.

Do manual:

http://www.scriptcase.com.br/docs/pt_br/v81/manual_mp.htm#projeto/seguranca/seguranca

Proteger os usuários logados - Esta opção define uma mensagem sempre quando o usuário já estiver logado

6 - Logado:

Tabela - Definir a tabela "Usuário Logado" utilizada pelo sistema.
Login - Definir o campo para armazenar o login do usuário.
Data de login - Definir o campo para armazenar o horário que o usuário realizou o login no sistema.
Sessão - Defina o campo para armazenar a sessão do usuário.
Endereço de IP - Defina o campo para armazenar o IP do usuário.
  • Usuários registrados (Disponível ao habilitar a opção de “Proteger usuário logado”)

    Mostrar usuários logados - Aplicação de consulta com todos os usuários logados da sessão do projeto.
    Protecção ataque brute force - Bloqueio de usuários ao realizar login mal sucedido.
    Tempo de bloqueio do Brute Force (em minutos) - Tempo que o usuário não consegue logar, depois do bloqueio do Brute Force.
    Número de tentativas antes de bloquear - Define a quantidade máxima de tentativas de login mal sucedido, antes do bloqueio Brute Force.

Isso mesmo. Ai não dá para usar desta forma, bloqueando todos os demais usuários. Irei mandar para eles reverem o conceito. Obrigado.

Prezados, parece que este problema persiste até hoje, na versão 9.3. Eu desenvolvi um sistema em nuvem para uma clínica e quando um funcionário erra a senha do login mais de 3 vezes, bloqueia todos os médicos e secretárias da clínica e paralisa o atendimento. Para não retirar a proteção e ao mesmo tempo não deixar isso acontecer eu pensei alterar o código da bliblioteca sc_logged.php para criar uma whitelist de IPS, colocando o IP da clínica e o do setor financeiro, que fica em outro local. Só que sou um iniciante e meus conhecimentos não são suficientes para isso. Se alguém puder me ajudar, ficarei agradecido. Na sc_logged tem algumas funções que poderiam permitir uma whitelist como a:
function sc_logged_in_fail($user, $ip = ‘’)
function sc_logged_is_blocked($ip = ‘’)