2013-08-10 9 views
0

У меня есть приложение .NET, которое использует некоторые изображения, хранящиеся в папке на сервере. папка не принадлежит моему приложению. Изображения в этой папке используются в качестве фоновых изображений некоторого div внутри приложения. Я опубликовал папку с изображениями в Интернете вместе с моим приложением, и поэтому все работает нормально. Тем не менее, существует ли способ ограничить доступ к папке в моем .net-приложении или настройке, которая может быть установлена, чтобы содержимое папки не было доступно для просмотра или поиска? Прямо сейчас мое приложение использует URL-адрес, например www.domain.com/iisfoldername/picture.png, для установки фона div. Аналогично, если вы используете такой URL-адрес в браузере, будет показано изображение. Возможно ли предотвратить использование этого URL-адреса, если он не запрашивается в моем приложении? То есть, если кто-то входит в этот URL-адрес в браузере, изображение не отображается, но изображение отображается, когда мое приложение запрашивает его.Ограничить доступ к изображениям, делая их доступными только из .NET-приложения .NET

Я знаю об установке аутентификации для папки. Но как я могу ограничить HTTP-запрос для пользователя, а затем выдавать себя за этого пользователя (если это возможно)? ' EDIT

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
<section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
</configSections> 
<appSettings> 
    <add key="webpages:Version" value="1.0.0.0" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    <add key="ida:FederationMetadataLocation" value="https:ccc.com/Federation.xml" /> 
    <add key="ida:Issuer" value="https://ccc.com" /> 
    <add key="ida:ProviderSelection" value="productionSTS" /> 
</appSettings> 
<location path="Federation"> 
<system.web> 
    <authorization> 
    <allow users="*" /> 
    </authorization> 
</system.web> 
</location> 
    <system.web> 
    <authorization> 
    <deny users="?" /> 
    </authorization> 
<authentication mode="None" /> 
<compilation debug="true" targetFramework="4.5" /> 
<!--Commented by Identity and Access VS Package--> 
<!--<authentication mode="Forms"><forms loginUrl="~/Account/LogOn" timeout="2880" /></authentication>--> 
<pages> 
    <namespaces> 
    <add namespace="System.Web.Helpers" /> 
    <add namespace="System.Web.Mvc" /> 
    <add namespace="System.Web.Mvc.Ajax" /> 
    <add namespace="System.Web.Mvc.Html" /> 
    <add namespace="System.Web.Routing" /> 
    <add namespace="System.Web.WebPages" /> 
    </namespaces> 
</pages> 
<httpRuntime targetFramework="4.5" requestValidationMode="4.5" /> 
<profile defaultProvider="DefaultProfileProvider"> 
    <providers> 
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" /> 
    </providers> 
</profile> 
<membership defaultProvider="DefaultMembershipProvider"> 
    <providers> 
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" applicationName="/" /> 
    </providers> 
</membership> 
<roleManager defaultProvider="DefaultRoleProvider"> 
    <providers> 
    <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" /> 
    </providers> 
</roleManager> 
<sessionState mode="InProc" customProvider="DefaultSessionProvider"> 
    <providers> 
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" /> 
    </providers> 
</sessionState> 
</system.web> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="itextsharp" publicKeyToken="8354ae6d2174ddca" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-5.4.3.0" newVersion="5.4.3.0" /> 
    </dependentAssembly> 
</assemblyBinding> 
</runtime> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
</entityFramework> 
<connectionStrings> 

</connectionStrings> 
<system.webServer> 
    <modules> 
    <remove name="FormsAuthentication" /> 
    <add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 
    <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 
</modules> 
</system.webServer> 
<system.identityModel> 
    <identityConfiguration> 
    <audienceUris> 
     <add value="https://localhost/App/" /> 
    </audienceUris> 
    <!--Commented by Identity and Access VS Package--> 
    <!--<issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry"><authority name="LocalSTS"><keys><add thumbprint="9B74CB2F320F7AAFC156E1252270B1DC01EF40D0" /></keys><validIssuers><add name="LocalSTS" /></validIssuers></authority></issuerNameRegistry>--> 
    <!--certificationValidationMode set to "None" by the the Identity and Access Tool for Visual Studio. For development purposes.--> 
    <certificateValidation certificateValidationMode="None" /> 
    <issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry"> 
    <authority name="http://ccc.com"> 
     <keys> 
     <add thumbprint="BA86062DD810B95F49FBF85F448507D63D15FB92" /> 
     </keys> 
     <validIssuers> 
     <add name="http://ccc.com" /> 
     </validIssuers> 
    </authority> 
    </issuerNameRegistry> 
</identityConfiguration> 
</system.identityModel> 
    <system.identityModel.services> 
    <federationConfiguration> 
    <cookieHandler requireSsl="true" /> 
     <wsFederation passiveRedirectEnabled="true" issuer="https://ccc.com/" realm="https://localhost/App/" requireHttps="true" /> 
    </federationConfiguration> 
</system.identityModel.services> 
</configuration> 
+0

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

ответ

1

Учитывая конфигурацию, я считаю лучшим вариантом является использование URL переписывания. В этом случае перенаправляйте пользователей на «поддельный» образ, если они запрашивают изображения напрямую или как ссылаются с какого-либо другого веб-сайта (но разрешают доступ к ним, если ссылаются со страницы в вашем приложении).

Для этого используйте IIS расширение URL Rewrite Microsoft, который вы можете скачать здесь: http://www.iis.net/downloads/microsoft/url-rewrite

После установки на сервере, настроить его, добавив следующие строки в файле web.config (так как вы уже иметь раздел system.webServer в вашем web.config, просто добавить в него узел «переписать»). Обратите внимание на встроенные комментарии и замены.

<system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="Whitelist Image Access" stopProcessing="true"> 
      <!-- Evaluated for all image file requests --> 
      <match url="(?:jpg|jpeg|png|gif|bmp)$" /> 
      <conditions> 

      <!-- 
      Rule applies when user tries to access URL directly (no referrer) 
      --> 
      <add input="{HTTP_REFERER}" matchType="Pattern" pattern="^$" ignoreCase="true" /> 

      <!-- 
      Rule does NOT apply when pages on our site are the referrer 
      *** NOTE: Replace "ccc" and "com" with appropriate parts form your domain *** 
      --> 
      <add input="{HTTP_REFERER}" matchType="Pattern" pattern="^https?://(.*\.)?ccc\.com/.*$" ignoreCase="true" negate="true" /> 

      <!-- 
      Rule does NOT apply when accessing the replacement image when real ones are refused 
      *** NOTE: replace "no_access.png" with the name of the "fake" image you want to use *** 
      --> 
      <add input="{REQUEST_FILENAME}" matchType="Pattern" pattern="no_access.png" ignoreCase="true" negate="true" /> 
      </conditions> 

      <!-- 
      Temporary redirect (status code 307) to "fake" image 
      *** NOTE: Replace the URL below with the "fake" image URL *** 
      --> 
      <action type="Redirect" url="http://ccc.com/images/no_access.png" appendQueryString="false" redirectType="Temporary" /> 

     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
+0

Благодарим вас за помощь и терпение. Я попробую это ... – jpo

 Смежные вопросы

  • Нет связанных вопросов^_^