Включіть 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 "Огляд"

Alt текст


Документ Google :


1
GitHub тепер має відповідний відкритий звіт про помилку: github.com/github/markup/isissue/556
sampablokuper

Щоб врятувати людей натискання, 13 жовтня 2015 року було відкрито звіт про помилки на
Github

Відповіді:


206

Мета raw.github.com- дозволити користувачам переглядати вміст файлу, тому для текстових файлів це означає (для певних типів вмісту) ви можете отримати неправильні заголовки, і в браузері все порушиться.

Коли було задано це питання (у 2012 році), SVG не працювали. З тих пір Github впровадив різні вдосконалення. Тепер (принаймні для SVG) надсилаються правильні заголовки типу вмісту.

Приклади

Всі наведені нижче способи працюватимуть.

Я скопіював зображення 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">

Результат

Alt текст

Посилання на файли 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">

Результат

Alt текст

Посилання на файли, розміщені на 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">

Результат

Alt текст


Деякі зауваження щодо змін, які відбулися попутно:

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

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

  • Як зазначає Адам Катц у коментарях, використання іншого джерела, ніж github.io, може спричинити ризики конфіденційності та безпеки. Дивіться відповідь CiroSantilli та відповідь DavidChambers для отримання більш детальної інформації.

  • Питання щодо вирішення цього питання було відкрито в Github 13 жовтня 2015 року і було вирішено 31 серпня 2017 року


Щоб зрозуміти, ви говорите, що 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, щоб сказати, що SVG-файли, розміщені github.io, більше не відображаються в GitHub README. Я отримав цю відповідь:

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


3
Зачекайте, це трапляється? Не знав.
Каміло Мартін

Цікаво, що все-таки рендерінг на блоб-шоу: див. Мою відповідь . Тож я не можу зрозуміти, чому б не в README.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

@CiroSantilli 六四 事件 法轮功 包 卓 轩 Блоб використовує iframe, який не може робити XSS як вбудований SVG.
Пета

3
Сюди прийшов саме пошук, якщо це було можливо. Підтвердження концепції, що це можливо: jsfiddle.net/franciscop/krqea6gc
Francisco Presencia

1
Гм, натисніть тут, щоб стати свідком нападу XSS? Приємно.
Адам Кац

15

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


Це круто! Потрібно вставити на веб-сайт? або, наприклад, можна просто написати URL-адресу динамічно через скрипт. Я хочу включити це до свого фрагмента TextExpander.
еоніст

Спочатку вам не потрібно відвідувати веб-сайт, @GitSyncApp. :)
davidchambers

1
Відповідаючи на себе… 😄 RawGit не працює для приватних репост
MonsieurDart

7
rawgit.com відходить. За даними веб-сайту: "RawGit закінчився термін корисного використання 8 жовтня 2018 року. RawGit зараз перебуває у фазі заходу і незабаром закриється. П'ять років було весело, але все має закінчитися. Репозитарії GitHub, які обслуговували вміст через RawGit протягом останнього місяця надалі буде розміщено щонайменше до жовтня 2019. URL-адреси інших сховищ більше не подаються. Якщо ви зараз використовуєте RawGit, будь ласка, припиніть його використовувати, як тільки зможете. "
jeffhale

1
Також із оголошення про захід сонця rawgit.com: "Що слід використовувати замість. Наступні безкоштовні сервіси пропонують фантастичні альтернативи деякому або всій функціональності RawGit. Вони можуть вам сподобатися навіть більше, ніж RawGit. JsDelivr GitHub Pages 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 не працює для приватних репост
MonsieurDart

5
Оновлення 2018. rawgit заходить. Дивіться мій коментар вище.
jeffhale

8

Оновлення 2017 року

Зараз розробник GitHub вивчає це: https://github.com/github/markup/isissue/556#issuecomment-306103203

Оновлення 2014-12 : GitHub тепер рендерує SVG у шоу, тому я не бачу жодної причини, чому б не відобразити README-рендерінг:

Також зауважте, що у SVG є спроба XSS, але вона не працює: https://raw.githubusercontent.com/cirosantilli/test/2144a93333be144152e8b0d4144b77b211afce63/svg.svg

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

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

Можливо, GitHub не обґрунтовує зображення SVG

  • загальні вразливості XML Наприклад, відкриття мільярду сміху тільки що змусило Firefox розбити мою систему. Помилка Firefox із додаванням exploit: https://bugzilla.mozilla.org/page.cgi?id=voting/user.html . Те саме в Chromium: https://code.google.com/p/chromium/isissue/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 Дякую за виправлення Це стандартне поведінка браузера? Це робиться для безпеки?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Це зроблено для конфіденційності, і це насправді не в стандарті. Люди розуміють, як працюють растрові зображення, і що вони можуть / не можуть робити при використанні в якості зображень SVG-зображення повинні працювати однаково.
Роберт Лонгсон

4

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

Я перевірив зображення github з вашого допису (зображення doc google взагалі не завантажуються через збої в зв’язку). Зображення з 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, як згадується у FAQ щодо Rawgit :

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 не працює для приватних репостів
MonsieurDart

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.