2010-12-28 4 views
0

사용자가 브라우저의 컨트롤러에 URL을 작성하여 이미지와 미디어에 직접 액세스하는 것을 원하지 않습니다.ASP.NET MVC : 요청의 출처를 확인할 수 있습니까?

자동 로그인 필터를 사용하여 사용자가 로그인했는지 확인하고 이미지 나 미디어를 볼 수 있어야하지만 사용자가 브라우저를 통해 컨트롤러를 직접 요청하는지 확인하는 방법이 있습니다. 요청은 .cshtml 또는 js-files에 임베드됩니다.

+0

죄송하지만, 그건 의미가 없습니다. 이미지와 미디어 파일을 보호하려면 AuthorizationFilter 뒤에 숨겨야합니다. – LukLed

답변

2

안전한 보호를받을 방법이 없습니다. Referer 쉽게 HttpWebRequest 또는 이와 유사한 방법을 사용하면 가짜 일 수 있습니다. Referer는 브라우저가 아닌 다른 것을 사용하지 않는 일반 사용자로부터 이미지를 보호하기를 원하면 작동합니다.

또 다른 방법은 한 번만 사용할 수있는 이미지의 ID를 생성하는 것입니다. <img src="/path/to/image.png" />을 작성하는 대신 <img src="/controller/image/sdlkjdsjlksdlk" />을 작성하십시오. 여기서 sdlkjdsjlksdlk은 세션 변수에서 이미지에 맵핑하는 ID입니다. ImageResult을 사용하여 컨트롤러에서 이미지를 반환하고 이미지가 반환되면 ID를 삭제하십시오.

+0

이 경우 이미지 URL이 매번 바뀔 것이기 때문에 캐싱 능력이 느슨해지기를 조심해야한다. –

+0

고마워, 이걸 시험해 볼거야. – user556136

0

referrerRequest.UrlReferrer 에 확인할 수 있습니다.하지만 이는별로 신뢰할 수 없습니다.

+0

JS 파일이나 다른 링크에 링크가 포함되어있는 경우 사용자가 주소를 입력 할 때보 다 더 이상 리퍼러가 없습니다. 그래서 나는 이것이이 특별한 경우에 효과가 없을 것이라고 생각합니다. –

+0

네 말이 맞아. 나는이 이미지가 문서의 img 태그로 표시되고 클라이언트 측에서 동적으로 추가 된 경우에는 작동하지 않는 경우에만 작동한다고 생각합니다. HTTP 헤더에 리퍼러를 전달할 책임이있는 브라우저이기 때문에 다시 브라우저에 의존합니다. 나는이 문제에 대한 좋은 해결책이 없다고 생각한다. 그래서 나는 단지 몇 가지 단서를 제안 할 수있다. –

0

코드를 통해 런타임에 StackTrace를 살펴보면이 작업을 수행 할 수 있지만 비용이 많이 드는 작업이며 두 요청의 실행 경로가 결정을 내리기에 충분하다고 가정합니다.

관련 문제