2015-10-30 3 views
0

продукта Использования: ImageResizer.dll из http://imageresizing.netНастройка ImageResizer Web.config для работы только в определенных директориях

У меня есть вебы-сайт для клиента, который я использую этот продукт, чтобы динамически изменять размерами изображений для их корзин для покупок. Продукт отлично работает! Недавно я добавил пользовательский HTTPHandler (MyCustomSecurityHandler) для управления доступом к изображениям в определенном каталоге, которые необходимо защитить. Код для MyCustomSecurityHandler отлично работает, пока я не пытаюсь получить доступ к изображению, используя параметры QueryString «width» или «height», которые распознаются ImageResizer. Если параметры QueryString не используются, ImageResizer игнорирует запрос, и мой пользовательский HTTPHandler берет запрос и отлично справляется с безопасностью.

Проблема: Если пользователь вводит прямой путь к изображению с атрибутами, которые распознает ImageResizer.dll, мой пользовательский обработчик игнорируется и изображение отображается.

Желаемые цели:

1) У моего образа клиента обработчик пожара, когда путь соответствует независимо от каких-либо параметров строки запроса услуг. (это работает, если я удаляю записи web.config для ImageResizer.dll)

2) Имейте imageresizer.dll распознавать параметры QueryString и обрабатывать их, только если изображения из следующей папки или подпапок: {SITEROOT}/images/products/

Вопрос: Есть ли у кого-нибудь опыт использования этого продукта imageresizer.dll и можете ли вы посоветовать мне, как настроить его для достижения моих желаемых целей?

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

{МОЙ БЕЗОПАСНЫЙ DIRECTORY}

Место значение держатель для фактического пути на моем сайте

WebProjectAssembly.HTTPHandlers.MyCustomSecurityHandler

Мой пользовательский HttpHandler класс

Мой Web.Config Файл:

<?xml version="1.0"?> 
 
<configuration> 
 
    <configSections> 
 
    <section name="resizer" type="ImageResizer.ResizerSection,ImageResizer" requirePermission="false" /> 
 
    </configSections> 
 

 
    <resizer> 
 
    <!-- Unless you (a) use Integrated mode, or (b) map all requests to ASP.NET, 
 
      you'll need to add .ashx to your image URLs: image.jpg.ashx?width=200&height=20 --> 
 
    <pipeline fakeExtensions=".ashx" defaultCommands="autorotate.default=true"/> 
 

 
    <plugins> 
 
     <add name="DiskCache" /> 
 
     <!-- <add name="PrettyGifs" /> --> 
 
     <!-- <add name="SimpleFilters" /> --> 
 
     <!-- <add name="S3Reader" /> --> 
 
    </plugins> 
 
    </resizer> 
 
    
 
    <system.web> 
 
    <httpModules> 
 
     <!--This is for IIS7/8 Classic Mode and Cassini--> 
 
     <add name="ImageResizingModule" type="ImageResizer.InterceptModule" /> 
 
    </httpModules> 
 
    <httpHandlers> 
 
     <add verb="*" path="/{MY SECURE DIRECTORY}/*.jpg" type="WebProjectAssembly.HTTPHandlers.MyCustomSecurityHandler" /> 
 
    </httpHandlers> 
 
    <httpRuntime targetFramework="4.5" /> 
 
    </system.web> 
 
    <system.webServer> 
 
    <validation validateIntegratedModeConfiguration="false" /> 
 
    <handlers> 
 
     <add verb="*" path="/{MY SECURE DIRECTORY}/*.jpg" name="MyCustomHandler" type="WebProjectAssembly.HTTPHandlers.MyCustomSecurityHandler" /> 
 
    </handlers> 
 
    <modules> 
 
     <!--This is for IIS7/8 Integrated mode--> 
 
     <add name="ImageResizingModule" type="ImageResizer.InterceptModule" /> 
 
    </modules> 
 
    </system.webServer> 
 
</configuration>

ответ

0

IIS/ASP.NET не позволяют включить или отключить модули на основе каталога, если они не являются отдельными приложениями.

Однако, учитывая вашу задачу (контроль доступа к изображениям), вы можете просто использовать событие ImageResizer v с authorizeAllImages="true". Это будет срабатывать по всем запросам и позволит вам выполнить свои задачи.

+0

Hey Nathanael. Единственная проблема с использованием чего-то подобного в том, что я не хочу, чтобы все прошедшие проверку подлинности пользователи имели доступ ко всем защищенным изображениям. Я хочу, чтобы пользователь A мог видеть загруженные изображения пользователя A.Пользователь B не должен видеть их только потому, что они являются аутентифицированным пользователем. HTTPHandler, который я написал, обеспечивает правильную безопасность этой системы, пока пользователь не становится нахальным и использует переменные строки запроса в URL-адресе. Я знаю, что я, вероятно, собираюсь за борт с безопасностью, но я не хочу, чтобы люди смотрели то, что им не нужно. Спасибо за предложение. – Elizabeth

+0

Вы можете реализовать точно такую ​​же защиту - независимо от того, существует ли запрос - с помощью Config.Current.Pipeline.AuthorizeImage. У вас есть доступ к идентификатору пользователя и HttpContext. Те же данные, с которыми вы имеете доступ к обработчику. –