Ouvi pessoas palestrando aqui e ali na internet que é uma boa prática ocultar os IDs de bancos de dados voltados para o público em aplicativos da web. Suponho que eles significam principalmente em formas e em urls, mas nunca li nada além de um bocado sobre o assunto.
EDIT : Claro, agora que pergunto isso, encontro alguns recursos sobre o assunto:
- /programming/2374538/obscuring-database-ids
- /programming/1895685/should-i-obscure-primary-key-values
- http://joshua.schachter.org/2007/01/autoincrement.html
Esses links satisfizeram um pouco da minha curiosidade, mas as postagens da SO não têm muitos votos e não estão necessariamente centradas no tópico neste contexto, por isso não tenho certeza do que fazer, e algumas afirmam que a terceira link é falso. Vou deixar o resto do meu post intacto:
Entendo as diferenças entre obscuridade e segurança, e também como os dois podem trabalhar juntos, mas não consigo imaginar por que isso seria necessário.
Existe alguma verdade nisso, é apenas paranóia ou é totalmente totalmente falso?
Posso pensar em maneiras de fazer isso, mas é claro que adiciona muita complexidade ao código do aplicativo. Sob que circunstâncias isso seria útil? Se isso é algo que as pessoas costumam fazer, como é geralmente implantado? Hashing os identificadores? Algo mais? Parece muito trabalho para não haver muita segurança extra. Não estou procurando soluções reais, só quero ter uma idéia de como / por que as pessoas fariam isso no mundo real.
Isso é realmente considerado uma "melhor prática" ou é apenas uma micro-otimização de pouco valor?
NOTA : Acho que algumas pessoas podem ter entendido a idéia errada: não estou sugerindo que identificações difíceis de adivinhar seriam o único mecanismo de segurança, obviamente haveria as verificações de acesso habituais. Vamos supor que eles estejam no lugar e que simplesmente conhecer o id ou o hash de um registro não é suficiente para conceder acesso.