웹취약점 마무리 , 상세검색 서지정보 내보내기 title focus

This commit is contained in:
JSYOO 2021-12-03 10:57:12 +09:00
parent 038c942c15
commit 109c4204fd
6 changed files with 37 additions and 37 deletions

View File

@ -90,17 +90,35 @@ public class NlibSearchController extends NlibCommonController {
* @param req * @param req
* @return * @return
*/ */
@RequestMapping(value = "/search/searchList.do") @RequestMapping(value = {"/search/searchList.do", "/search/searchListCondition.do"} )
public String searchList( public String searchList(
HttpServletRequest req HttpServletRequest req
, Authentication authentication , Authentication authentication
, ModelMap model , ModelMap model
, @ModelAttribute("searchVO") NlibSearchVO searchVO , @ModelAttribute("searchVO") NlibSearchVO searchVO
, HttpServletRequest request , HttpServletRequest request
, HttpServletResponse res) throws Exception { , HttpServletResponse res
, String csrfToken) throws Exception {
HttpSession session = request.getSession(); HttpSession session = request.getSession();
String councilCd = (String)session.getAttribute("councilCd"); String councilCd = (String)session.getAttribute("councilCd");
boolean fromMenu = request.getServletPath().contains("/search/searchList.do");
if(fromMenu) {
String sfield = searchVO.getSfield();
String query = searchVO.getQuery();
searchVO = new NlibSearchVO();
searchVO.setSfield(sfield);
searchVO.setQuery(query);
}
if(!fromMenu && !isValidCsrfToken(request, csrfToken))
{
model.addAttribute("msg", "잘못된 접근입니다.");
model.addAttribute("url","/");
return "nlib/cmm/alert";
}
//검색엔진파라미터로 문화원코드 //검색엔진파라미터로 문화원코드
searchVO.setMngOrgCd(councilCd); searchVO.setMngOrgCd(councilCd);
@ -207,6 +225,10 @@ public class NlibSearchController extends NlibCommonController {
} }
secondClassList.get(i).put("cnt", Integer.toString(count)); secondClassList.get(i).put("cnt", Integer.toString(count));
} }
// CSRF 토큰 생성 (2021.12.02 KKN 추가)
String token = generateCsrfToken(request);
model.addAttribute("csrfToken", token);
// 반환 정보 // 반환 정보
model.addAttribute("pageSizeCodes", pageSizeCodes); model.addAttribute("pageSizeCodes", pageSizeCodes);
//주제분야 //주제분야
@ -355,8 +377,6 @@ public class NlibSearchController extends NlibCommonController {
// CSRF 토큰 생성 (2021.12.02 KKN 추가) // CSRF 토큰 생성 (2021.12.02 KKN 추가)
String token = generateCsrfToken(request); String token = generateCsrfToken(request);
model.addAttribute("csrfToken", token); model.addAttribute("csrfToken", token);
log.debug("searchItemDetail > token=" + token);
log.debug("searchItemDetail > session token=" + session.getAttribute(SESSION_CSRF_TOKEN_NAME));
model.addAttribute("imageType",imageType); model.addAttribute("imageType",imageType);
model.addAttribute("imagePath",imagePath); model.addAttribute("imagePath",imagePath);
@ -453,7 +473,9 @@ public class NlibSearchController extends NlibCommonController {
model.addAttribute("firstClassList", codeService.listCodes(Constant.CODE_ID_MASTER_TYPE_DIV_CD)); model.addAttribute("firstClassList", codeService.listCodes(Constant.CODE_ID_MASTER_TYPE_DIV_CD));
model.addAttribute("secondClassList", codeService.listCodes(Constant.CODE_ID_DTLS_TYPE_DIV_CD)); model.addAttribute("secondClassList", codeService.listCodes(Constant.CODE_ID_DTLS_TYPE_DIV_CD));
// CSRF 토큰 생성 (2021.12.02 KKN 추가)
String token = generateCsrfToken(request);
model.addAttribute("csrfToken", token);
return "nlib/search/getDetailedSearchFormPopup"; return "nlib/search/getDetailedSearchFormPopup";
} }

View File

