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?
Etykiety: internet programowanie wMiastoWzięci.pl
Komentarze (2)
#2 jarek skomentował(-a) 25 listopada 2008 o 20:44
Nie znalazłem lepszego rozwiązania. Niestety.



#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.