[ 보안 취약점 관련 에디터 설정 가이드 ]

Stored XSS 취약점

크로스에디터는 범용 위지윅 html 편집기이기 때문에 사용자가 작성하는 내용에 대하여 악의적인 내용인지 여부를 판단할 수는 없습니다.

그러나 크로스에디터에서 지원하는 API 기능을 통해 script, iframe 태그 및 onclick, onload 등의 attribute 제한을 할 수 있습니다.

[ XSS 취약점 대응 API ]

[ API ] 에디터 실행 페이지에 API를 설정합니다.


icon_list_03.gif AllowContentIframe : 에디터 본문 내 아이프레임 허용 여부를 설정합니다.

icon_list_03.gif AllowContentScript : 본문 내 스크립트 허용 여부를 설정합니다.

icon_list_03.gif AttributeBlockList : 에디터 본문 내 제한할 HTML 속성을 설정합니다.

icon_list_03.gif TagBlockList : 에디터 본문 내 제한할 HTML 태그를 설정합니다.

icon_list_03.gif RemoveScriptBlock : 본문 내 Script Block 삭제 여부를 설정합니다.

icon_list_03.gif RemoveScriptInAttribute : 알림 창(alert, confirm, prompt) 함수가 실행되지 않도록 설정합니다.

var CrossEditor = new NamoSE('namoeditor4');

CrossEditor.params.AllowContentIframe = false;

CrossEditor.params.AllowContentScript = false;

CrossEditor.params.TagBlockList = ["form", "option"]; // 제한을 원하는 태그 나열

CrossEditor.params.AttributeBlockList = ["onclick", "onload", "onchange", "onerror"]; // 제한을 원하는 attribute 나열

CrossEditor.params.RemoveScriptBlock = true;

CrossEditor.params.RemoveScriptInAttribute = true;

CrossEditor.EditorStart();


[ Config.xml ] 에디터 초기설정파일에서 공통설정을 합니다.

<General>

    <AttributeBlockList>1|onmouseover,ondbclick,onmouseover,onmousedown,onerror<AttributeBlockList>

    <TagBlockList>1|script</TagBlockList>

    <RemoveScriptBlock>1</RemoveScriptBlock>

</General>

<Document>

    <AllowContentScript>true</AllowContentScript>

    <AllowContentIframe>true</AllowContentIframe>

</Document>


경로 조작 및 자원 삽입 취약점

1. XSS 방지 처리

아래 파일의 경우 detectXSSEx 함수에서 Cross-Site Scripting 방지 처리를 수행하고 있습니다.

icon_list_03.gif/{에디터 설치경로}/websource/{개발언어}/ImageUpload.{개발언어}

icon_list_03.gif/{에디터 설치경로}/websource/{개발언어}/FileUpload.{개발언어}

icon_list_03.gif/{에디터 설치경로}/websource/{개발언어}/upload.{개발언어}

icon_list_03.gif/{에디터 설치경로}/websource/{개발언어}/Util.{개발언어}

2. 파일 경로 설정을 통한 취약점 회피

ImagePath.{개발언어} 파일에서 관리자가 직접 업로드 경로를 설정할 수 있으며, 외부 경로 값이 유입되더라도 설정 파일에 지정한 값이 우선 적용됩니다.


[ 설정 파일 경로 ]

icon_list_03.gif/{에디터 설치경로}/websource/{개발언어}/ImagePath.{개발언어}


[ 주요 설정 변수 ]

icon_list_03.gifimagePhysicalPath : 이미지를 실제 서버에 저장할 절대 경로

    예) /home/namo/editor/images

icon_list_03.gifimageUPath : 웹 브라우저에서 접근 가능한 URL 경로

    예) /images, /statics/images


[ 추가 설정 필요 사항 ]

이미지 저장 경로가 웹 프로젝트 외부 영역으로 설정된 경우, WAS에서 인식할 수 있도록 context path 또는 virtual directory 설정이 필요합니다.

3. 파일 확장자 제한 (화이트리스트 방식)

4.3.2.06 버전 이상에서는 서버 페이지에서 허용 확장자를 화이트리스트 방식으로 제한 가능합니다.


[ 설정 파일 경로 ]

icon_list_03.gif/{에디터 설치경로}/websource/{개발언어}/UploadFileExtBlockList.{개발언어}


[ 설정 예시 ]

uploadFileExtBlockList = "doc,docx";


Config.xml 정보 노출 취약점

Config.xml 파일은 삭제 가능하나, 삭제 전 에디터가 해당 파일을 호출하지 않도록 설정이 필요합니다.

NoUseConfigXml API를 설정하여 Config.xml 파일을 호출하지 않고 에디터를 실행한 후, Config.xml 파일을 삭제하시면 됩니다.

icon_list_03.gif NoUseConfigXml : 에디터 설정 파일(Config.xml)과 통신하지 않고 에디터가 실행될 수 있도록 설정합니다.


[ 샘플 파일 ] NoUseConfigXml 샘플 파일 다운로드


[ 설정 예시 ]

<script type="text/javascript" language="javascript">                                                    
	var paramObj = {
		"Name" : "Namo CrossEditor",
		"WebLanguage" : "JSP",
		"HTMLTabContents" : "body",
		"Skin" : "default",
		"Width" : "100%",
		"Height" : 500,
		"UserLang" : "auto",
		"NoUseConfigXml" : true                                                      
	};

	var CrossEditor = new NamoSE('pe_aet');
	CrossEditor.params.ParentEditor = document.getElementById("ce-parent-node1");
	CrossEditor.params.AllowContentIframe = false;
	CrossEditor.params.AllowContentScript = false;
	CrossEditor.params.TagBlockList = ["form", "option"];
	CrossEditor.params.AttributeBlockList = ["onclick", "onload", "onchange", "onerror"];
	CrossEditor.params.RemoveScriptBlock = true;
	CrossEditor.params.RemoveScriptInAttribute = true;
	CrossEditor.EditorStart(paramObj);
	
	function OnInitCompleted(e){
		e.editorTarget.SetBodyValue(document.getElementById("pe_aet").value);
	}
</script>	


화이트리스트 검증 설정

1. 링크 미리보기 기능

4.6.0.05 버전 이상에서는 서버 페이지에서 허용 도메인에 대한 화이트리스트를 구성하여 정의된 URL만 전달되도록 설정 가능합니다.

이를 통해 승인된 도메인으로만 링크 미리보기를 제한하여 보안성을 강화할 수 있습니다.


[ 설정 파일 경로 ]

icon_list_03.gif/{에디터 설치경로}/websource/{개발언어}/PreviewUrlExtBlockList.{개발언어}


[ 설정 예시 ]

ArrayList<String> PreviewUrlExtBlockList = new ArrayList<String>();

PreviewUrlExtBlockList.add("www.허용도메인.com");

2. PDF 저장하기 기능

4.6.0.22 버전 이상에서는 서버 페이지에서 허용 도메인에 대한 화이트리스트를 구성하여 정의된 도메인 이미지만 출력되도록 설정 가능합니다.

이를 통해 외부 악의적인 도메인의 이미지 로드를 차단하고, 승인된 도메인의 이미지만 출력되도록 설정할 수 있습니다.


[ 설정 파일 경로 ]

icon_list_03.gif/{에디터 설치경로}/websource/{개발언어}/ProxyImgUrlExtBlockList.{개발언어}


[ 설정 예시 ]

ArrayList<String> ProxyImgUrlExtBlockList = new ArrayList<String>();

ProxyImgUrlExtBlockList.add("www.허용도메인.com");