@ -220,7 +220,7 @@ function fn_search_article(pageIndex) {
<input type="hidden" name="collection" id="collection" value="<c:out value='${searchVO.collection}'/>" /> <input type="hidden" name="collection" id="collection" value="<c:out value='${searchVO.collection}'/>" />
<input type="hidden" id="pageIndex" name="pageIndex" title="페이지번호" value="<c:out value='${searchVO.pageIndex }' />"/> <input type="hidden" id="pageIndex" name="pageIndex" title="페이지번호" value="<c:out value='${searchVO.pageIndex }' />"/>
<input type="hidden" id="masterId" name="masterId" value="" /> <input type="hidden" id="masterId" name="masterId" value="" />
<input type="hidden" id="csrfToken" name="csrfToken" value="<c:out value='${csrfToken}'/>" />
<input type="hidden" id="filter_creatYyyy" name="filter_creatYyyy" value="<c:out value='${searchVO.filter_creatYyyy}'/>" /> <input type="hidden" id="filter_creatYyyy" name="filter_creatYyyy" value="<c:out value='${searchVO.filter_creatYyyy}'/>" />
<input type="hidden" id="filter_class" name="filter_class" value="<c:out value='${searchVO.filter_class}'/>" /> <input type="hidden" id="filter_class" name="filter_class" value="<c:out value='${searchVO.filter_class}'/>" />

View File

@ -33,6 +33,7 @@
<c:set var="pageTitle">상세 검색</c:set> <c:set var="pageTitle">상세 검색</c:set>
<script> <script>
$(document).ready(function() { $(document).ready(function() {
$("#detailTitle").attr("tabindex", -1).focus();
// $('.pop-advanced-search').fadeIn(); // $('.pop-advanced-search').fadeIn();
// $('html,body').addClass('no-scroll'); // $('html,body').addClass('no-scroll');
// 상세검색 팝업 - 문화원정보 선택영역 초기작업 메서드 분리 // 상세검색 팝업 - 문화원정보 선택영역 초기작업 메서드 분리
@ -370,16 +371,17 @@ function detailSearchSetting(){
</script> </script>
<div class="pop-wrap"> <div class="pop-wrap">
<div class="Title"> <div class="Title" title="상세 검색" >
<span>상세 검색</span> <span id="detailTitle">상세 검색</span>
<span>검색어와, 검색조건들을 통해서 더 정확한 정보를 찾아보세요.</span> <span>검색어와, 검색조건들을 통해서 더 정확한 정보를 찾아보세요.</span>
<span><a href="javascript:;" class="btn-close-pop" onclick="gfn_closeLayerPopup();"><img src="/images/btn/btn-pop-close.png" alt="닫기"></a></span> <span><a href="javascript:;" class="btn-close-pop" onclick="gfn_closeLayerPopup();"><img src="/images/btn/btn-pop-close.png" alt="닫기"></a></span>
</div> </div>
<form action="/search/searchList.do" method="POST" id="d_referencelistForm" name="d_referencelistForm" class="mCustomScrollbar" data-mcs-theme="dark-2"> <form action="/search/searchListCondition.do" method="POST" id="d_referencelistForm" name="d_referencelistForm" class="mCustomScrollbar" data-mcs-theme="dark-2">
<input type="hidden" id="d_filter_class" name="filter_class"> <input type="hidden" id="d_filter_class" name="filter_class">
<input type="hidden" id="d_filter_category" name="filter_category"> <input type="hidden" id="d_filter_category" name="filter_category">
<input type="hidden" id="d_filter_mylist" name="filter_mylist"> <input type="hidden" id="d_filter_mylist" name="filter_mylist">
<input type="hidden" id="d_filter_creatYyyy" name="filter_creatYyyy" value=""> <input type="hidden" id="d_filter_creatYyyy" name="filter_creatYyyy" value="">
<input type="hidden" id="csrfToken" name="csrfToken" value="${csrfToken}">
<div class="scroll-wrap"> <div class="scroll-wrap">
<fieldset> <fieldset>
<legend>상세검색 입력폼</legend> <legend>상세검색 입력폼</legend>

View File

@ -175,7 +175,7 @@ function gfn_showRis(risId){
var html=""; var html="";
html+='<div class="pop-serge">'; html+='<div class="pop-serge">';
html+='<div class="row Title">'; html+='<div class="row Title">';
html+=' <h3>서지정보 내보내기<span>(Export)</span></h3>'; html+=' <h3 id="risTitle">서지정보 내보내기<span>(Export)</span></h3>';
html+='</div>'; html+='</div>';
html+='<div class="inner">'; html+='<div class="inner">';
html+=' <div class="row Text">'; html+=' <div class="row Text">';
@ -209,10 +209,10 @@ function gfn_showRis(risId){
html+='</div>'; html+='</div>';
$("#export-data").append(html); $("#export-data").append(html);
gfn_focus("risExport"); gfn_focus("risTitle");
} }
function gfn_focus(obj){ function gfn_focus(obj){
$("#"+obj).focus(); $("#"+obj).attr("tabindex", -1).focus();
} }
function gfn_downloadRis(risId){ function gfn_downloadRis(risId){

View File

@ -415,7 +415,7 @@ function fnLabel_reference_detail(){
} }
} }
function fnFilterSch(){ function fnFilterSch(){
document.referencelistForm.action="/search/searchList.do"; document.referencelistForm.action="/search/searchListCondition.do";
document.referencelistForm.submit(); document.referencelistForm.submit();
} }

View File

@ -44,11 +44,6 @@ util = (function( w, $ ) {
} }
return url.replace( w.location.protocol + '//' + w.location.host, '' ); return url.replace( w.location.protocol + '//' + w.location.host, '' );
} }
function downloadFile(form, atchFileId, fileSn) {
var varForm = document.forms[form];
varForm.action = '/cmm/downloadFile.do?atchFileId='+ atchFileId +'&fileSn='+ fileSn;
varForm.submit();
}
function updateFile(obj) { function updateFile(obj) {
$(obj).parent().parent().find("input").eq(0).val('U'); $(obj).parent().parent().find("input").eq(0).val('U');
} }
@ -195,25 +190,6 @@ util = (function( w, $ ) {
function isWindowSmall() { function isWindowSmall() {
return $(window).width() <= 768; return $(window).width() <= 768;
} }
function risDownloadFile(aId, mId, formName) {
if (typeof(formName) == 'undefined') formName = 'risDownloadForm' // [include_cmm_popup.jsp] 파일에 선언
var varForm = document.forms[formName];
if (typeof(varForm.aId) != 'undefined') {
varForm.action = '/cmm/risDownloadFile.do';
varForm.aId.value = aId;
varForm.mId.value = mId;
} else {
varForm.action = '/cmm/risDownloadFile.do?aId='+aId+'&mId'+mId;
}
if ( $.cookie('KCCF_E_POP') == 'Y' ){
varForm.submit();
}else{
$('#export-data').show();
}
}
function assetImgUrl(filePath, amsAssetsPath, amsThumbnailPath) { function assetImgUrl(filePath, amsAssetsPath, amsThumbnailPath) {
var linkUrl = amsAssetsPath + amsThumbnailPath; var linkUrl = amsAssetsPath + amsThumbnailPath;
var stringVal = util.isNull(filePath); var stringVal = util.isNull(filePath);