Как ограничить / проверить загрузку файлов типов файлов на стороне сервера IIS

Я хотел бы иметь белый список типов файлов, которые пользователи имеют право загружать на мой сервер IIS (im с помощью IIS v7.5).

какие у меня есть варианты? Например, чтобы ограничить размер файла до 5 Мб для определенного действия в моем контроллере, я добавил Этот раздел в свой webconfig:

<location path="home/fileupload">
  <system.web>
    <!-- maxRequestLength is in kilobytes (KB) -->
    <httpRuntime maxRequestLength="5120" /> <!-- 5MB -->
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- maxAllowedContentLength is in bytes -->
        <requestLimits maxAllowedContentLength="5242880"/> <!-- 5MB -->
      </requestFiltering>
    </security>
  </system.webServer>
</location>

есть ли опция в webconfig для установки белого списка разрешенных типов файлов? Или единственный вариант-проверить типы файлов в коде, когда файл полностью загружен? Что порекомендованная техника? Как я могу быть уверен, что .docx,.документ PDF. ,jpg и т. д. Действительно то, что они есть?

3 ответов


Так как вы хотите на стороне сервера, вы можете использовать тип MIME файлов.

этой post показывает, как определить тип MIME на основе содержимого файлов (вместо расширения).

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

Это обеспечит довольно хорошую степень уверенности в том, что файл является тем, который вы хотите принять!

EDIT: на основе комментариев до сих пор.... Основываясь на том, что вы сказали, вы ищете этот метод должен работать довольно хорошо для вас. Мое предложение, если вы просто хотите ограничить его типами файлов, перечисленных в одном из комментариев... Просто проверьте расширение файла. Если это действительно, то передайте файл в urlmon.dll перечислены в соединение. Убедитесь, что он не возвращается как недопустимый тип....он же исполняемый файл / java / zip / etc. Если это не недопустимый тип, то у вас будет очень высокая степень уверенности в том, что это безопасный файл!

наконец, чтение комментариев к этому сообщению похоже на urlmon.dll может поддерживать все типы файлов, которые вы хотите неявно, что устранит необходимость проверить, что это не исполняемый файл или что-то в этом роде, но вам нужно будет подтвердить doc/docx / xsl/xslx верните допустимый тип mime.


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

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

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


анотации данных - это то, что вы ищете, вот поиск, который может вам помочь,данных Google anotaions

обновление

Я думаю, что он проверяет расширения файлов. Если вы не хотите полагаться на file extensions, Я думаю, что ваш лучший выбор-подтвердить off типы MIME. Это сложнее и варьируется от браузера к браузеру и может быть подделано (хотя это сложнее, чем подделка расширения.)

A простой, но не бесплатный вариант-использовать RadAsyncUpload Из Telerik.

вы можете написать этот код самостоятельно (хотя я никогда не возился с ним) этой возможно, вы начнете. (это сообщение связано с тем, что вы не можете надежно обнаружить типы mime без IIS, но это должно заставить вас на вашем пути.)

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

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