2010-03-29 5 views
3

무작위, 만료, 암호가 필요하며 IIS 7.0과 관련된 C#의 특정 파일을 가리키는 보호 된 다운로드 링크를 만드는 방법이 있습니까?보호 된 링크 만들기

여러 개의 임의 링크가 동일한 파일에 링크 될 수 있습니다.

내장 코드 또는 제 3 자 라이브러리? 예를 들어

,이 작업을 수행하는 http://www.example.com/<some random gibberish>/<md5 of file>/file.jpg

답변

2

한 가지 방법은 GUID를 사용하는 것입니다. GUID는 충돌하지 않도록 설계되었으며,이 디자인은 유효한 GUID를 추측하는 데 어려움을 낳습니다. 나는 누군가가 이것이 매우 안전하지 않다고 말할 것입니다! 음, 암호로도 보호하고 있습니다. C#에서 GUID를 생성하는 것은 꽤 쉽습니다.

내가 원하는 것은 이러한 방식으로 보호하려는 파일을 먼저 처리하는 방법이고 둘째는 주어진 경로의 요청에 응답하고 경로의 GUID를 검사하여 해당 경로가 있는지 확인하는 처리기입니다. 유효한.

URL에 해당하는 GUID 목록, 암호 (암호화 된 것이 바람직 함) 및 만료 날짜를 유지하려면 데이터베이스 백 엔드가 필요합니다. 핸들러는 요청 된 URL/GUID에 대한 항목을 검사하여 링크가 만료되었는지 확인한 다음 사용자에게 비밀번호를 쉽게 입력 할 수있는 프롬프트를 표시하고 비밀번호를 데이터베이스에 저장된 암호로 확인합니다.

이 GUID를 생성하려면, 당신이 원하는 :

<modules> 
    <add name="MyDownloadModule" type="Example.MyDownloadModule, Example"/> 
</modules> 
:

System.Guid.NewGuid().ToString() 

당신과 같이 당신의 Web.config에 항목을 추가 할 수 있습니다 (IIS7에 대한) 모든 요청하기 전에 호출되는 모듈을 만들려면

여기서 MyDownloadModule은 Example 네임 스페이스에 처리기를 포함하는 클래스입니다. 그런 다음 IHttpModule 인터페이스를 구현해야 그 클래스 내부

, 특히 오버라이드 (override) 방법 :

public string ModuleName { 
    get { return "MyDownloadModule"; } 
} 

public void Init(HttpApplication app) { 
    // Add an event handle which is called at the beginning of each request 
    app.BeginRequest += new EventHandler(this.AppBeginRequest); 
} 

// 
// Our event handler for the BeginRequest event 
// 
private void AppBeginRequest(Object source, EventArgs e) 
{ 
    HttpRequest request = app.Context.Request; 

    // 
    // Is this a file download? 
    // 
    if (request.AppRelativeCurrentExecutionFilePath == "~/downloads") // or whatever 
    { 
      // this is where you work your GUID inspecting magic 
    } 
} 

그것에 대해 이런 식으로 가서는 할 수있다,이 서버에 모든 요청에 대해 호출됩니다 의미 네가 원하는대로되지 말라.

0

사용자는 항상 고유 한 HttpHandler를 만든 다음 고유 한 만료/유효성 검사 코드를 구현할 수 있습니다. 같은

뭔가?

http://www.example.com/download?token={your_token} 

그런 다음 요청 절편 핸들러가 디스크에서 파일을 잡은 토큰 쿼리 문자열 값이 올 경우 클라이언트에 전달하기 위해 사소한 문제가 될 것입니다.

IHttpHandler 인터페이스에 대한 자세한 내용은 MSDN http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx

을 참조하십시오.