Consulta Regex para encontrar hiperlinks de marca incorreta

0

Estou tentando executar um comando regex para analisar os e-mails recebidos para identificar quaisquer hiperlinks enviados por sites de phishing / phishing tentando usar uma variação do nome da empresa. Nossa empresa é abcdomain. Os critérios são:

  1. Encontre todos os hiperlinks (parte do nome do host) que contenham o nome da empresa 'abcdomain'
  2. Excluir todos os domínios que nos registramos, por exemplo, meuabdomínio.com, site.abcdomain.com, abcdomain.net, etc.)

Meu regex não está bem formado e não funciona sob algumas variações. O problema provavelmente está relacionado à maneira como eu excluo. No começo, eu estava realmente tentando excluir 'abcdomain.com', mas o regex não parecia funcionar dessa maneira.

  • Inquerir: (http[s]?|ftp)\S*?(abcdomain|myabcdomain)(?!\.com)
  • Corda: http://www.abcdomain.com/logo/email/abcdomain-email-logo.png
  • Resultado: isso deve ser excluído, mas a consulta ocorre no segundo abcdomain


  • Inquerir: (http[s]?|ftp):\/\/([\dA-Za-z\.]*)(abcdomain|myabcdomain)(?!.com|..net)

  • Corda: http://www.fakeabcdomain.com
  • Resultado: isso deve ser incluído, mas minha exclusão cuida apenas do resultado da ocorrência)
David Rubino
fonte
Só queria mostrar exemplos do que deveria acontecer e do meu próprio progresso. regexr.com/3trtg
David Rubino
Parece que pode haver um número infinito de maneiras de ignorar uma pesquisa de regex, não importa quão cuidadosamente o regex seja criado. Existem outras opções disponíveis para você? Você pode filtrar por localização geográfica de IP dos remetentes, possivelmente rastrear o hiperlink e verificar se ele se conecta a um ip interno (lista de permissões), rastrear o hiperlink e ver se ele gera uma solicitação de pacote no servidor / controlador de domínio (como classificação de um aperto de mão para verificar o link) ou alguma outra forma de verificação que possa ser mais segura. Regex é tudo que você tem a opção de usar?
Trenly

Respostas:

0

Este funciona para seus casos de teste:

(?:ht|f)tps?://(?=[^/]*(?:myabcdomain|abcabcdomain|abcdomain(?:\.zendesk)?))(?!(?:\w+\.)?(?:myabcdomain|abcabcdomain|abcdomain(?:\.zendesk)?)\.com)\S+

Explicação:

(?:ht|f)tps?://         : protocol
(?=                     : positive lookahead, make sure we have after
  [^/]*                 : 0 or more non slash
  (?:                   : start non capture group
    myabcdomain         : literally
  |                     : OR
    abcabcdomain        : literally
  |                     : OR
    abcdomain           : literally
    (?:\.zendesk)?      : followed with optional
  )                     : end group
)                       : end lookahead
(?!                     : negative lookahead, make sure we don't a=have after
  (?:\w+\.)?            : optional, 1 or more word character and a dot
  (?:                   : start non capture group
    myabcdomain         : literally
  |                     : OR
    abcabcdomain        : literally
  |                     : OR
    abcdomain           : literally
    (?:\.zendesk)?      : followed with optional
  )                     : end group
  \.com                 : literally
)                       : end lookahead
\S+                     : 1 or more any character that is not a space

Corresponde:

<a href="http://abcdomain.products.com.vbs">
<a href="https://abcdomainproducts.com">
<a href="http://products.abcdomain.products.net">
<a href="https://products.abcdomainproducts.com/test">
<a href="http://fakeabcdomain.products.com.vbs">
<a href="http://myabcdomain.products.com.vbs">
<a href="http://fakeabcdomain.com">

E não corresponde:

<a href="http://products.myabcdomain.com/help">
<a href="http://abcdomain.zendesk.com/help">
<a href="http://myabcdomain.com/help">
<a href="http://abcdomain.com/help">
<a href="http://products.abcabcdomain.com">
Toto
fonte
Desculpe, isso acerta meu domínio. Aqui estão alguns exemplos que estou usando: regexr.com/3trsr
David Rubino
@DavidRubino: É confuso porque http://products.abcdomain.products.netdeve corresponder, mas nãohttp://abcdomain.zendesk.com/help
Toto
desculpe, esse foi outro link que eu estava testando. Depois de postar meu comentário, vi que um grupo havia criado um link do zendesk que eu também tinha que excluir.
David Rubino
1
@DavidRubino: Não consigo encontrar uma maneira simples de fazer isso com um único regex. Sugiro que você divida a string antes da primeira barra e verifique todos os elementos.
Toto
@DavidRubino: Veja minha edição, está tudo bem agora?
Toto