26 pontos por GN⁺ 2023-11-26 | 6 comentários | Compartilhar no WhatsApp
  • Sqids é uma biblioteca open source que gera IDs no estilo do YouTube a partir de números
  • Os IDs gerados são curtos, podem ser criados com um alfabeto personalizado e têm ausência de colisões garantida
  • Um exemplo de ID fornecido tem o formato https://example.com/Lqj8a0

Por que usar Sqids

  • O principal objetivo do Sqids é o efeito visual
  • Se você quiser usar IDs em vez de números em um aplicativo web, o Sqids pode ser uma boa escolha
  • Casos de uso incluem encurtamento de links, uso seguro em URLs, IDs de eventos, codificação/decodificação sem colisões e senhas de uso único
  • Não é adequado para dados sensíveis e, se usado como ID de usuário, pode expor a quantidade de usuários

Características do Sqids

  • Gera IDs curtos a partir de números não negativos
  • É fácil de codificar e decodificar
  • Os IDs gerados automaticamente não incluem palavrões comuns
  • Suporta embaralhamento de alfabeto para IDs personalizados
  • Suporta 40 linguagens de programação, das quais 15 usam o novo design
  • Gera os mesmos IDs em todas as versões
  • Tem tamanho de biblioteca pequeno e uma licença permissiva

Opinião do GN⁺

  • A biblioteca Sqids é útil para desenvolvedores que querem usar IDs curtos e sem colisões em vez de números em aplicativos web
  • A biblioteca oferece IDs visualmente atraentes e tem alta acessibilidade por oferecer suporte a várias linguagens de programação
  • Ela oferece oportunidades vantajosas para desenvolvedores open source e tem os direitos autorais protegidos pela licença MIT

6 comentários

 
haebom 2023-11-27

Bom para dificultar crawling.

 
stardust33 2023-11-30

Você poderia explicar um pouco melhor como isso pode ser usado para impedir rastreamento?

 
ragus 2023-12-02

Se a URL for simplesmente posts/1, posts/2, posts/3, os rastreadores vão colocando 1, 2, 3, 4, 5... e varrendo tudo.
Se a URL for algo como posts/L12Qsd, posts/dei24A, parece que eles não conseguem fazer isso.

 
stardust33 2023-12-05

Ah! Obrigado pela resposta.

 
jaypark 2023-11-27

Fiquei curioso sobre qual seria a diferença em relação ao hashids, então fui pesquisar e, ao acessar https://hashids.org, ele redireciona para https://sqids.org/. Parece que mudaram o nome.

https://sqids.org/faq#hashids

 
GN⁺ 2023-11-26
Opiniões do Hacker News
  • Possibilidade de obter insights de negócio sobre empresas que usam IDs sequenciais

    • Por exemplo, é possível estimar a taxa de crescimento de uma empresa pelo ID atribuído no cadastro de usuário
    • Isso pode ser aplicado a todos os tipos de recursos dentro da aplicação
    • Há dúvida sobre o quanto o “lixo” na barra de URL é importante hoje em dia
    • Como a maioria dos navegadores esconde grande parte da URL, usam uulids enquanto aguardam a adoção ampla do UUID v7
    • O componente de tempo embutido às vezes é útil (ex.: regras de mesclagem de objetos)
  • Dúvida sobre a menção a códigos de acesso de uso único

    • O código deve ser imprevisível, mas não precisa necessariamente ser único
    • Funciona se houver uma fonte aleatória adequada, mas a característica de ser “preenchido com lixo” parece mais complexa do que realmente é
    • De 4 a 8 dígitos aleatórios funcionam bem e deixam o nível de segurança claro
    • Números são mais fáceis de entender do que letras latinas com distinção entre maiúsculas e minúsculas, especialmente para usuários de idiomas que usam outros sistemas de escrita
  • Frustração por não conseguir formatar inteiros de 128 bits ou arrays de bytes

    • Isso permitiria formatar UUIDs
    • Baixa preferência pelo uso de IDs inteiros públicos
    • IDs crescentes trazem risco de vazamento de informações importantes
    • Preferência por encurtar UUIDs formatando-os em Base64URL para uso em URLs, QR codes etc.
  • Em aplicações Ruby, usam um método de conversão para bases altas

    • O Sqids oferece uma biblioteca Ruby e permite configurar uma base muito mais alta, incluindo letras maiúsculas e emojis
    • Seriam necessários números muito maiores antes que a economia de espaço fizesse grande diferença
    • É difícil saber se vale a pena adicionar uma nova dependência
  • A filtragem de palavrões pode ser um passivo por definição

    • É preciso manter imutável a lista de palavras proibidas para preservar a codificação
    • Caso contrário, sqids anteriores podem passar a ser decodificados incorretamente
  • Preferência por usar nanoid e um dicionário de caracteres seguros

    • Sugestão de usar uma abordagem de dicionário semelhante em vez de uma implementação hardcoded para encontrar palavras “ruins”
    • Interesse demonstrado no conjunto de testes de desempenho
    • Como a geração de UUID v4 é otimizada na maioria das linguagens, fica a dúvida se uma solução personalizada realmente é melhor
  • Discussão sobre o uso de strings geradas aleatoriamente

    • Usadas em IDs, tokens de recuperação de senha etc.
    • Já foram geradas aos milhões, e centenas de milhares de pessoas as verificam todos os dias
    • Não houve reclamações sobre IDs de conteúdo aleatórios
    • A sociedade moderna tem tanto medo de ofender alguém que o filtro de palavrões foi expandido até para IDs de banco de dados e tokens de recuperação de senha
    • Se o tamanho mínimo for definido como 8, é improvável que apareça um palavrão completo como ID inteiro
  • Confusão sobre o fornecimento de links para 40 linguagens na seção "Get Started"

    • Apenas 15 das 40 linguagens permitem começar de fato; as outras 25 são repositórios esqueleto pedindo para as pessoas darem estrela no repositório para demonstrar interesse
  • Pergunta sobre como ajustar ou evoluir a blocklist

    • Se um ID estiver na blacklist, ele é simplesmente incrementado
    • Os IDs ficam fixados ao conteúdo da blacklist, e ajustá-la invalida certos segmentos de IDs gerados anteriormente
  • Muitas pessoas neste tópico mencionam isso como uma boa forma de ocultar insights em IDs/números

    • Como os valores gerados podem ser decodificados facilmente, surge a dúvida se não seria possível obter insights decodificando alguns números