2010-01-21 4 views
0

웹 서버 외부의 공유 폴더에 있고 http 프로토콜을 통해 액세스 할 수없는 많은 .jpg 파일을 사용하는 asp.net mvc 웹 응용 프로그램을 작성하고 있습니다.
내부에 이미지 경로를 배치하려면 어떻게합니까? img 태그가 있습니까?공유 폴더의 ASP.NET MVC 및 링크 된 사진

답변

0

웹 서버가 해당 공유에 대한 일반 네트워크 액세스 권한을 갖고 이미지 파일을 읽을 수있는 경우 fn이라는 문자열 매개 변수 하나를 사용하는 기본 동작이 Index 인 새로운 MVC 컨트롤러 Image을 만들 수 있습니다. 조치로 매개 변수에서 새 FileResult을 작성합니다. 그런 다음 <img> 태그를 생성 할 때 URL을 /image/?fn=\\share\image.png과 같이 설정하십시오. (물론 적절한 경로를 추가하는 것을 잊지 마십시오.)

웹 서버가 해당 공유에 대한 액세스 권한이 없지만 페이지 사용자가 액세스 할 수있는 경우 <img> 태그를 file:// URL로 설정해보십시오. 이미지. 그러나 이것은 사용자의 OS 및 브라우저 구성에 따라 취약하거나 작동하지 않을 수도 있습니다.

업데이트 : @ blowdart가 그의 대답에서 언급 한 보안 관련 내용을 읽으십시오.

4

이미지 경로 안에 이미지 경로를 스크립트의 매개 변수로 넣지 마십시오. 이를 직접 객체 참조라고하며 나쁜 것입니다. /image/?resource=\server\path\img.jpg로 제공되는 스크립트/페이지/컨트롤러의 순진한 구현을 고려하십시오.

누군가가/image/resource /? resource = c : \ windows \ system32 \ config \ SAM을로드하면 어떻게됩니까? 암호 데이터베이스가 전송됩니다.

당신은 이상적으로

string filename = Path.GetFileName(userInputtedFilename); 
FileInfo file = new FileInfo(Server.Path.Combine("\\Server\share\", filename))); 
같은 것을 수행하여 어떠한 경로 정보를 제거, 그 디렉토리에서 모든 이미지를 제공하고 단지 파일 이름을 수락하거나 원하는 모든 정규화 된 경로를 사용하지 않으려는

적어도 안전합니다. 물론 사용자가 적절하게 이름을 지정하면 모든 이미지를 탐색 할 수 있습니다. 보다 안전하지만 간접적 인 객체 참조, 즉 실제 파일 이름에 GUID와 같은 것을 매핑하는 맵핑 테이블을 가지고 있으며이를 서빙 스크립트에 대한 매개 변수로 사용합니다.

는 보안 문제에, 컨트롤러에서

public FileContentResult GetFile(Guid indirectReference) 
{ 
    byte[] fileContents = // Resolve the file and read it from the indirect reference  
    mimeType = // Suitable MIME type 
    return File(fileContent, mimeType, fileName); 
} 
+0

좋은 노트를 FileContentResult을 돌려 파일을 제공합니다. –