@vitonsky ну ты же строки из объекта объединяет с тегами и получаешь HTML. Ну базовый пример:
{ type: 'link', url: "javascript:alert(password)" … }
Ну или
{ type: 'image', alt: 'text" onerror="javascript:alert(password)' … }
В итоге ровно такие же защиты надо делать как в XSS. А дальше более хитрые атаки на стыке багов реализации Markdown-парсера и т. п.
@sitnik_ru Судя по `onerror` ты неправильно понял идею. В этих объектах есть только то, что туда положили руками. Свойство onerror не существует, как и других HTML аттрибутов. Поэтому валидацию написать нужно, но только на том же уровне как для обработки форм - проверить URL, найти маты в тексте и всё. Всё остальное будет вставлено как текст