Asp.Net L2 도메인 이름 공유 Forms 인증, 다운로드/사진 사이트에 대한 액세스 제어

5001 단어 asp.net
우리는 평소에 사진이나 파일 다운로드 권한 제어를 할 때 기본적으로 다운로드 페이지로 제어한다. 당신의 다운로드 주소가 노출되면 방문자는 직접 파일 주소를 통해 다운로드할 수 있다. 이때 우리가 흔히 말하는 도난체인도 나타난다.
일반적으로 작은 파일에 대한 해결 방법은 서버에서 직접 파일을 읽고 출력하는 것이다. 이렇게 하면 파일 주소의 노출을 피할 수 있다. 이것은 해결 방법이다.제가 지금 말씀드리고 싶은 것은TransmitFile 방법을 사용하여 파일을 직접 출력하는 것입니다. 그러나 이 방법이 큰 파일에 대한 지탱력이 얼마나 되는지, 그리고 얼마나 큰 성능 비용을 가져올지 저는 아직 테스트를 해 본 적이 없습니다. 관심 있는 분들은 테스트를 하고 평론을 발표할 수 있습니다.
자, 본론으로 들어가면 일반적으로 다운로드소에 대해 사람들이 생각하는 것이 바로 데이터 문제이기 때문에 자동으로 파일과 프로그램 코드를 분리해서 배치해야 한다고 생각한다.그래서 나는 파일에 단독으로 2급 도메인을 만들었는데, 우리는 file이라고 부른다.xxx.com이지?메인 사이트 도메인 이름은 www.xxx.com이거나 다른 2급 도메인 이름도 좋습니다.
첫 번째 단계는 이 두 사이트 간의 신분 검증 공유를 실현하는 것이다. 예를 들어 메인 사이트에 로그인한 후 자동 지점에서 로그인을 실현하는 것이다.Net의 Forms 인증은 쉽게 이 기능을 실현할 수 있는데, 밑바닥 사고방식은 사실 쿠키를 공유하는 원리이다.두 번째 부분은 파일 사이트에 권한 필터를 하는 것이다.다음은 메인 사이트와 파일 사이트에 웹을 동시에 추가합니다.config.그들에게 같은 설정을 추가해 줘, Web.config 기본 구성 코드는 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>

<configuration>

  <connectionStrings>

  </connectionStrings>

  <appSettings>    

  </appSettings>

  <system.web>   

    <authentication mode="Forms">      

      <forms loginUrl="~/Home/LogOn" defaultUrl="/" timeout="600" slidingExpiration="true" name="File" path="/" enableCrossAppRedirects="true"></forms>

    </authentication>
    <httpCookies domain=".xxx.com"/>

    <machineKey validationKey="AAA977D304FB289C182E00C710A099C9F92986DC25AD69F8" decryptionKey="AAA2B3F76A9359431E717CA8275EE72EEEDC70ED55152010" validation="SHA1"/>

  </system.web>

 <!--           --> 
 <system.webServer>

      <handlers>

          <add name="*.*" path="*.*" verb="*"  type="Web.Handler.Download"  />

      </handlers>

  </system.webServer>

</configuration>
 :authentication name   ,path="/"   cookie        ,enableCrossAppRedirects="true"                     。
 :httpCookie         。
 :     machinekey    。
 
       ,    .Net        ,   IHttpHandler  ,      。        ,    ProcessRequest      ,       :
namespace Web.Handler

{

    /// <summary>

    ///         

    /// </summary>

    public class Download : IHttpHandler

    {

        public bool IsReusable

        {

            get

            {

                return true;

            }

        }



        public void ProcessRequest(HttpContext context)

        {

            if (context.User.Identity.IsAuthenticated)

            {

                string fileName = context.Server.MapPath(context.Request.FilePath);

                context.Response.ContentType = Path.GetExtension(fileName);

                context.Response.TransmitFile(context.Request.FilePath);

            }

            else

            {

                context.Response.Write("    !");

            }

        }

    }

}
       ,          ,           ,       :
<add name="*.*" path="*.*" verb="*" type="Web.Handler.Download" /> 
name       ,   ,path           ,           ,     *.*,       jpg gif,    :*.jpg,*.gif   ,type     Dll  ,       IHttpHandler    ,ok,            。
 
  :       IIS7,     Handler    system.webSever   ,IIS6          system.web       。
http://www.cnblogs.com/hyperlinker/archive/2012/02/14/2351193.html

좋은 웹페이지 즐겨찾기