Pergunta

Pergunta simples que continua me incomodando.

Devo HTML entrada do usuário codificar imediatamente e armazenar o conteúdo codificado no banco de dados, ou devo armazenar os valores brutos e HTML codificar ao exibir?

Armazenar dados codificados reduz significativamente o risco de um desenvolvedor esquecendo-se de codificar os dados quando ele está sendo exibido. No entanto, armazenando os dados codificados fará datamining um pouco mais complicado e vai demorar um pouco mais espaço, apesar de que normalmente é um não-problema.

Foi útil?

Solução

i sugiro fortemente codificação de informações sobre a saída. armazenamento de dados brutos no banco de dados é útil se você deseja alterar a forma como é visto em um certo ponto. o fluxo deve ser algo semelhante a:

sanitize user input -> protect against sql injection -> db -> encode for display

pensar em uma situação onde você pode querer exibir as informações como um feed RSS em seu lugar. ter que refazer qualquer codificação específica HTML antes de re-display parece um bocado parvo. qualquer desenvolvimento deve sempre seguir a "não entrada de confiança" meme, se essa entrada é de um utilizador ou a partir do banco de dados.

Outras dicas

A codificação só deve unicamente ser feito apenas no visor. Sem exceção.

Saída.

Com HTML você não pode simplesmente verificar o comprimento de uma string (& é um personagem, mas strlen() irá dizer-lhe 5), você pode facilmente cortá-la (que poderia quebrar entidades).

Você pode precisar misturar cordas do banco de dados com cordas de outra fonte, ou ler e escrever-los de volta. Fazendo esta aplicação em todo sem perder qualquer saída dupla escapar e evitar é um pesadelo.

PHP tentou fazer algo semelhante com magic_quotes e ele acabou por ser um enorme fracasso. Não tome rota magic_entities! :)

Tenha em mente que você pode precisar para acessar o banco de dados com algo que não entende HTML codificada de texto (por exemplo, uma ferramenta de relatório). Concordo que o espaço é um não-problema, mas IMHO, colocando HTML codificação no movimentos de base de dados de conhecimento da sua vista de extremidade / frente para o nível mais baixo na aplicação, e que é um erro design.

não esta derrota o propósito de codificação? Se um script sql malicioso é inserido como entrada, que é então passado para o db que poderia causar um problema enorme.

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