2009-02-17 9 views
2

Предположим, у нас есть веб-сайт с CF-приложением, написанным внутри компании.Рекомендации по безопасности веб-файлов для ColdFusion 8 в IIS6 или IIS7

Предположим, что:

  • Server 2003 IIS6 или 2008 IIS7 будет использоваться
  • ColdFusion 8 будет использоваться
  • просмотр каталога запрещен
  • SSL требуется для подключения
  • учетная запись процесс входа в систему безопасен (да, я знаю, что это целый другой шар воск, но эта концепция обсуждается в Интернете в Интернете).

Скажем, у меня есть файл в https://domain.com/folder1/folder2/ с именем, похожим на picture92352.ext Представьте это как jpg или pdf или что-то еще. Весь путь между именем домена и файлом сильно варьируется в структуре именования, глубине и т. Д. Файлы не все объединены в одну папку.

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

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

Позвольте мне пояснить это немного. Независимо от того, как файл представлен на странице, пользователь может использовать браузер IE, Firefox и т. Д., Чтобы проверить URL-адрес, из которого поступает файл. Если изображение является ссылкой, всегда есть ярлык для копирования в меню правой кнопки мыши для IE, и те же функции в FF называются местоположением копии ссылки. Если изображение отображается в виде строки как часть страницы, пользователь IE может щелкнуть правой кнопкой мыши и выбрать свойства, чтобы увидеть URL-адрес, в FF имеется такая же функциональность, что и для просмотра свойств, но есть еще более удобная опция, помеченная как место для копирования изображения. Как только пользователь узнает URL-адрес файла, если местоположение или имя файла не изменились, он может использовать этот URL без аутентификации в приложении CF.

Если я изменяю разрешения NTFS/share, чтобы IUSR не смог увидеть контент, мое приложение CF и IIS не смогут его нажать. Какую стратегию я использую для предоставления файла в приложении CF, который не оставляет это отверстие открытым?

ответ

6

Вы можете написать страницу CFM, которая обслуживает изображения. Затем вы просто убедитесь, что они аутентифицированы внутри CFM.

<!-- something like this --> 
http://localhost/GetFile.cfm?file=foobar.jpg 

В GetFile.cfm, вы могли бы сделать что-то вроде:

<!-- the filename part is what the browser will pre-popualate the file name in the download dialog as --> 
<CFHEADER name="Content-disposition" value="attachment;filename=picture92352.ext"> 
<CFCONTENT type="text/plain" file="\\fileserver\folder1\folder2\picture92352.ext"> 

Посмотрите на различных MIME types.

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

+0

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

+0

Обратите внимание, что это отлично работает для небольших файлов, но имеет тенденцию к размалыванию на больших. Я сделал это около CF6.1, и CF пришлось загрузить весь файл в память, чтобы служить ему. –