Poprzedni wpis (Why Python?) | Następny wpis (Mam pomysł na spotkanie towarzyskie)

Markdown dla grzecznych

Markdown to fajny wynalazek, ale zaskakująco niebezpieczny i to w miejscu, którego zwykle się nie spodziewamy... Wspomniał o tym jakiś czas temu Jeff Atwood przy okazji jakichś innych wynurzeń. Utkwiło mi to bardzo mocno w pamięci, pewnie dlatego, że kiedyś zdarzyło mi się popełnić aplikację podatną na XSS. Tak, nieumiejętnie (nazwałbym to bezmyślnie, ale nie jest moim zamiarem itd.) zastosowany markdown wystawi na niebezpieczeństwo także i Twój serwis. Zastanawiam się nad tym, jak zastosować do zmyślnie, bo chciałbym użytkownikom wMiastoWzięci.pl dać do ręki coś, co im się przyda, a jednocześnie nie pozwoli im na wyrządzenie żadnych szkód (obojętne, umyślnie czy nieumyślnie).

Pewnym rozwiązaniem mogłoby być oczyszczenie tekstu źródłowego przed zapuszczeniem na nim filtra markdown — ale to trochę przypomina wylewanie dziecka z kąpielą, bo wyłącza część użyteczności markdown. Z drugiej jednak strony, rozwiązanie Jeffa A. (czyszczenie tylko części HTML) nie wydaje mi się rozsądne, przede wszystkim z powodu ogromnego skomplikowania zagadnienia. Czyżby była to sytuacja bez wyjścia?

Komentarze (2)

#1 Eluś skomentował(-a) 25 listopada 2008 o 17:52

Nie miałem cierpliwości doczytać do końca. Ale z tego co rozumiem, problem występuje w przypadku mieszania Markdowna z HTML. A konkretniej – w przypadku pozwolenia na użycie pewnego dozwolonego podzbioru HTML. Filtrowanie niedozwolonych tagów za pomocą wyrażeń regularnych jest ciężkie z uwagi na różną interpretację HTML-owej zupy przez przeglądarki.

Teoretycznie Markdown — ani żaden inny system markupowy — nie stanowi zagrożenia, w przypadku kiedy nie dopuszcza na mieszanie z HTML. Pythonowa implementacja posiada mechanizm "safe mode", który określa w jaki sposób traktować tagi HTML. Można je podmienić, usunąć bądź "wyeskejpować". Nie wiem, czy mechanizm ten posiada jakieś luki bezpieczeństwa.

http://www.freewisdom.org/projects/python-markdown/Using_as_a_Module

Proponuję dać użytkownikom możliwość korzystania z czystego Markdowna, bez możliwości mieszania tagów HTML.

#2 jarek skomentował(-a) 25 listopada 2008 o 20:44

Nie znalazłem lepszego rozwiązania. Niestety.

Ładowanie...