Pergunta

Os sites StackExchange usam sintaxe MarkDown para escrever perguntas e respostas.Isto é construído usando Página para baixo do lado do cliente e MarkDownSharp e Desinfetante HTML de Jeff no lado do servidor.Estou pensando em construir algo muito semelhante.

Entendo por que preciso higienizar o HTML no lado do servidor.Mas qual é o propósito do MarkDownSharp?Por que eu não faria a tradução de MarkDown para HTML com PageDown no lado do cliente e enviaria para o servidor?

Foi útil?

Solução

Os motivos mais importantes:

  1. Queremos que a funcionalidade mais básica (no sentido de "fundamental") dos sites Stack Exchange, perguntando e respondendo, funcione sem JavaScript.As coisas mais avançadas, como votação, sinalização, detalhes da interface do usuário, textos de ajuda, favoritos, caixa de entrada global e outros enfeites, exigem JavaScript, e tudo bem.Mas a única coisa sem a qual os sites não podem viver – perguntas e respostas – não deveria ter esse requisito, para manter o atrito o mais baixo possível.

    Claro, quando você não tem JavaScript como requisito, não pode exigir que o cliente renderize o Markdown.

  2. Armazenamos apenas a versão HTML renderizada da versão mais recente de uma postagem.Para revisões anteriores, armazenamos apenas a fonte do Markdown.Armazenar ambas as versões para cada edição feita seria um enorme desperdício de espaço, já que as versões antigas quase nunca são necessárias.Mas às vezes eles são necessários, por ex.no histórico de revisões.Então, para isso, temos que renderizar no lado do servidor de qualquer maneira.

  3. Mesmo se você higienizar novamente no lado do servidor, permitir que o cliente faça a renderização obviamente remove a confiança que você pode ter na versão renderizada que realmente está sendo feita a partir do Markdown.Imagine o seguinte:

    Eu, um spammer malvado, posto a seguinte resposta:

    As you can sea on [this awesome site][1],
    
    ... (long text on thread-safe usage of the turtle in LOGO) ...
    
    Hope that helps!
    
     [1]: http://almost-real-rolex-watches.biz
    

    Mas eu submeto uma versão renderizada na qual o link realmente leva a um site relevante sobre as complexidades da simultaneidade de tartarugas.Como o servidor espera de mim a fonte do Markdown e o HTML renderizado, ele confia que um foi feito do outro.

    Junto vem Sean Sceat, renomado usuário do Stack Overflow com reputação de 120 mil apenas na etiqueta do logotipo.Ele vê que o link realmente leva a uma página relevante, gosta da resposta, vota positivamente e publica uma "Ótima resposta;o site ao qual você vincula tem muito conteúdo útil!", comenta e, enquanto ele está nisso, ele corrige o erro de digitação "mar" -> "ver" (que o spammer fez deliberadamente).

    Mas o Markdown que estava no editor depois que ele clicou em “editar” não conter mais o link relevante;continha o link Rolex.E assim – sem o conhecimento de Sean – ele não apenas corrigiu o erro de digitação, mas também alterou o link para acessar o site do spammer.

    Agora você tem uma postagem com a última edição vinda de um usuário confiável, endossando a resposta, mas com um link no qual preferimos que as pessoas não cliquem.

    E o histórico de revisões (ver ponto 2.), nem sequer mostrar que o link foi alterado.

Deve-se notar que a versão original do editor WMD JavaScript realmente tinha a funcionalidade que você descreve;você pode configurá-lo para enviar o HTML renderizado ao servidor.Finalmente removemos essa funcionalidade quando publicamos nossa versão refatorada com o nome "PageDown", já que nunca a usamos, mantivemos e sinceramente não sei se realmente funcionou mais.

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