4.3으로 업그레이드 후에 게시판에 첨부한 .pdf파일을 클릭하니
열기 / 저장을 선택하는 창이 뜨지 않고 바로 웹상에서 파일이 열리더군요. (현재 창에서 바로)
그래서 원인을 찾아보니 kboard/execute/download.php 파일에
4.2의 기준으로
if(eregi("(MSIE 5.0|MSIE 5.1|MSIE 5.5|MSIE 6.0)", $_SERVER["HTTP_USER_AGENT"]) && !eregi("(Opera|Netscape)", $_SERVER["HTTP_USER_AGENT"])){
header("Content-type: application/octet-stream");
header("Content-Length: ".filesize($path));
header("Content-Disposition: attachment; filename=" . iconv('UTF-8','cp949//IGNORE',str_replace(' ','-',$name)));
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("Expires: 0");
}
else{
header("Content-type: file/unknown");
header("Content-Length: ".filesize($path));
header("Content-Disposition: attachment; filename=" . iconv('UTF-8','cp949//IGNORE',str_replace(' ','-',$name)));
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("Expires: 0");
}
상기의 부분이
header("Content-type: application/octet-stream");
header("Content-Disposition: filename=\"".iconv('utf8','cp949//IGNORE',str_replace(' ','-',$name))."\"");
header("Content-length: ".filesize($path));
header("Cache-control: private");
header('Pragma: private');
header("Expires: 0");
로 바뀌어 있길래 혹시나해서 4.2의 소스로 교체를 하고 download.php 파일을 알ftp에 업로드했더니
다시 정상적으로 작동이 됩니다.
해결은 되었으나 의문이 들어 문의드립니다.
항상 잘 쓰고 있습니다. 감사합니다.
그경우는 KBoard나 PHP 코드에서 조정하는거보다
아파치에서 Agent랑 파일테그 룰로 확장자에 대한 반응을 조정하는게 여러모로 낫고요,
보안측면에서도 php나 Kboard에서 파일의 확장자에 따른 반응을 조정해야한다는건
일단 확장자에 대한 룰이 서버단에서 정의되있지않다는걸 반증하는거기때문에
실행 코드가 업다운로드 될 수 있는 소지가 있어보입니다.
서버단(httpd/ngix)에서 모든 확장자의 업/다운로드를 금지하고
.pdf라던가 .jpg같이 전송하시는거만 올릴 수 있도록 룰을 재정의하주는게 더 좋으실것 같습니다.
좋은 의견 감사드립니다^^
다양한 분들이 사용하고 계시니 분명 불편하게 느끼시는 분들도 있겠군요.
다양한 방법으로 ux 개선하도록 하겠습니다 :)
최신 브라우저의 경우 PDF 파일을 브라우저에서 오픈하는 기능을 내장하고 있습니다.
다른이름으로 저장하기를 사용 하시면 저장이 가능 할 것 입니다.
이 부분은 좀 더 여러 의견을 들어보고 차차 개선하도록 하겠습니다.