Все ответы сосредоточены на проверке файлов. Это практически невозможно.
Разработчики Django не просят вас проверить, могут ли файлы выполняться как cgi файлы. Они просто говорят вам не помещать их в место, где они будут казнены.
Вы должны поместить все вещи Django в специальный каталог Django. Этот каталог кода Django не должен содержать статического содержимого. Не помещайте пользовательские файлы в исходный репозиторий Django.
Если вы используете Apache2, ознакомьтесь с базовым руководством по cgi: http://httpd.apache.org/docs/2.0/howto/cgi.html
Apache2 может быть настроен для запуска любых файлов в папке ScriptAlias
. Не помещайте пользовательские файлы в папки /cgi-bin/
или /usr/local/apache2/cgi-bin/
.
Apache2 может быть настроен на файлы cgi сервера, в зависимости от настроек AddHandler cgi-script
. Не позволяйте пользователям отправлять файлы с расширениями, такими как .cgi
или .pl
.
Однако вам необходимо очистить файлы, отправленные пользователями, чтобы их можно было безопасно запускать на компьютерах других клиентов . Отправленный HTML небезопасен для других пользователей. Это не повредит вашему серверу. Ваш сервер просто плюет на того, кто его запрашивает. Получить HTML-дезинфицирующее средство.
Также SVG может быть небезопасным . У него были ошибки в прошлом. SVG - это XML-документ с javascript, поэтому он может быть вредоносным.
PDF ... сложно. Вы можете преобразовать его в изображение (если вам действительно нужно) или предоставить предварительный просмотр изображения (и позволить пользователям загружать его на свой страх и риск), но для людей, пытающихся использовать его, будет больно.
Рассмотрим белый список файлов, с которыми все в порядке. Вирус, встроенный в файл gif, jpeg или png, будет просто выглядеть как поврежденное изображение (или не отображаться). Если вы хотите быть параноиком, конвертируйте их в стандартный формат, используя PIL (эй, вы также можете проверить размеры). Санированный HTML должен быть в порядке (удаление скриптовых тегов - не ракетостроение). Если санитарная обработка занимает много времени (или вы просто осторожны), вы можете поместить ее на отдельный сервер, я думаю.