Pull to refresh

Comments 13

выглядит как будто React-разработчики наступают последовательно на все грабли PHPшников, рендеря небезопасные данные прямо во фронте, уже пора вводить аналог magic_quotes_gpc в реакт?
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Все-таки правильно «типичных» (ошибки). Типовой может быть дом, застройка, в смысле шаблонной. А типичный это «свойственный» для кого-то или чего-то.
Видимо, ошибки настолько типичные, что имплементации у них типовые.

Вы приводите подобный пример небезопасного кода.


<script>window.__STATE__ = ${JSON.stringify({ data })}</script>

Допустим даже у нас вот такой стейт:


{ username: "pwned", bio: "</script><script>alert('XSS Vulnerability!')</script>" }

В чем тут проблема? Даже если какой-то из моих компонентов будет делать что-то подобное:


return (
  <div>{ state.bio }</div>
);

Данное значение все равно будет выведено как текст, а не как html-код. Т.е. "зловредный" скрипт не будет выполнен. Если же речь о чем-то вроде:


div.innerHTML = state.bio;

То React уже здесь не при чем.


| Уязвимость №3: непонимание смысла конструкции dangerouslySetInnerHtml


Не знаю как Вы, но я в своих проектах ещё не встречал использования dangerouslySetInnerHtml, так что не уверен, что это типичная ошибка.

Поддерживаю вопрос, совершенно не понятно что автор имел ввиду. Сначала я подумал, что перевод кривой, посмотрел в оригинал — там такое же мутное описание.


Вообще складывается впечатление, что ru_vsd переводит весь шлак подряд. Иногда встречаются статьи-бриллианты, но какого-то предварительного отсева явно не хватает.

Речь идет про такой код


<script>
const json = JSON.parse('{"text":"</script><script>alert(1)</script>" }')
...

Если вы храните экранированные данные в базе, то у вас нет проблем. Но я не храню и не буду.

Замечательно. Только что с этим кодом не так? Я только что его выполнил в консоли и ничего ужасного не произошло, кроме создания переменной json. Что дальше такого страшного должен сделать "типовой" react-разработчик, чтобы это привело к каким-то нежелательным последствиям? Еще раз отмечу, что действия вроде


div.innerHTML = json.text;

никакого отношения к React не имеют.

Попробуйте сохранить в server.js содержимое pastebin.com/GVHvwpk1 после чего установить в папку express и выполните

npm i express
node server.js

После этого перейдите на localhost:3000

div.innerHTML = json.text

за вас при этом делает шаблонизатор строк

В заголовке статьи написано


Три типовых ошибки в сфере безопасности, о которых должен знать каждый React-разработчик

Я еще раз повторю на всякий случай — при чем тут React? То, что Вы привели как пример не является проблемой React'а, а самая что ни на есть обычная code-injection (во всем "проверочном" проекте нет ни одной ссылки на React). Единственное, что связывает его с React'ом это то, что такой подход может решить использовать разработчик, который хочет задать исходное состояние для Redux, который вроде как часто используют и с React. До React'а дело и не доходит, а если бы дошло, то там уже никаких проблем бы не было (подобный JSX ни к каким проблемам не приведет <input value={ json.input } />).

Сохраните html и откройте как html. Тем что это выведет alert()
Потому что браузеру плевать, что JS не закончился. Он видит

и закрывает script. А дальше можно написать любой скрипт. Именно поэтому ошибка такая опасная… ее не видят.
Sign up to leave a comment.