2015-01-06 5 views
1
파일을 여는 해결하기위한 포티 발견 (경로 조작)을 해결하기 위해 찾고

:열기 FILESTREAM - 강화 경로 조작

public FileStream OpenFile(string directory, string filename) 
{ 
    FileStream fs = null; 
    string pathname = string.Empty; 
    pathname = Path.Combine(directory, filename); 
    fs = new FileStream(pathname , FileMode.OpenOrCreate); 
    return (fs); 
} 
이 코드는 .NET 응용 프로그램에서 실행되지만 가상에 기록하지 않습니다

예배 규칙서.

요새화 도움말/제안은 유효한 디렉토리를 나열하는 흰색을 나타내지 만 응용 프로그램에서 디렉토리를 하드 코딩하는 것과 같습니다. 안전 할 수도 있지만 좋은 프로그래밍 습관이 아닙니다.

+2

서버의 가상 디렉토리에 쓰려고한다면'Server.MapPath'를 사용하고'/ path/path/etc '를 사용하는 방법을 찾아야합니다. 예를 들어 문서 폴더에 쓰고 싶다면'fs.Write (Server.MapPath ("~/Documents/SomeData.txt"))' – MethodMan

+0

여기에 당신의 위치를 ​​가리키는 슬래시를 사용하십시오. FileName을 반환하려는 경우에만 'pathname = Path.Combine (directory, Path.GetFileName (filename));을 수행 할 수 있습니다. – MethodMan

+1

Can (경로 이름 = Path.Combine (디렉토리, 파일 이름) 당신은 분명히 "하지만 가상 디렉터리에 쓰지 않습니다." 말? 무엇을하고 싶습니까? 디스크의 특정 위치에 쓰십시오 * 앱의 루트 * 외부 * 또는이 코드를 사용하여 앱 루트에 * 쓰기 만 할 수 있습니까? –

답변

0

@ 제임스 닉스는 코멘트에, 정답을 제공하고 사전에

감사합니다 :이 방법은 경로 및 파일 이름에 "제공되는 사용자를"허용하기 때문에

는이 연구 결과를 얻고있다. 공격자가이 방법을 매개 변수 directory=C:\Windowsfilename=notepad.exe으로 전송하면 응용 프로그램에 해당 파일에 대한 쓰기 권한이있는 경우 악의적 인 내용으로 notepad.exe을 덮어 쓸 수 있습니다. - James Nix Jan 6 at 17:17