Как можно избежать XSS в загрузках HTML? - PullRequest
5 голосов
/ 13 октября 2010

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

Мы протестировали, чем в IE8, если вы загружаете файл HTML, содержащий скрипт, который пытается получить доступ к вашим файлам cookie, и после загрузки вы выбираете опцию «Открыть», скрипт выполняется и получает информацию о вашем файле cookie без проблем. на все.

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

Есть ли способ избежать этого? Мы проверили, что и Chrome, и Firefox не позволяют этому случиться. Как можно избежать такого поведения в любом браузере, включая IE8?

Ответы [ 3 ]

5 голосов
/ 13 октября 2010

Не разрешать загрузку произвольного контента.Это исключительно ужасная идея.

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

Некоторыми более практичными вариантами может быть процесс на основе авторизации, при котором каждый файл проходит автоматический просмотр, а затем ручное подтверждение автоматической очистки./ фаза анализа.

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

4 голосов
/ 20 октября 2010

Это действительно плохая идея с точки зрения безопасности.Тем не менее, если вы хотите сделать это, включите HTTP-заголовок ответа Content-disposition: attachment. Это заставит браузер загружать файл, а не открывать его.В Apache это делается путем добавления Header set Content-disposition "attachment" в файл .htaccess.

Обратите внимание, что плохая идея - просто добавить Content-type: text/plain, как указано в одном из ответов, потому что это не будет работать для Internet Explorer,Когда IE получает файл с заголовком text / plain типа содержимого, он включает свой анализатор MIME, который пытается определить реальный тип содержимого файла (поскольку некоторые серверы отправляют все файлы с text / plain).Если он встречает HTML-код внутри файла, он заставит браузер использовать файл как text / html и отобразить его.

1 голос
/ 13 октября 2010

Если вам действительно нужно, чтобы пользователи загружали файлы HTML, убедитесь, что файлы HTML в этом каталоге снабжены типом mime text / plain, а не text / html или аналогичным.

Это будетзапретить выполнение открытых файлов в браузере.Если вы используете apache, см. Директиву AddType .

...