Security

Security

ReactJS Specified XSS

В ReactJS встроена защита, от разного рода XSS инъекций (auto escaping):

import './App.css';

function App() {
  let XSS_PAYLOAD = "<img src=x onerror='alert(123)'/>";

  return (
    <div className="App">
      <header className="App-header">
        <div>STRING {XSS_PAYLOAD} ESCAPED</div>
      </header>
    </div>
  );
}

export default App;

И выглядит это так:

Однако, для разработчиков оставили способ отрисовать html+js в динамике, если это действительно необходимо:

PS: Ну и всякие documentWrite остаются, конечно:

Props Injections

В React есть возможность передать в компонент массив с переопределенными атрибутами. Если атакующий может контролировать этот массив, то он сможет определить ключ атрибута dangerouslySetInnerHTML и добавить туда свою нагрузку:

Один только нюанс: это сработает только в том случае, если в PROPS_INJ_PAYLOAD не содержится других ключей, иначе React/Webpack выведут ошибку:

Injectable Attributes

CSS in JS

У React есть возможность определять стили для компонентов прямо в JS коде, используя JS синтаксис:

Короч есть какая-та возможность делать css injection. Но я не разобрался. Надо лезть в документацию и смотреть разницу между class и className (один из них безопасный, другой — нет) и как делать Attribute Injection в эти поля.

Last updated