Я в безопасности от XSS, если я удалю «<» и «>» из пользовательского ввода? - PullRequest
0 голосов
/ 12 июля 2019

Допустим, мое приложение принимает пользовательский ввод:

1,2,3,4

отправляет его на мой сервер, а затем возвращает

<table><tr><th>1</th><th>2</th><th>3</th><th>4</th></tr></table>

Одна потенциальная проблема безопасности будет, если мой пользователь загрузит:

<script>alert('!')</script>,2,3,4

Могу ли я предотвратить все опасные атаки XSS, просто удалив < и > из пользовательского ввода (как показано ниже)в Python), или есть другие персонажи, которые могут причинить мне боль?

data = data.replace('>','').replace('<','')

Я бы использовал очистку языка шаблонов (Django), но, поскольку я делаю свой собственный HTML-код на бэкэнде, я не могу, потому что тогда он будет очищать мою таблицутоже.

1 Ответ

1 голос
/ 12 июля 2019

Я в безопасности от XSS, если я удалю '<' и '>' из пользовательского ввода '?

Нет. Существует множество других способов, которыми нефильтрованный пользовательский ввод может быть использован для эксплойта. Например, рассмотрим плохо разработанное программное обеспечение, которое позволяет пользователю установить цвет элемента:

<element style="color: $COLOR" />

Злоумышленник может установить $COLOR в строку

blue" onload="alert(1)

, чтобы привести к выводу

<element style="color: blue" onload="alert(1)" />

Обратите внимание, что библиотека «очистки» ввода, такая как Bleach, здесь не поможет, поскольку технически входные данные не содержат разметки! Единственное общее решение состоит в том, чтобы быть осторожным в том, как и где вы разрешаете интерполировать пользовательский ввод в вашу разметку.

Я бы использовал мою очистку языка шаблонов (Django), но так как я делаю свой собственный HTML-код на бэкэнде, я не могу, потому что тогда он будет также очищать мою таблицу.

Я не уверен, что вы беспокоитесь здесь. Функции фильтрации в шаблонах Django применяются только к содержимому, используемому в шаблонах, а не в другом месте приложения.

...