- 회사에서 일하던중 기존에 개발되어있던 소스가 해당코드처럼 링크를 클릭하면 get방식으로 다운로드 하는 방식이었습니다. 그런데 이게 웹 취약성에 걸려 post로 바꿔달라는 요구 사항이 있어서 그 내용에 관한것을 정리하고자 합니다.

 

- get 방식 (이전방식)

<a href="/dashboard/fileDownload.do?type=5&sn=1" target ="_blank" class="gray_btn2_line pdfDown">PDF다운로드</a>

 

- post 방식 (변경한방식)

<a href="javascript:void(0);" onclick="fileDownload(this)" type='5' sn='1' target ="_blank" class="gray_btn2_line pdfDown">PDF다운로드</a>
- 더 나은 방식이 있을수 있겠지만, 저는 기존에 get방식에서 뒤에 붙는 파라미터를 attribute로 선언을하여서 넣어줬습니다. (수정하고자한 프로젝트에 개발되어있던 방식이 type 마다 해당 파일을 찾는식으로 개발이 되어있음)

 

common.js

//파일다운로드 post 방식
function fileDownload(target){
	const type = $(target).attr("type");
	const sn = $(target).attr("sn");
	
	const formObj = $("#downloadForm");
	formObj.find('input[name=type]').val(type);
	formObj.find('input[name=sn]').val(sn);
    
	formObj.attr("action", "/fileDownload.do");
	formObj.attr("method", "POST");
	formObj.submit();
}
- ajax로 처음에 post 방식으로 다운로드 api에 전송해봤는데 ajax로는 다운로드가 되지 않는 현상이 있어서 (구글링 해봤을때도 안된다고함) form 전송으로 처리를 하였습니다.

 

download form

<!-- download form -->
<form id="downloadForm" method="post">
    <input type="hidden" name="type">
    <input type="hidden" name="sn">
</form>
- header나 공통 페이지에 넣어서 다운로드 클릭시 해당 hidden값에 값을 setting후 post로 다운로드 api에 전송하는 방식입니다.

 

다운로드 api는 인터넷에 예제가 많기 때문에 생략하겠습니다.

 

 

 

복사했습니다!