2014-03-12 1 views
0

나는 사용자가 파일을 업로드하는 간단한 PHP 웹 응용 프로그램이 있습니다. 업로드 된 파일은 다른 사용자가 액세스 할 수 있습니다. 완벽하게 작동했습니다. 최근에 사용자가 file_name # 234324라는 이름의 파일을 업로드했습니다. 이 파일을 웹 응용 프로그램을 통해 열었을 때 파일 이름이 존재하지 않는다는 오류가 발생했습니다. 브라우저가 파일 이름을 올바르게 찾을 수 없기 때문에 파일 이름에 (#)이 있기 때문입니다. ? 난이름에 해시 (#)가있는 파일이 웹 브라우저에서 열리지 않습니다.

+0

브라우저 '서버'에'# '뒤에 아무 것도 전달하지 않습니다. 따라서 유일한 100 % 올바른 방법 - 그러한 이름을 금지합니다. (그렇지 않으면 - 직접 파일 이름을 통해서만 다운로드 할 수있는 다른 방법을 제공하십시오) –

+0

"http : //localhost/masood2/files/7255177-54540-01%20Art#5941.xlsx"그래서이 링크에서는 브라우저에서만 # 부분까지 이해하십시오. –

+0

브라우저는 나머지 부분이 의미하는 바를 이해합니다. URL에서 의미하는 바를 의미하지는 않습니다. – Quentin

답변

0

#은 URL에 특별한 의미가 있습니다. 이러한 문자는 percent-encoded에 해당하는 문자로 나타내야합니다.

URL에 URL을 추가하기 전에 파일 이름을 urlencode으로 전달하십시오.

(사용자가 "><script>etc</script>이라는 파일을 업로드 할 때 XSS로부터 보호받을 수도 있습니다.)

+0

게으른 사람들에게는 '% 23'이 될 것입니다. –

+0

사람들은 파일 이름에 다른 문자를 넣기 시작하면 XSS 공격에 취약 할 수 있습니다. * 게으른 * 게으른, 잘 테스트 된 기존 기능을 사용하십시오. – Quentin

+0

도움 주셔서 감사합니다. –

1

는 어떻게해야합니까? 난 정말 당신을 잘 파일 이름

을 변경하지 않는 파일 이름을 변경하지 않으 어떻게해야합니까 해야한다. URL의 해시 부분은 서버에 전송되지 않고 클라이언트 (브라우저)의 해석 대신 예약됩니다. 프로토콜, 서버, 경로 이름 및 쿼리 문자열 만 서버로 전송됩니다.

좋은 파일 업로드 시스템의 일부로 유효한 파일 이름을 시행하거나 필요에 따라 수정해야합니다.

+0

감사합니다. 투표 할 수는 없지만 대답은 유용했습니다. –

관련 문제