Ir para conteúdo
Faça parte da equipe! (2024) ×

java Como autenticar usuários de plataforma VBulletin em uma aplicação


@rnxn
 Compartilhar

Posts Recomendados

Esse post estava perdido em um outro fórum por aí, já que faz tempo que não posto nada novo aqui, eis ele.

 

Nesse tópico, irei explicar como autenticar de forma eficaz os usuários de um fórum que utiliza plataforma VBulletin.

 

Já vi esse tipo de tutorial em vários fóruns, normalmente explicando como criar um loader ou algo do tipo. Nesses tutoriais, boa parte dos autores usam uma solução ruim, que seria:

 

  • Fazer a requisição HTTP com o nome de usuário e senha;
  • Varrer o código HTML após a requisição e procurar pelo texto "Bem-vindo(a),".

 

Bonito, parece correto. Afinal, somente um usuário logado verá o texto "Bem-vindo(a), Fulano" no menu superior.

Essa é a principal solução que esses caras usam para autenticar alguém: procurar por algo que somente um usuário autenticado conseguiria acessar/visualizar. Mas vamos supor algumas situações:

 

  • E se o fórum permitir que o usuário use uma linguagem que não seja Português? Mesmo que o usuário coloque as credenciais corretas, o login irá falhar sempre. A não ser que, em algum trecho do seu código você busque por "Bem-vindo(a)," e "Welcome," mas (na minha opinião) é inviável varrer o HTML duas vezes, não acha? Dependendo do fórum, o código fonte pode ultrapassar fácil as 7 mil linhas.

  • E se o fórum redirecionar o usuário para a homepage e lá existir um novo tópico com título "Bem-vindo(a),". Mesmo que o usuário coloque as credenciais incorretas, o login terá sucesso. Se for uma aplicação que libera recursos somente para usuários que possuem conta, seria prejuízo, certo?!

Se você procurar, existem vários tutorias ensinando isso, em vários fóruns de cheats por aí.

E, é capaz que muitos loaders por aí utilizem essa forma de "autenticação".

 

Vamos melhorar isso, lendo os cookies da requisição. (o que são cookies?)

Embora esse tutorial use Java, você pode adaptar essa solução para qualquer linguagem. Não tem muito segredo quanto a realizar requisições por meio de protocolo HTTP, use o Google :)

 

Analisando os cookies do fórum

Ao acessar o fórum pela primeira vez ou no caso do fórum, sem estar logado, alguns cookies podem ser criados para manter as ações realizadas por você:

 

Acessando o fórum sem estar logado.

FrXrbDV.png

 

Essa é uma das formas de guardar dados no client, afinal o HTTP é um protocolo sem estado. Em computação, um protocolo stateless é um tipo de comunicação que considera cada requisição como uma transação independente, isto é, que não está relacionada a qualquer requisição anterior. Quando você abre qualquer site, uma requisição é feita por você (client), processada e retornada pelo servidor. Após isso, seria como se o servidor tivesse uma perda de memória e esquecesse quem é você e o que ele te enviou.

 

Por isso que existem sessões, do contrário você teria que logar novamente toda vez que fosse comentar em um tópico.

Quando você faz login no VBulletin, alguns cookies de sessão e hash são criados, estes sim somente um usuário autenticado pode ter:

 

Acessando o fórum após o login com sucesso.

GBMPNwU.png

 

Eu não sei ao certo como funciona o VBulletin, às vezes é criado um cookie com nome "bb_sessionhash" mesmo acessando o fórum sem possuir uma conta, outras vezes o cookie não é criado (esse tutorial é um exemplo, ver a primeira imagem), então não recomendo usá-lo para o nosso objetivo. Opte pelo cookie com nome "bb_password", pois este sim é criado somente após o usuário estar autenticado.

 

Obtendo parâmetros de requisição

Precisamos checar quais parâmetros devem ser enviados e qual o tipo de requisição esperada, para isso use uma extensão como a HTTP Live Readers: (Firefox) (Chrome). Eu vou adiantar as coisas, mas baixe a extensão e veja funcionando na prática.

 

O VBulletin espera por uma requisição POST contendo os seguintes parâmetros:

 

  • vb_login_username: contendo o nome de usuário
  • cookieuser: com o valor "1" (que provavelmente deve tornar-se em um booleano quando processado)
  • vb_login_md5password: como o nome sugere, a senha do usuário hasheada com algoritmo MD5
  • do: com valor "login" que aponta para qual ação estamos realizando.

 

Existem outros, mas para o login bastam esses parâmetros.

 

O que faremos a seguir é: enviar uma requisição GET para recuperar os cookies.

Em seguida, enviaremos uma segunda requisição (esta como POST) contendo os cookies da primeira e os parâmetros.

