Включить SVG (размещенный на GitHub) в MarkDown

173

Я знаю, что изображение может быть помещено в MD с синтаксисом MD либо, ![Alt text](/path/to/img.jpg)либо ![Alt text](/path/to/img.jpg "Optional title"), но у меня возникают трудности с размещением SVG в MD, где код размещен на GitHub.

В конечном итоге использую rails3 и часто меняю модель прямо сейчас, поэтому я использую RailRoady для генерации SVG-схемы схемы моделей. Я хотел бы, чтобы этот SVG был затем помещен в ReadMe.md и отображен. Когда я открываю файл SVG локально, он работает, так как мне заставить браузер отображать SVG в файле MD? Учитывая, что код будет динамическим, пока он не будет завершен (казалось бы, никогда), размещение SVG в отдельном месте кажется излишним, и что мне не хватает подхода для достижения этой цели.

SVG, который я пытаюсь включить, находится здесь, на GitHub:https://github.com/specialorange/FDXCM/blob/master/Rails/fdxcm/doc/models_brief.svg

Я попробовал следующее с реальным изображением, чтобы убедиться, что синтаксис работает, только то, что код SVG не отображается:

![Overview][1]
[1]: https://github.com/specialorange/FDXCM/blob/master/doc/controllers_brief.svg  "Overview"

<img src="https://raw.github.com/specialorange/FDXCM/master/doc/controllers_brief.svg">

