Pergunta

Por exemplo:. http://stackoverflow.com/questions/396164/exposing-database-ids-security-risk e http://stackoverflow.com/questions/396164/blah-blah cargas a mesma pergunta

(acho que isso é DB id da tabela Perguntas? É este padrão em ASP.NET?)

Quais são os prós e contras da utilização deste tipo de esquema em seu aplicativo web?

Foi útil?

Solução

Bem, por um lado, do simples id são geralmente seqüencial, por isso é bastante fácil de adivinhar e recuperar outros dados a partir da aplicação.

Carregar JSON em tempo de execução em vez de dinamicamente via AJAX https://stackoverflow.com/questions/395858/doesnt-matter-what-I- tipo aqui

Agora, tendo dito isso, que também pode ser visto como um bônus, porque ninguém em sã consciência faria toda a sua dobradiça de segurança no fato de que você tem que brindar em um link para chegar ao seu de dados segura , e, portanto, fácil de descoberta dos dados pode ser bom.

No entanto, um ponto é que você está em algum ponto vai reindexar seu banco de dados, ter algo que torna inválido do velho url seria ruim, se não por outra razão que os motores de busca ainda teria links antigos.

Além disso, aqui no SO é bastante normal usar links como este para outras perguntas, de modo que se em algum momento querem reindexar e coisas assim Renumeração (ou mudança para o GUID), que ainda terá de manter a estrutura de idade e do id.

Agora, é provável que isto acontecer ou ser necessário? Provavelmente não.

Eu não me preocuparia muito com isso, apenas construir sua segurança como se cada ponto de entrada para a sua aplicação é conhecida e não deve haver problemas.

Outras dicas

  1. O ID do banco de dados é usado para procurar a questão na base de dados. É que meios numéricos: rápido. Se você deixá-lo fora você tinha que procurar o título que é muito mais lento.

  2. A questão em si é parte da URL para torná-lo "motor de busca amigável". Vai ser maior classificados por g ** gle etc.

Pro:

  • Super fácil de recuperar as informações da página. Leve o ID, ligue para o banco de dados, viola. Sua mesa vai (deve) ser indexado para fazer esta pesquisa super rápido.
  • Garantido URL único.

Con:

  • IDs em seu sistema estão sendo divulgadas. Não é um problema em um sistema publicamente disponíveis, como SO. No entanto, as medidas de segurança adequadas no back-end pode fazer este não é um problema mesmo em sistemas sensíveis.
  • URLs feios. 6+ dígitos números são apenas difícil de lembrar, e torna mais difícil distinguir páginas, se o número é tudo o que o identifica. Isso também pode tem consequências SEO, como URLs com informações mais relevantes e bem estruturados são geralmente melhor classificado. SO compensa fornecendo o nome posto na URL também. Enquanto eu ainda não pode recitar um post especial para meu amigo na hora do almoço, eu ainda posso encontrá-lo mais fácil no histórico do navegador.
  • pesquisas mais lento. Fazer pesquisas de texto em um banco de dados é geralmente mais lento.

Mas lembre-se em uma comunidade como esta há uma maior (embora ainda mínimo) possibilidade do mesmo nome questão de ser publicado ao mesmo tempo, que iria quebrar as coisas, portanto, algum tipo de identificação único precisam ser aplicadas, de identificação são provavelmente bastante lógico no contexto que esta aplicação web em particular foi desenvolvido em.

Eu não acho que é uma má prática, e bastante comum, fazê-lo em ASP.NET e outras estruturas. Como @lassevk disse, se a sua segurança depende dele, então você precisa de mais algumas verificações em lá (lata de usuário X começa a gravar Y), mas mais se resume ao SEO-friendlyness dos URLs de sites públicos.

Por exemplo, URLs de SO são muito friendly:

Prós e contras do uso de DB id no URL?

O Google taxas de informações no início do URL mais elevado do que no final, então tê-lo parecido com:

https://stackoverflow.com/pros -e-cons-de-usando-db-id-in-the-url / q / 407.120

deve obter uma classificação mais elevada para "prós e contras do uso id db na url" . Não é o único fator, mas é bastante uma das mais importantes - olhada formato da Amazon, eles fazem isso por uma razão muito boa:

http://www.amazon.com/Maverick-Ricardo-Semler/dp / 0712678867

http: // server / livro-name / dp / livro-id

Wordpress faz isso como este:

http: // server / aaaa / mm / dd / name-of -a-post

No entanto, se você postar duas mensagens no mesmo dia chamado "foo", você obtém:

http: // server / aaaa / mm / dd / foo

http: // server / aaaa / mm / dd / foo2

a lesma (foo / foo2) não é um PK, mas é mantida como única sobre a tabela de mensagens.

Eu acho que colocar o ID na URL não é um problema, a menos que sua URL é um GUID! Um caminho muito longo e difícil de digitar. Se é um int, ou algum tipo de curto guid (por exemplo, 6-8 caracteres), então não deve ser um problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top