Eu sempre quis usar seqüências de caracteres geradas aleatoriamente para os IDs dos meus recursos, para poder ter URLs mais curtos como este: / user / 4jz0k1
Mas nunca o fiz, porque estava preocupado com a geração aleatória de cadeias criando palavras reais, por exemplo: / user / f * cker. Isso traz dois problemas: pode ser confuso ou até ofensivo para os usuários, e também pode interferir no SEO.
Então pensei que tudo o que eu precisava fazer era estabelecer um padrão fixo, como adicionar um número a cada 2 letras. Fiquei muito satisfeito com o meu método 'generate_safe_uuid', mas percebi que era melhor apenas para SEO e pior para os usuários, porque aumentava a proporção de palavras reais geradas, por exemplo: / user / g4yd1ck5
Agora, estou pensando em criar um método 'replace_numbers_with_letters' e verificar se ele não formou nenhuma palavra em um dicionário ou algo assim.
Alguma outra ideia?
ps. Enquanto escrevia isso, também percebi que procurar palavras em mais de um idioma (por exemplo: inglês e francês, espanhol etc.) seria uma bagunça, e estou começando a amar IDs apenas com números novamente.
ATUALIZAR
Alguns links que todos devem ler:
http://thedailywtf.com/Articles/The-Automated-Curse-Generator.aspx
http://blogs.msdn.com/b/oldnewthing/archive/2008/06/27/8659071.aspx
Respostas:
Algumas dicas que reduzirão as chances de criar palavras significativas inadvertidamente:
Este é um código de exemplo do C # (usando o .NET 4):
Isso não garante que você não ofenda ninguém, mas eu concordo com o @DeadMG que você não pode ter um objetivo tão alto.
fonte
Basta criar uma lista de palavras impertinentes, uma lista de substituição de letras e, se qualquer ID gerado for uma palavra impertinente, refaça-a.
Por exemplo (pseudo código)
(Você pode consultar outras recomendações de URL curtas como esta para obter informações sobre hash / conversão na base 62)
Agora você não recebe mais códigos como
a55
,sh1t
ou "b00bs". Sua lista de substituição de letras só precisa conter caracteres em suas palavras maliciosas, obviamente.Uma vez que ninguém vai ler "455" como "bunda", então você pode também querer
return str
emreducestring
se ele não contém qualquer letra.Exemplos
O site de design gráfico Dribbble possui seus próprios IDs de cadeia curta para postagens. Estes usam 0-9, az e AZ como http://drbl.in/dCWi .
Eu fiz algumas experiências e há identificações curtas para pelo menos algumas palavras maliciosas. Acho que veremos quando chegarem
f
, mas ainda não estão lá.Concedido - dar a um usuário seu próprio URL de identificação pessoal (
/user/whatever
) em vez de apenas uma postagem é muito pior com palavras maliciosas.fonte
Considere usar uma chave numérica ou hexadecimal. Isso poupará muitos problemas, em comparação com a criação de um filtro de palavrões compatível com i18n, e o pior com o qual você precisará se preocupar é com a carne morta .
fonte
B16B00B5
: PVocê nunca pode impedir que um sistema automatizado gere uma sequência ofensiva para um usuário. Por exemplo, na China, alguns números são considerados azarados.
Tudo o que você pode fazer é dizer ao usuário que seu ID é aleatório e que o conteúdo é irrelevante e, se receberem
/user/fucker
, deve ignorá-lo. Essas coisas acontecem e não é tecnicamente viável evitá-lo - assim como você nunca pode filtrar palavrões.fonte
Existem basicamente duas estratégias que você pode empregar:
Crie um sistema que não gere seqüências ofensivas. Por exemplo, você pode compor seus IDs apenas a partir de letras consoantes. Ao omitir todas as vogais, você pode ter certeza de que seu sistema nunca gerará nenhuma palavra em inglês, travessa ou não.
Após gerar um ID completamente aleatório, verifique se o novo ID não inclui substrings ofensivos.
fonte
Em muitas situações (spam de email, bloqueio de ip etc.), uma lista negra é um jogo perdido - você nunca poderá criar uma lista negra "completa" de todas as possíveis coisas ruins que possam ocorrer. a b c d e f
Muitas pessoas usam uma lista de permissões de palavras aceitáveis e as agrupam em alguma ordem aleatória. (Talvez com um traço ou ponto ou espaço entre cada palavra).
Alguns dicionários populares usados para converter números arbitrários em uma série pronunciável de palavras incluem:
fonte
Você pode torná-lo apenas números gerados aleatoriamente ou ter um regex para cancelar os que são ofensivos:
fonte