Какова цель MarkDownSharp при использовании с PageDown? - PullRequest
11 голосов
/ 15 марта 2012

На сайтах StackExchange для написания вопросов и ответов используется синтаксис MarkDown.Это построено с использованием PageDown на стороне клиента и MarkDownSharp и дезинфицирующее средство HTML Джеффа на стороне сервера.Я сам думаю о создании чего-то очень похожего.

Я понимаю, почему мне нужно дезинфицировать HTML на стороне сервера.Но какова цель MarkDownSharp?Почему бы мне не сделать перевод MarkDown в HTML с PageDown на стороне клиента и отправить его на сервер?

1 Ответ

18 голосов
/ 15 марта 2012

Наиболее важные причины:

  1. Мы хотим, чтобы базовая (в смысле «фундаментальная») функциональность сайтов Stack Exchange, с помощью запросов и ответов, работала без JavaScript . Самые продвинутые вещи, такие как голосование, пометки, тонкости пользовательского интерфейса, тексты справки, фавориты, глобальные входящие и так далее, требуют JavaScript, и это нормально. Но единственное, что сайты не могут жить без & ndash; Q & A & ndash; не должно иметь этого требования, чтобы поддерживать трение как можно ниже.

    Конечно, если у вас нет JavaScript в качестве требования, вы не можете требовать, чтобы клиент отобразил Markdown.

  2. Мы храним только визуализированную версию HTML самой последней версии сообщения. Для прошлых ревизий мы сохраняем только источник уценки. Хранение обеих версий для каждого сделанного редактирования будет огромной тратой пространства, так как старые версии вряд ли когда-либо понадобятся. Но иногда они необходимы, например, в истории ревизий. Так что для этого нам все равно придется рендериться на стороне сервера.

  3. Даже если вы проводите повторную дезинфекцию на стороне сервера, разрешение клиенту выполнять рендеринг, очевидно, удаляет доверие, которое вы можете иметь в визуализированной версии, действительно сделанной из Markdown. Представьте себе следующее:

    Я, злой спамер, выкладываю следующий ответ:

    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
    

    Но я представляю предоставленную версию, в которой ссылка фактически ведет на соответствующий сайт о тонкостях параллелизма черепах. Поскольку сервер ожидает от меня и источника Markdown, и отрендеренного HTML, он полагает, что один был сделан из другого.

    Вместе с Шоном Скитом, известным пользователем Stack Overflow с репутацией 120 тыс. В одном только теге логотипа. Он видит, что ссылка действительно ведет на релевантную страницу, любит ответ, одобряет его, публикует «Отличный ответ; на сайте, на который вы ссылаетесь, есть множество полезного контента!» комментарий, и пока он там, он исправляет опечатку "море" -> "см." (которую спамер сделал намеренно).

    Но уценка, которая была в редакторе после того, как он нажал «изменить», не больше не содержала соответствующую ссылку; он содержал ссылку Rolex. И таким образом & ndash; без ведома Шона & ndash; он не только исправил опечатку, но и изменил ссылку, чтобы перейти на сайт спаммера.

    Теперь у вас есть сообщение с последним изменением от доверенного пользователя, подтверждающее ответ, но со ссылкой, по которой мы не хотели бы, чтобы люди нажимали.

    И история изменений (см. Пункт 2.) даже не покажет , что ссылка была изменена.

Следует отметить, что оригинальная версия редактора JavaScript для ОМУ фактически имела описанные вами функции; Вы можете настроить его для отправки отрендеренного HTML на сервер. Мы наконец удалили эту функциональность, когда опубликовали нашу переработанную версию под названием «PageDown», так как мы никогда не использовали ее, поддерживали ее, и я, честно говоря, не знаю, работала ли она больше.

...