![Alt text](https://raw.github.com/specialorange/FDXCM/master/doc/controllers_brief.svg)

[Google Doc](https://docs.google.com/drawings/d/1B95ajItJTAImL2WXISX0fkBLYk3nldea4Vm9eo-VyE4/edit) :

<img src="https://docs.google.com/drawings/pub?id=117XsJ1kDyaY-n8AdPS3_8jTgMyITqaoT3-ah_BSc9YQ&w=960&h=720">

<img src="https://raw.github.com/specialorange/FDXCM/master/doc/controllers_brief.svg">

<img src="https://docs.google.com/drawings/d/1B95ajItJTAImL2WXISX0fkBLYk3nldea4Vm9eo-VyE4/edit">

чтобы получить результаты:

обзор 1 : https://github.com/specialorange/FDXCM/blob/master/Rails/fdxcm/doc/controllers_brief.svg "Обзор"

Альтернативный текст


Документ Google :

Крис Фрисина
источник
1
GitHub теперь имеет соответствующий открытый отчет об ошибке: github.com/github/markup/issues/556
sampablokuper
Чтобы спасти людей от клика, отчет об ошибке на github был открыт 13 октября 2015 года.
Potherca

Ответы:

207

Цель raw.github.comсостоит в том, чтобы позволить пользователям просматривать содержимое файла, поэтому для текстовых файлов это означает (для определенных типов содержимого), что вы можете получить неправильные заголовки, и в браузере происходит сбой.

Когда этот вопрос был задан (в 2012 году), SVG не работали. С тех пор Github реализовал различные улучшения. Теперь (по крайней мере для SVG) отправляются правильные заголовки Content-Type.

Примеры

Все способы, указанные ниже, будут работать.

Я скопировал изображение SVG из вопроса в репозиторий на github , чтобы создать приведенные ниже примеры

Ссылки на файлы с использованием относительных путей (работает, но, очевидно, только на github.com / github.io)

Код

![Alt text](./controllers_brief.svg)
<img src="./controllers_brief.svg">

результат

Смотрите рабочий пример на github.com .

Ссылки на RAW файлы

Код

![Alt text](https://raw.github.com/potherca-blog/StackOverflow/master/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg)
<img src="https://raw.github.com/potherca-blog/StackOverflow/master/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg">

результат

Альтернативный текст

Ссылки на файлы RAW с помощью ?sanitize=true

Код

![Alt text](https://raw.github.com/potherca-blog/StackOverflow/master/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg?sanitize=true)
<img src="https://raw.github.com/potherca-blog/StackOverflow/master/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg?sanitize=true">

результат

Альтернативный текст

Ссылки на файлы, размещенные на github.io

Код

![Alt text](https://potherca-blog.github.io/StackOverflow/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg)
<img src="https://potherca-blog.github.io/StackOverflow/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg">

результат

Альтернативный текст


Некоторые комментарии относительно изменений, которые произошли по пути:

  • В Github реализована функция, позволяющая использовать SVG с синтаксисом изображений Markdown. Изображение SVG будет обработано и отображено с правильным заголовком HTTP. Определенные теги (как <script>) удалены.

    Чтобы просмотреть санированный SVG или добиться этого эффекта из других мест (например, из файлов разметки, не размещенных в репозиториях на http://github.com/ ), просто добавьте ?sanitize=trueнеобработанный URL-адрес SVG.

  • Как говорится в комментариях AdamKatz , использование источника, отличного от github.io, может создать потенциальную угрозу конфиденциальности и безопасности. См. Ответ CiroSantilli и ответ DavidChambers для более подробной информации.

  • Вопрос для решения этой проблемы был открыт на Github 13 октября 2015 года и был решен 31 августа 2017 года.

Potherca
источник
Просто чтобы прояснить, вы говорите, что изображения SVG не будут отображаться, правильно?
ShreevatsaR
@ ShreevatsaR Нет, все, кроме горячей ссылки на файл raw.github.com, работает нормально. Я только что переименовал что-то в репозитории github и забыл обновить свой ответ, разбив примеры. Исправлено сейчас.
Potherca
1
@ShreevatsaR Правильно. Github никогда не рассматривает необработанное представление для использования в качестве способа размещения файлов, только для просмотра, поэтому отправляет text/plainзаголовок.
Potherca
2
Предупреждение: rawgit.com и rawgithub.com не принадлежат и не управляются GitHub, что создает угрозу конфиденциальности и даже угрозы безопасности от злоупотреблений, если не от его текущего владельца, то, возможно, от будущего владельца, если регистрация DNS истечет. Это делает решение github.io наиболее безопасным. Смотрите также @ ответ CiroSantilli в и @ ответ davidchambers игровая , которые как примечание XSS риск того, что это создает.
Адам Кац
1
@MonsieurDart Я добавил ваше беспокойство в ответ.
Potherca
36

Я связался с GitHub, чтобы сказать, что размещенные на github.io SVG больше не отображаются в GitHub README. Я получил этот ответ:

Нам пришлось отключить рендеринг изображений svg на GitHub.com из-за потенциальных уязвимостей межсайтового скриптинга.

davidchambers
источник
3
Подожди, это случилось? Не знал
Камило Мартин
Интересно, однако, что это делает на шоу BLOB-объектов: см. Мой ответ . Поэтому я не могу понять, почему не в README.
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
@CiroSantilli 轩 事件 法轮功 包 卓 轩 BLOB-объект использует iframe, который не может делать XSS, как встроенный SVG.
Петах
3
Пришел сюда именно в поисках, если это было возможно. Подтверждение того, что это возможно: jsfiddle.net/franciscop/krqea6gc
Francisco Presencia
1
Хм, нажмите здесь, чтобы засвидетельствовать атаку XSS? Ницца.
Адам Кац
15

rawgit.com прекрасно решает эту проблему. Для каждого запроса он извлекает соответствующий документ из GitHub и, что особенно важно, передает его с правильным заголовком Content-Type.

davidchambers
источник
Это круто! Нужно вставить на сайт? или можно просто написать URL динамически, например, через скрипт. Я хочу включить это в мой фрагмент TextExpander.
эонист
Вам не нужно сначала заходить на сайт, @GitSyncApp. :)
Дэвидчамберс
1
Отвечая самому себе… 😄 RawGit не работает для частных репозиториев: github.com/rgrove/rawgit/issues/62
MonsieurDart
7
rawgit.com уходит. Согласно веб-сайту: «RawGit достиг конца срока полезного использования 8 октября 2018 г. RawGit сейчас находится в фазе заката и скоро закроется. Это было весело пять лет, но все должно закончиться. Репозитории GitHub, которые обслуживали контент через RawGit в течение последнего месяца будет по-прежнему обслуживаться, по крайней мере, до октября 2019 года. URL-адреса для других репозиториев больше не обслуживаются. Если вы в настоящее время используете RawGit, пожалуйста, прекратите его использование, как только сможете. "
Джеффал
1
Также из анонса rawgit.com: «Что вы должны использовать вместо этого Следующие бесплатные сервисы предлагают фантастические альтернативы некоторым или всем функциям RawGit. Они могут вам понравиться даже больше, чем RawGit. JsDelivr Страницы CodeSandbox unpkg»
jeffhale
8

Это будет работать Ссылайтесь на ваш SVG, используя следующий шаблон:

https://cdn.rawgit.com/<repo-owner>/<repo>/<branch>/path/to.svg

Недостатком является жесткое кодирование владельца и репо в пути, что означает, что svg сломается, если любой из них будет переименован.

Таннер Перриен
источник
Еще одним недостатком использования cdn.rawgit.comявляется то, что «файлы постоянно кэшируются на основе URL». Он никогда не обновится, если вы измените файл, если вы не измените имя или путь.
Мотти
@Mottie: в rawgit появилось обновление: «Новые изменения, внесенные вами в GitHub, будут отражены в течение нескольких минут».
эонист
Важный! RawGit не работает для частных репозиториев: github.com/rgrove/rawgit/issues/62
MonsieurDart
5
Обновление 2018. Rawgit закат. Смотрите мой комментарий выше.
Джеффал
8

Обновление 2020

GitHub, похоже, использует два подхода к безопасности, это хорошая статья: https://digi.ninja/blog/svg_xss.php, см. Также: /security/148507/how-to-prevent- XSS-в-SVG-файлов для загрузки

Обновление 2017

Разработчик GitHub в настоящее время изучает это: https://github.com/github/markup/issues/556#issuecomment-306103203

Обновление 2014-12 : GitHub теперь SVG на шоу BLOB- , поэтому я не вижу причин, почему бы не выполнять рендеринг в README:

Также обратите внимание, что у SVG есть попытка XSS, но он не запускается: https://raw.githubusercontent.com/cirosantilli/test/2144a93333be144152e8b0d4144b77b211afce63/svg.svg

Миллиард смеха SVG действительно заморозил Firefox 44, но с Chromium 48 все в порядке: https://github.com/cirosantilli/web-cheat/blob/master/svg-billion-laughs.svg

Петах упомянул что с каплями все в порядке, потому что SVG находится внутри iframe.

Возможное обоснование того, что GitHub не обслуживает изображения SVG

  • общие уязвимости XML. Например, использование миллиарда смехов заставило Firefox разбить мою систему. Ошибка Firefox с приложенным эксплойтом: https://bugzilla.mozilla.org/page.cgi?id=voting/user.html . То же самое в Chromium: https://code.google.com/p/chromium/issues/detail?id=231562

  • Скрипты SVG XSS: хотя большинство браузеров не запускают скрипты, когда SVG встроен в img , кажется, что это не требуется стандартами, поэтому, возможно, GitHub безопасен.

    Браузеры запускают его, если вы открываете SVG напрямую (но похоже, что GitHub никогда не показывает изображения непосредственно в github.comдомене) или если он встроенный (который в настоящее время полностью удаляется GitHub), поэтому такие случаи не должны представлять проблемы безопасности. Соответствующие ссылки:

О рисках SVG в целом задаются следующие вопросы: /security/11384/exploits-or-other-security-risks-with-svg-upload

Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
источник
2
Браузеры не запускают скрипт при обращении к SVG через тег изображения. Не стесняйтесь проверить себя.
Роберт Лонгсон
@RobertLongson Спасибо за исправление. Это указано в стандарте, просто обычное поведение браузера? Это сделано для безопасности?
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
Это сделано для конфиденциальности, и это не совсем в стандарте. Люди понимают, как работают растровые изображения и что они могут / не могут делать при использовании в качестве изображения. SVG-изображения должны работать одинаково.
Роберт Лонгсон
4

У меня есть рабочий пример с тегом img, но ваши изображения не будут отображаться. Я вижу разницу в типе контента.

Я проверил изображение GitHub из вашего поста (изображения Google Doc вообще не загружаются из-за сбоев соединения). Изображение из github поставляется в виде содержимого: text / plain, которое не будет отображаться вашим браузером как изображение.

Правильным значением типа содержимого для svg является image / svg + xml. Поэтому вы должны убедиться, что SVG-файлы имеют правильный тип MIME, но это проблема сервера.

Попробуйте это с http://svg.tutorial.aptico.de/grafik_svg/dummy3.svg и не забудьте указать ширину и высоту в теге.

Карстен С.
источник
1

Используйте этот сайт: https://rawgit.com , он работает для меня, так как у меня нет проблемы с разрешением файла SVG.
Пожалуйста, обратите внимание, что RawGit не является сервисом github, как упоминалось в Rawgit FAQ :

RawGit никак не связан с GitHub. Пожалуйста, не связывайтесь с GitHub с просьбой о помощи с RawGit

Введите URL-адрес svg, который вам нужен, например:

https://github.com/sel-fish/redis-experiments/blob/master/dat/memDistrib-jemalloc-4.0.3.svg

Затем вы можете получить URL ниже, который можно использовать для отображения:

https://cdn.rawgit.com/sel-fish/redis-experiments/master/dat/memDistrib-jemalloc-4.0.3.svg
Сель-рыба
источник
2
Важный! RawGit не работает для частных репозиториев: github.com/rgrove/rawgit/issues/62
MonsieurDart
1

Так же, как это работало для меня на Github.

![Imgae Caption](ImageAddressOnGitHub.svg)

или

<img src="ImageAddressOnGitHub.svg">
Мухаммед Гейдари
источник