Как предотвратить нападения инжекции JavaScript в сгенерированном пользователями HTML

// This is the youtube video URL: http://www.youtube.com/watch?v=nOHHta68DdU
$code = "nOHHta68DdU";
// Get video feed info (xml) from youtube, but only the title | http://php.net/manual/en/function.file-get-contents.php
$video_feed = file_get_contents("http://gdata.youtube.com/feeds/api/videos?v=2&q=".$code."&max-results=1&fields=entry(title)&prettyprint=true");
// xml to object | http://php.net/manual/en/function.simplexml-load-string.php
$video_obj = simplexml_load_string($video_feed);
// Get the title string to a variable
$video_str = $video_obj->entry->title;
// Output
echo $video_str;
52
задан Jeff Meatball Yang 2 June 2009 в 11:00
поделиться

5 ответов

Думаешь, это все? Проверьте это .

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

EDIT :

К сожалению, я не знаком с .NET, но вы можете проверить собственный stackoverflow битва с XSS ( http://blog.stackoverflow.com/2008/06/safe-html-and-xss/ ) и кодом, который был написан для синтаксического анализа HTML, размещенным на этом сайте: Ссылка Archive.org - очевидно, вам может потребоваться изменить это, потому что ваш белый список больше, но это должно помочь вам начать.

36
ответ дан 7 November 2019 в 09:33
поделиться

Белый список для элементов и атрибутов - это единственный приемлемый выбор, на мой взгляд. Все, что не входит в ваш белый список, должно быть удалено или закодировано (замените <> & "на сущности). Также не забудьте проверить значения в допустимых атрибутах.

Если вы хотите что-то меньшее, вы открываете для себя проблемы - известные эксплойты или те, которые будут открыты в будущем.

7
ответ дан 7 November 2019 в 09:33
поделиться

Единственный действительно безопасный способ - использовать белый список. Закодируйте все, а затем конвертируйте разрешенные коды обратно.

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

4
ответ дан 7 November 2019 в 09:33
поделиться

какой код на стороне сервера вы используете? В зависимости от того, какое количество или способы вы можете отфильтровать вредоносный скрипт, это опасная территория. Даже опытных профессионалов ловят: http://www.codinghorror.com/blog/archives/001167.html

0
ответ дан 7 November 2019 в 09:33
поделиться

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

[Редактировать] Я вижу, вы уточнили свой вопрос, и вот несколько уточненный ответ:

From:

Oracle® Database Administrator's Guide
10g Release 2 (10.2)
Part Number B14231-02

«Индексы могут быть созданы во временных таблицах. Они также временные , и данные в индексе имеют тот же сеанс или область транзакции в качестве данных в базовой таблице . "

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

Вероятно, вы также захотите удалить все атрибуты разрешенных тегов HTML (например, из-за вашего второго примера).

Другим решением было бы ввести так называемый BB-код, который используется на многих форумах. Он имеет синтаксис, аналогичный HTML, но начинается с идеи белого списка разрешенного кода, который затем преобразуется в HTML. Например, [b] example [/ b] приведет к example . Убедитесь, что при использовании BB-кода предварительно все еще отфильтрованы HTML-теги.

[b] example [/ b] приведет к example . Убедитесь, что при использовании BB-кода предварительно все еще отфильтрованы HTML-теги.

[b] example [/ b] приведет к example . Убедитесь, что при использовании BB-кода предварительно все еще отфильтрованы HTML-теги.

3
ответ дан 7 November 2019 в 09:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: