#quick #XSS
Многие забывают, что парсинг html на бекенде - довольно сложный процесс. Поэтому на уровне даже стандартных парсеров популярных языков программирования - он не реализован полностью
Рассмотрим код на python:
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print(f"{tag}")
for attr in attrs:
print(f" ->{attr[0]}: {attr[1]}")
def handle_endtag(self, tag):
pass
def handle_startendtag(self, tag, attrs):
print(f"{tag}")
for attr in attrs:
print(f" ->{attr[0]}: {attr[1]}")
def handle_data(self, data):
pass
html_string = input()
parser = MyHTMLParser()
parser.feed(html_string)
Этот код выводит теги и их атрибуты.
При этом стандартная библиотека питона не учитывает, что для тегов
"iframe", "noembed", "noframes", "noscript", "plaintext", "title", "textarea", "xmp"
Содержимое не обрабатывается как html теги
Соответственно при вводе:
<textarea><a href="x></textarea><img src=x onerror=alert()//">
Результат парсинга будет выглядеть следующим образом:
textarea
a
->href: x></textarea><img src=x onerror=alert()//
В то время как в браузере это будет выглядеть следующим образом:
<textarea><a href="x></textarea><img src="x" onerror="alert()//"">
И соответсвенно выведется alert()
Вещь баянистая, но многие про это забывают при той же эксплуатации Server Side XSS
Попробую такой формат заметок
Обсуждение 1
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram