- Базовая проверка работоспособности для размера файла
- Избегайте проверки с использованием DTD или XSD. Если необходимо, обязательно прочитайте о «XML-бомбах» . Кроме того, XSD могут быть загружены из Интернета. Злоумышленник может ввести URL-адрес XSD, который загружается вечно, что приводит к DOS
- Проверьте XML на основе ваших бизнес-правил и УДАЛИТЕ его с жесткого диска, если он не пройдет проверки.
- Если вы сохраняете файлы на своем сервере, убедитесь, что у каталога нет разрешений на выполнение
- Рекомендуется переименовать файл в произвольное имя, поэтому, даже если файл будет «abc.xml», он будет сохранен как abc-433fdsadf3234234.xml на жестком диске.
- НЕ разрешать пользователю загружать файл, который он загрузил, по анонимному URL. Если вы можете, предотвратить загрузку загруженных файлов. Если вы не можете, используйте одноразовый домен или обслужите файл, используя IP-адрес. Это сделано для предотвращения ошибок отслеживания контента. Даже если вы установите тип контента, некоторые браузеры могут быть обмануты, думая, что документ - это HTML. Это позволяет злоумышленнику вставить код JavaScript, который может быть выполнен браузером.
РЕДАКТИРОВАТЬ:
Еще немного информации о нюхании типа контента
Допустим, злоумышленник загружает файл XML, содержащий HTML в первых нескольких строках. Когда пользователь загружает этот XML, можно заставить браузер думать, что этот XML является HTML.
После того, как вы обманули браузер, злоумышленник может выполнить JavaScript в браузере пользователя. Простым примером может быть кража куки сессии.
Собрав все вместе, вот как атака работает -
1. Злоумышленник загружает XML, содержащий код JavaScript
2. Атакующий отправляет ссылку на скачивание другому пользователю, который является жертвой
3. Атакующий теперь может запускать javascript в браузере жертвы и красть его куки
Чтобы предотвратить это: a) проверьте XML для вашей схемы, b) не разрешайте пользователю загружать загруженные файлы, c) обслуживайте файл с IP-адреса или домена, отличного от вашего обычного домена, - так что куки не могут быть украдены. Вы можете прочитать подобную информацию здесь - https://security.stackexchange.com/questions/8587/how-can-i-be-protected-from-pictures-vulnerabilities