Jaka tu jest podatność?

0

Kontekst: Edytor tekstowy na stronie internetowej, który ma za zadanie obsługiwać coś a'la markdown u nas na forum :D

Input:

Hi! could anyone help me with this code, because I struggle to understand what's going on here: var a = 5 Thanks!

Podejście 1 (naiwne) - Replace: zbieramy wszystkie indeksy stringu "**" i te na parzystych indeksach zamieniamy na <b>, a na nieparzystych na </b>.

output =

Hi! could anyone help me with this code, because I struggle to understand what's going on here: <b>var a = 5</b> Thanks!

Podejście 2 (znacznie lepsze) - Parser / Abstract Syntax Tree Array

[
  {
    "Type": "Text",
    "Content": "Hi! could anyone help me with this code, because I struggle to understand what\u0027s going on here: "
  },
  {
    "Type": "BoldText",
    "Content": "var a = 5"
  },
  {
    "Type": "Text",
    "Content": " Thanks!"
  }
]

a następnie renderowanie tego

Drugi sposób wydaje mi się o wiele lepszy i bezpieczniejszy, ale nie mam pomysłu jaka podatność jest w 1 podejściu

1
  1. Hm no dobra, ale chcesz tam mieć TYLKO to boldowanie czy coś więcej? Bo różnica jak między krzesłem a krzesłem elektrycznym :) Plus w jaki sposób sanityzujecie istnienie tagów HTML już teraz żeby nie było tam XSSów?
  2. Samo zamienianie ** na <b> albo </b> to nie problem, ale jak chcesz mieć tagi z zawartościa kontrolowaną przez usera (np. linki) to robi się trochę trudniej.
0
Shalom napisał(a):
  1. Hm no dobra, ale chcesz tam mieć TYLKO to boldowanie czy coś więcej? Bo różnica jak między krzesłem a krzesłem elektrycznym :) Plus w jaki sposób sanityzujecie istnienie tagów HTML już teraz żeby nie było tam XSSów?

O tym zapomniałem, że pierwsze podejście wymaga przejmowania się tym, bo w drugim to możemy bezpiecznie założyć, że wszystko w property Content może być escapniętę, bo tam ma być tylko czysty tekst.

Miałem też wątpliwości co do tego, że przeglądarki próbują "naprawiać" html i jak można byłoby tego nadużyć tutaj.

  1. Samo zamienianie ** na <b> albo </b> to nie problem, ale jak chcesz mieć tagi z zawartościa kontrolowaną przez usera (np. linki) to robi się trochę trudniej.

Generalnie pewnie chciałbym matchnąć wszystko to, co oferują edytory na najpopularniejszych stronach - tabelki, kolory, sekcje z kodem, obrazki(!!!) i pewnie więcej. Podejście już wybrałem (2), ale chciałem się dowiedzieć o wadach podejścia 1.

1

@WeiXiao:

Foo **bar** `**bar**`
  1. sformatuje jako:
Foo <b>bar</b> <pre><b>bar</b></pre>

Co nie jest raczej poprawnym wynikiem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1