, Если у вас есть взломанная база данных, вам нужно беспокоиться не только о XSS. Этот пост имеет некоторый контроль за такими угловыми случаями.

аю телегид с React. Im тянет показать информацию из этого API:http://api.tvmaze.com/episodes/333

Как вы можете видетьsummary содержит HTML. Если я рендеринг поля, то HTML интерпретируется как строка, что означает, что вы можете увидеть<p> теги и т. д. на странице.

Я знаю, что это сделано из соображений безопасности, и я мог бы использоватьdangerouslySetInnerHTML но его обескураживают, так что лучше для этого? Это должно быть довольно распространенным явлением для получения отформатированного текста из API и необходимости его визуализации. Я удивлен, что нет фильтра, который позволил бы<p> <h1> и т. д., но не теги сценария.

 Hardik Modha19 окт. 2017 г., 17:07
Не прямой вопрос к вашему ответу, но вы виделиэто?

Ответы на вопрос(1)

Решение Вопроса

L из API в React?

Технически нет. Если хотите, вы можете поработать с трансформером Babel, но такой подход больше не является «безопасным» или рекомендуемым. Это только более гибкая альтернатива. ВидетьВот для получения дополнительной информации об этом.

Это сказало,dangerouslySetInnerHTML все еще рекомендуемый подход для вставки необработанной разметки в ваш компонент. Не заблуждайтесь, название пугающее, чтобы напомнить разработчикампотенциал XSS риск. Тот факт, что вы используете его, не делает ваш код "вонючим" или иным образом "плохим".

Другими словами, если выопределенный что код, который вы получаете, не является вредоносным, это довольно безопасная ставка. Если вы доверяете API, вам не о чем беспокоиться. Например, этосовершенно безопасно:

return <div dangerouslySetInnerHTML={{__html: "<p>foo bar</p>"}} />;

и так это:

let markup = SomeApiCallToTrustedProvider(); //"<p>foo bar</p>"
return <div dangerouslySetInnerHTML={{__html: markup}} />;

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

Я удивлен, что нет фильтра, который позволил бы<p>, <h1> и т. д., но не теги сценария.

Ну, это будет какая-то дезинфекция. Есть фрагменты того, как вы можете реализовать свой собственный,Вот например...

 theUtherSide14 февр. 2019 г., 14:26
Я думаю, что аргумент «нет никакого способа убедиться, что вы извлекаете безопасный html» - всегда можно взломать БД и вставить вредоносные значения. Передний конец должен вычистить то, что выходит из внутреннего конца. Никогда не верь. Всегда проверяйте. Хорошее чтение:github.com/cure53/DOMPurify/wiki/...
 Chris14 февр. 2019 г., 14:36
@theUtherSide, которая является действительным аргументом, но это также может быть сказано буквально для каждого вопроса, связанного с безопасностью, а именно:ничто не на 100% надежно, Если у вас есть взломанная база данных, вам нужно беспокоиться не только о XSS. Этот пост имеет некоторый контроль за такими угловыми случаями.

Ваш ответ на вопрос