продукта Использования: 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>
Hey Nathanael. Единственная проблема с использованием чего-то подобного в том, что я не хочу, чтобы все прошедшие проверку подлинности пользователи имели доступ ко всем защищенным изображениям. Я хочу, чтобы пользователь A мог видеть загруженные изображения пользователя A.Пользователь B не должен видеть их только потому, что они являются аутентифицированным пользователем. HTTPHandler, который я написал, обеспечивает правильную безопасность этой системы, пока пользователь не становится нахальным и использует переменные строки запроса в URL-адресе. Я знаю, что я, вероятно, собираюсь за борт с безопасностью, но я не хочу, чтобы люди смотрели то, что им не нужно. Спасибо за предложение. – Elizabeth
Вы можете реализовать точно такую же защиту - независимо от того, существует ли запрос - с помощью Config.Current.Pipeline.AuthorizeImage. У вас есть доступ к идентификатору пользователя и HttpContext. Те же данные, с которыми вы имеете доступ к обработчику. –