크로스에디터는 범용 위지윅 html 편집기이기 때문에 사용자가 작성하는 내용에 대하여 악의적인 내용인지 여부를 판단할 수는 없습니다.
그러나 크로스에디터에서 지원하는 API 기능을 통해 script, iframe 태그 및 onclick, onload 등의 attribute 제한을 할 수 있습니다.
[ API ] 에디터 실행 페이지에 API를 설정합니다.
AllowContentIframe : 에디터 본문 내 아이프레임 허용 여부를 설정합니다.
AllowContentScript : 본문 내 스크립트 허용 여부를 설정합니다.
AttributeBlockList : 에디터 본문 내 제한할 HTML 속성을 설정합니다.
TagBlockList : 에디터 본문 내 제한할 HTML 태그를 설정합니다.
RemoveScriptBlock : 본문 내 Script Block 삭제 여부를 설정합니다.
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>
아래 파일의 경우 detectXSSEx 함수에서 Cross-Site Scripting 방지 처리를 수행하고 있습니다.
/{에디터 설치경로}/websource/{개발언어}/ImageUpload.{개발언어}
/{에디터 설치경로}/websource/{개발언어}/FileUpload.{개발언어}
/{에디터 설치경로}/websource/{개발언어}/upload.{개발언어}
/{에디터 설치경로}/websource/{개발언어}/Util.{개발언어}
ImagePath.{개발언어} 파일에서 관리자가 직접 업로드 경로를 설정할 수 있으며, 외부 경로 값이 유입되더라도 설정 파일에 지정한 값이 우선 적용됩니다.
[ 설정 파일 경로 ]
/{에디터 설치경로}/websource/{개발언어}/ImagePath.{개발언어}
[ 주요 설정 변수 ]
imagePhysicalPath : 이미지를 실제 서버에 저장할 절대 경로
예) /home/namo/editor/images
imageUPath : 웹 브라우저에서 접근 가능한 URL 경로
예) /images, /statics/images
[ 추가 설정 필요 사항 ]
이미지 저장 경로가 웹 프로젝트 외부 영역으로 설정된 경우, WAS에서 인식할 수 있도록 context path 또는 virtual directory 설정이 필요합니다.
4.3.2.06 버전 이상에서는 서버 페이지에서 허용 확장자를 화이트리스트 방식으로 제한 가능합니다.
[ 설정 파일 경로 ]
/{에디터 설치경로}/websource/{개발언어}/UploadFileExtBlockList.{개발언어}
[ 설정 예시 ]
uploadFileExtBlockList = "doc,docx";
Config.xml 파일은 삭제 가능하나, 삭제 전 에디터가 해당 파일을 호출하지 않도록 설정이 필요합니다.
NoUseConfigXml API를 설정하여 Config.xml 파일을 호출하지 않고 에디터를 실행한 후, Config.xml 파일을 삭제하시면 됩니다.
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>
4.6.0.05 버전 이상에서는 서버 페이지에서 허용 도메인에 대한 화이트리스트를 구성하여 정의된 URL만 전달되도록 설정 가능합니다.
이를 통해 승인된 도메인으로만 링크 미리보기를 제한하여 보안성을 강화할 수 있습니다.
[ 설정 파일 경로 ]
/{에디터 설치경로}/websource/{개발언어}/PreviewUrlExtBlockList.{개발언어}
[ 설정 예시 ]
ArrayList<String> PreviewUrlExtBlockList = new ArrayList<String>();
PreviewUrlExtBlockList.add("www.허용도메인.com");
4.6.0.22 버전 이상에서는 서버 페이지에서 허용 도메인에 대한 화이트리스트를 구성하여 정의된 도메인 이미지만 출력되도록 설정 가능합니다.
이를 통해 외부 악의적인 도메인의 이미지 로드를 차단하고, 승인된 도메인의 이미지만 출력되도록 설정할 수 있습니다.
[ 설정 파일 경로 ]
/{에디터 설치경로}/websource/{개발언어}/ProxyImgUrlExtBlockList.{개발언어}
[ 설정 예시 ]
ArrayList<String> ProxyImgUrlExtBlockList = new ArrayList<String>();
ProxyImgUrlExtBlockList.add("www.허용도메인.com");