Posteriormente verificaremos se o cookie "bb_password" existe.

 

Código

Vamos trabalhar com objetos. Primeiro, crie uma classe para manipularmos o nome de usuário (ou email) e senha do usuário, somente para não precisarmos trabalhar com string a todo momento. Como não utilizaremos a senha em texto puro, podemos gerar o hash logo que o usuário for instanciado:

 

É necessário se cadastrar para acessar o conteúdo.

 

Criaremos agora uma classe para realizarmos a ação de login. Precisamos manter uma lista de cookies, um objeto de conexão HTTP e a URL para qual iremos despachar as requisições. Aproveitamos para criar um método que recebe a URL, já que esse atributo será definido como privado:

 

É necessário se cadastrar para acessar o conteúdo.

 

Estou retornando o próprio objeto (return this) para fazer encadeamento (method chaining) mais tarde.

 

Temos que criar um método para gerar a URL com os parâmetros de requisição. Estes são separados pelo caractere "&" e as atribuições de valores são feitas com o caractere "=". Usaremos um usuário (classe User) para montar essa requisição:

 

É necessário se cadastrar para acessar o conteúdo.

 

OK. Precisamos criar um método para fazer uma requisição para a URL especificada no atributo "loginUrl" e armazenar a lista de cookies na nossa lista "cookies".

 

É necessário se cadastrar para acessar o conteúdo.

 

Precisamos agora criar o método que fará a requisição para o recurso de login e verificará se o cookie "bb_password" foi criado. Se for, podemos retornar "true" indicando que o usuário é um membro do fórum:

 

É necessário se cadastrar para acessar o conteúdo.

 

Nossa classe ficará assim:

É necessário se cadastrar para acessar o conteúdo.

 

Testando e autenticando um usuário

Tendo a classe VBulletin, podemos verificar se um usuário é membro assim:

 

É necessário se cadastrar para acessar o conteúdo.

 

Espero que esse post ajude quem estiver interessado em implementar um meio de interagir com o fórum. Lembrando que, tendo os cookies armazenados (como fizemos) e enviando eles a cada requisição, é possível fazer qualquer ação que um usuário faria pelo navegador: postar um tópico, enviar mensagem particular, agradecer tópicos, reportar postagens, etc.

 

Esse método resolve os dois problemas apontados no começo do tópico, o login será validado corretamente.

Ou, você pode continuar apostando nos "Bem-vindo(a)," que ensinam por aí. :)

+ - + - + - + - + - +

FAÇO PROGRAMAS

+ - + - + - + - + - +

Link para o comentário
Compartilhar em outros sites

  • Velha Guarda

Olá rnxn.

Seu tópico sem dúvida ficou muito bem elaborado e o conteúdo deverá ajudar vários membros.

Porem querendo ou não,as imagens que usou acabam divulgando outro fórum,sendo assim elas estão removidas.

 

A Moderação,

Web Cheats.

 

 

'Lembre-se dessa regra

Guarde-a em seu coração:

Talento tem um limite

Trabalho duro, não."

 

 

Link para o comentário
Compartilhar em outros sites

Olá rnxn.

Seu tópico sem dúvida ficou muito bem elaborado e o conteúdo deverá ajudar vários membros.

Porem querendo ou não,as imagens que usou acabam divulgando outro fórum,sendo assim elas estão removidas.

 

A Moderação,

Web Cheats.

Tu vive mandando os outros ler "tutoriais e moderação" e olha só, não sabe nem o que é divulgação.

Mas nem esquenta, tu que começa a causar nos meus tópicos novamente que vai achar o seu logo logo.

+ - + - + - + - + - +

FAÇO PROGRAMAS

+ - + - + - + - + - +

Link para o comentário
Compartilhar em outros sites

Olá rnxn.

Seu tópico sem dúvida ficou muito bem elaborado e o conteúdo deverá ajudar vários membros.

Porem querendo ou não,as imagens que usou acabam divulgando outro fórum,sendo assim elas estão removidas.

 

A Moderação,

Web Cheats.

pra mim não pareceu divulgação mas ok, belo tópico, na verdade gostei mesmo só da parte da requisição HTTP, o restoé java né...

Link para o comentário
Compartilhar em outros sites

  • Velha Guarda
pra mim não pareceu divulgação mas ok, belo tópico, na verdade gostei mesmo só da parte da requisição HTTP, o restoé java né...

 

Antes na imagem aparecia toda URL de um site (outro fórum de cheats),eu só avisei sobre isso,nada mais...

 

 

'Lembre-se dessa regra

Guarde-a em seu coração:

Talento tem um limite

Trabalho duro, não."

 

 

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.