[{"data":1,"prerenderedAt":2486},["ShallowReactive",2],{"nav-docs-ko":3,"page-/ko/docs/security-updates/review-log":1157,"surround-/ko/docs/security-updates/review-log":2480,"raw-/ko/docs/security-updates/review-log":2483},[4,67,374,775,903,1075,1085,1110],{"title":5,"tags":6,"slug":6,"path":7,"stem":8,"children":9,"page":66,"sourcePath":7},"스페이스빌더 시작하기",null,"/getting-started","00.getting-started",[10,15,20,27,34,39,45,50,55,60],{"title":11,"path":12,"stem":13,"tags":6,"slug":14,"sourcePath":12},"스페이스빌더 소개","/getting-started/overview","00.getting-started/00.overview","/getting-started/overview/",{"title":16,"path":17,"stem":18,"tags":6,"slug":19,"sourcePath":17},"SetFN 계정 생성","/getting-started/create-setfn-account","00.getting-started/05.create-setfn-account","/getting-started/create-setfn-account/",{"title":21,"path":22,"stem":23,"tags":24,"slug":26,"sourcePath":22},"Linux에 설치하기","/getting-started/install-linux","00.getting-started/10.install-linux",[25],"recommended","/getting-started/install-linux/",{"title":28,"path":29,"stem":30,"tags":31,"slug":33,"sourcePath":29},"Docker로 설치하기","/getting-started/install-docker","00.getting-started/12.install-docker",[32],"preparing","/getting-started/install-docker/",{"title":35,"path":36,"stem":37,"tags":6,"slug":38,"sourcePath":36},"Windows에 설치하기","/getting-started/install-windows","00.getting-started/14.install-windows","/getting-started/install-windows/",{"title":40,"path":41,"stem":42,"tags":43,"slug":44,"sourcePath":41},"macOS에 설치하기","/getting-started/install-macos","00.getting-started/16.install-macos",[32],"/getting-started/install-macos/",{"title":46,"path":47,"stem":48,"tags":6,"slug":49,"sourcePath":47},"초기 설정","/getting-started/initial-setup","00.getting-started/20.initial-setup","/getting-started/initial-setup/",{"title":51,"path":52,"stem":53,"tags":6,"slug":54,"sourcePath":52},"라이선스 활성화","/getting-started/license-activation","00.getting-started/30.license-activation","/getting-started/license-activation/",{"title":56,"path":57,"stem":58,"tags":6,"slug":59,"sourcePath":57},"접속 주소 확인 (로컬/내부망)","/getting-started/access-url","00.getting-started/35.access-url","/getting-started/access-url/",{"title":61,"path":62,"stem":63,"tags":64,"slug":65,"sourcePath":62},"외부 접속 방식 선택","/getting-started/access-domain","00.getting-started/40.access-domain",[25],"/getting-started/access-domain/",false,{"title":68,"tags":6,"slug":6,"path":69,"stem":70,"children":71,"page":66,"sourcePath":69},"스페이스 관리하기","/admin","10.admin",[72,92,162,197,249,274,289,299,339],{"title":73,"tags":6,"slug":6,"path":74,"stem":75,"children":76,"page":66,"sourcePath":74},"관리자 홈","/admin/home","10.admin/00.home",[77,82,87],{"title":78,"path":79,"stem":80,"tags":6,"slug":81,"sourcePath":79},"관리자 페이지 접속","/admin/home/admin-page-access","10.admin/00.home/00.admin-page-access","/admin/home/admin-page-access/",{"title":83,"path":69,"stem":84,"tags":6,"slug":85,"sourcePath":86},"관리자 메뉴 둘러보기","10.admin/00.home/00.overview","/admin/","/admin/home/overview",{"title":88,"path":89,"stem":90,"tags":6,"slug":91,"sourcePath":89},"라이선스 관리","/admin/home/license","10.admin/00.home/20.license","/admin/home/license/",{"title":93,"tags":6,"slug":6,"path":94,"stem":95,"children":96,"page":66,"sourcePath":94},"사용자 관리","/admin/user-management","10.admin/10.user-management",[97,102,107,112,117,122,127,132,137,142,147,152,157],{"title":98,"path":99,"stem":100,"tags":6,"slug":101,"sourcePath":99},"가입 정책 및 기본 권한 설정하기","/admin/user-management/signup-policy","10.admin/10.user-management/02.signup-policy","/admin/user-management/signup-policy/",{"title":103,"path":104,"stem":105,"tags":6,"slug":106,"sourcePath":104},"가입 약관 등록하기","/admin/user-management/signup-terms","10.admin/10.user-management/04.signup-terms","/admin/user-management/signup-terms/",{"title":108,"path":109,"stem":110,"tags":6,"slug":111,"sourcePath":109},"사용자 계정 만들기","/admin/user-management/invite-new-member","10.admin/10.user-management/10.invite-new-member","/admin/user-management/invite-new-member/",{"title":113,"path":114,"stem":115,"tags":6,"slug":116,"sourcePath":114},"사용자 계정 수정하기","/admin/user-management/edit-member","10.admin/10.user-management/11.edit-member","/admin/user-management/edit-member/",{"title":118,"path":119,"stem":120,"tags":6,"slug":121,"sourcePath":119},"관리자 추가하기","/admin/user-management/add-new-admin","10.admin/10.user-management/12.add-new-admin","/admin/user-management/add-new-admin/",{"title":123,"path":124,"stem":125,"tags":6,"slug":126,"sourcePath":124},"팀 관리","/admin/user-management/team","10.admin/10.user-management/22.team","/admin/user-management/team/",{"title":128,"path":129,"stem":130,"tags":6,"slug":131,"sourcePath":129},"레벨 관리","/admin/user-management/level","10.admin/10.user-management/24.level","/admin/user-management/level/",{"title":133,"path":134,"stem":135,"tags":6,"slug":136,"sourcePath":134},"접속 기록 확인하기","/admin/user-management/access-log","10.admin/10.user-management/30.access-log","/admin/user-management/access-log/",{"title":138,"path":139,"stem":140,"tags":6,"slug":141,"sourcePath":139},"활성 기기 관리하기","/admin/user-management/active-devices","10.admin/10.user-management/31.active-devices","/admin/user-management/active-devices/",{"title":143,"path":144,"stem":145,"tags":6,"slug":146,"sourcePath":144},"계정·보안 정책 설정하기","/admin/user-management/account-security","10.admin/10.user-management/32.account-security","/admin/user-management/account-security/",{"title":148,"path":149,"stem":150,"tags":6,"slug":151,"sourcePath":149},"로봇 확인(CAPTCHA) 설정하기","/admin/user-management/captcha","10.admin/10.user-management/33.captcha","/admin/user-management/captcha/",{"title":153,"path":154,"stem":155,"tags":6,"slug":156,"sourcePath":154},"안내 발송 설정하기","/admin/user-management/notice-settings","10.admin/10.user-management/34.notice-settings","/admin/user-management/notice-settings/",{"title":158,"path":159,"stem":160,"tags":6,"slug":161,"sourcePath":159},"회원에게 단체 안내 메일 보내기","/admin/user-management/bulk-mail","10.admin/10.user-management/36.bulk-mail","/admin/user-management/bulk-mail/",{"title":163,"tags":6,"slug":6,"path":164,"stem":165,"children":166,"page":66,"sourcePath":164},"서비스 구성","/admin/service-config","10.admin/20.service-config",[167,172,177,182,187,192],{"title":168,"path":169,"stem":170,"tags":6,"slug":171,"sourcePath":169},"파일 영역 설정","/admin/service-config/file-area","10.admin/20.service-config/10.file-area","/admin/service-config/file-area/",{"title":173,"path":174,"stem":175,"tags":6,"slug":176,"sourcePath":174},"웹훅 설정","/admin/service-config/webhook-settings","10.admin/20.service-config/16.webhook-settings","/admin/service-config/webhook-settings/",{"title":178,"path":179,"stem":180,"tags":6,"slug":181,"sourcePath":179},"커뮤니티 설정","/admin/service-config/community-space","10.admin/20.service-config/22.community-space","/admin/service-config/community-space/",{"title":183,"path":184,"stem":185,"tags":6,"slug":186,"sourcePath":184},"AI 챗봇 정책 설정","/admin/service-config/community-ai-chatbot","10.admin/20.service-config/24.community-ai-chatbot","/admin/service-config/community-ai-chatbot/",{"title":188,"path":189,"stem":190,"tags":6,"slug":191,"sourcePath":189},"메일 설정","/admin/service-config/email-settings","10.admin/20.service-config/30.email-settings","/admin/service-config/email-settings/",{"title":193,"path":194,"stem":195,"tags":6,"slug":196,"sourcePath":194},"브랜딩 설정","/admin/service-config/brand","10.admin/20.service-config/40.brand","/admin/service-config/brand/",{"title":198,"tags":6,"slug":6,"path":199,"stem":200,"children":201,"page":66,"sourcePath":199},"지식 서비스","/admin/knowledge","10.admin/30.knowledge",[202,207,214,219,224,229,234,239,244],{"title":203,"path":199,"stem":204,"tags":6,"slug":205,"sourcePath":206},"지식 서비스 살펴보기","10.admin/30.knowledge/00.overview","/admin/knowledge/","/admin/knowledge/overview",{"title":208,"path":209,"stem":210,"children":211,"tags":6,"slug":213,"sourcePath":209},"수집·인덱싱","/admin/knowledge/indexing","10.admin/30.knowledge/10.indexing",[212],{"title":208,"path":209,"stem":210,"tags":6,"slug":213,"sourcePath":209},"/admin/knowledge/indexing/",{"title":215,"path":216,"stem":217,"tags":6,"slug":218,"sourcePath":216},"검색 품질·언어","/admin/knowledge/search","10.admin/30.knowledge/20.search","/admin/knowledge/search/",{"title":220,"path":221,"stem":222,"tags":6,"slug":223,"sourcePath":221},"지식 저장소","/admin/knowledge/storage","10.admin/30.knowledge/30.storage","/admin/knowledge/storage/",{"title":225,"path":226,"stem":227,"tags":6,"slug":228,"sourcePath":226},"지식 저장소 운영하기","/admin/knowledge/storage-operations","10.admin/30.knowledge/32.storage-operations","/admin/knowledge/storage-operations/",{"title":230,"path":231,"stem":232,"tags":6,"slug":233,"sourcePath":231},"Qdrant 연결","/admin/knowledge/qdrant","10.admin/30.knowledge/34.qdrant","/admin/knowledge/qdrant/",{"title":235,"path":236,"stem":237,"tags":6,"slug":238,"sourcePath":236},"Qdrant 서버 준비하기","/admin/knowledge/qdrant-server-setup","10.admin/30.knowledge/35.qdrant-server-setup","/admin/knowledge/qdrant-server-setup/",{"title":240,"path":241,"stem":242,"tags":6,"slug":243,"sourcePath":241},"Milvus 연결","/admin/knowledge/milvus","10.admin/30.knowledge/36.milvus","/admin/knowledge/milvus/",{"title":245,"path":246,"stem":247,"tags":6,"slug":248,"sourcePath":246},"외부 검색·근거","/admin/knowledge/web-search","10.admin/30.knowledge/40.web-search","/admin/knowledge/web-search/",{"title":250,"tags":6,"slug":6,"path":251,"stem":252,"children":253,"page":66,"sourcePath":251},"AI 서비스","/admin/ai","10.admin/35.ai",[254,259,264,269],{"title":255,"path":251,"stem":256,"tags":6,"slug":257,"sourcePath":258},"AI 서비스 관리하기","10.admin/35.ai/00.overview","/admin/ai/","/admin/ai/overview",{"title":260,"path":261,"stem":262,"tags":6,"slug":263,"sourcePath":261},"모델·런타임 설정하기","/admin/ai/models","10.admin/35.ai/10.models","/admin/ai/models/",{"title":265,"path":266,"stem":267,"tags":6,"slug":268,"sourcePath":266},"도구·연동 설정하기","/admin/ai/integrations","10.admin/35.ai/20.integrations","/admin/ai/integrations/",{"title":270,"path":271,"stem":272,"tags":6,"slug":273,"sourcePath":271},"MCP 서버 관리하기","/admin/ai/mcp","10.admin/35.ai/30.mcp","/admin/ai/mcp/",{"title":275,"tags":6,"slug":6,"path":276,"stem":277,"children":278,"page":66,"sourcePath":276},"플러그인","/admin/plugin","10.admin/40.plugin",[279,284],{"title":280,"path":281,"stem":282,"tags":6,"slug":283,"sourcePath":281},"플러그인 관리하기","/admin/plugin/overview","10.admin/40.plugin/00.overview","/admin/plugin/overview/",{"title":285,"path":286,"stem":287,"tags":6,"slug":288,"sourcePath":286},"확장 플러그인 설정","/admin/plugin/settings","10.admin/40.plugin/10.settings","/admin/plugin/settings/",{"title":290,"path":291,"stem":292,"children":293,"page":66,"sourcePath":291},"Operations","/admin/operations","10.admin/45.operations",[294],{"title":295,"path":291,"stem":296,"tags":6,"slug":297,"sourcePath":298},"운영·감사 기록 확인하기","10.admin/45.operations/00.overview","/admin/operations/","/admin/operations/overview",{"title":300,"tags":6,"slug":6,"path":301,"stem":302,"children":303,"page":66,"sourcePath":301},"보안 관리","/admin/security","10.admin/50.security",[304,309,314,319,324,329,334],{"title":305,"path":306,"stem":307,"tags":6,"slug":308,"sourcePath":306},"보안 개요","/admin/security/overview","10.admin/50.security/00.overview","/admin/security/overview/",{"title":310,"path":311,"stem":312,"tags":6,"slug":313,"sourcePath":311},"감사 로그 확인하기","/admin/security/audit-log","10.admin/50.security/05.audit-log","/admin/security/audit-log/",{"title":315,"path":316,"stem":317,"tags":6,"slug":318,"sourcePath":316},"차단 관리","/admin/security/block-management","10.admin/50.security/10.block-management","/admin/security/block-management/",{"title":320,"path":321,"stem":322,"tags":6,"slug":323,"sourcePath":321},"보안 설정","/admin/security/security-setting","10.admin/50.security/12.security-setting","/admin/security/security-setting/",{"title":325,"path":326,"stem":327,"tags":6,"slug":328,"sourcePath":326},"승인 대기 기기 처리하기","/admin/security/device-approvals","10.admin/50.security/14.device-approvals","/admin/security/device-approvals/",{"title":330,"path":331,"stem":332,"tags":6,"slug":333,"sourcePath":331},"IP 접근 제한","/admin/security/ip-restriction","10.admin/50.security/16.ip-restriction","/admin/security/ip-restriction/",{"title":335,"path":336,"stem":337,"tags":6,"slug":338,"sourcePath":336},"관리자 2단계 인증 설정하기","/admin/security/two-factor-auth","10.admin/50.security/18.two-factor-auth","/admin/security/two-factor-auth/",{"title":340,"tags":6,"slug":6,"path":341,"stem":342,"children":343,"page":66,"sourcePath":341},"시스템 관리","/admin/system-admin","10.admin/60.system-admin",[344,349,354,359,364,369],{"title":345,"path":346,"stem":347,"tags":6,"slug":348,"sourcePath":346},"디바이스 정보","/admin/system-admin/device-info","10.admin/60.system-admin/10.device-info","/admin/system-admin/device-info/",{"title":350,"path":351,"stem":352,"tags":6,"slug":353,"sourcePath":351},"서버 재시작 및 시스템 유지보수","/admin/system-admin/server-restart","10.admin/60.system-admin/12.server-restart","/admin/system-admin/server-restart/",{"title":355,"path":356,"stem":357,"tags":6,"slug":358,"sourcePath":356},"백그라운드 서비스","/admin/system-admin/background-service","10.admin/60.system-admin/14.background-service","/admin/system-admin/background-service/",{"title":360,"path":361,"stem":362,"tags":6,"slug":363,"sourcePath":361},"스페이스빌더 업데이트하기","/admin/system-admin/update","10.admin/60.system-admin/16.update","/admin/system-admin/update/",{"title":365,"path":366,"stem":367,"tags":6,"slug":368,"sourcePath":366},"스페이스빌더 제거하기","/admin/system-admin/uninstall","10.admin/60.system-admin/18.uninstall","/admin/system-admin/uninstall/",{"title":370,"path":371,"stem":372,"tags":6,"slug":373,"sourcePath":371},"서버 이전하기","/admin/system-admin/server-migration","10.admin/60.system-admin/20.server-migration","/admin/system-admin/server-migration/",{"title":375,"tags":6,"slug":6,"path":376,"stem":377,"children":378,"page":66,"sourcePath":376},"워크스페이스 사용하기","/workspace","20.workspace",[379,419,439,523,662,718,754],{"title":380,"tags":6,"slug":6,"path":381,"stem":382,"children":383,"page":66,"sourcePath":381},"메뉴","/workspace/menu","20.workspace/05.menu",[384,389,394,399,404,409,414],{"title":385,"path":386,"stem":387,"tags":6,"slug":388,"sourcePath":386},"워크스페이스 소개","/workspace/menu/overview","20.workspace/05.menu/00.overview","/workspace/menu/overview/",{"title":390,"path":391,"stem":392,"tags":6,"slug":393,"sourcePath":391},"팀 스페이스","/workspace/menu/team-space","20.workspace/05.menu/05.team-space","/workspace/menu/team-space/",{"title":395,"path":396,"stem":397,"tags":6,"slug":398,"sourcePath":396},"클라이언트 스페이스","/workspace/menu/client-space","20.workspace/05.menu/06.client-space","/workspace/menu/client-space/",{"title":400,"path":401,"stem":402,"tags":6,"slug":403,"sourcePath":401},"즐겨찾기","/workspace/menu/favorites","20.workspace/05.menu/10.favorites","/workspace/menu/favorites/",{"title":405,"path":406,"stem":407,"tags":6,"slug":408,"sourcePath":406},"최근 문서","/workspace/menu/recent","20.workspace/05.menu/20.recent","/workspace/menu/recent/",{"title":410,"path":411,"stem":412,"tags":6,"slug":413,"sourcePath":411},"외부 공유","/workspace/menu/external-share","20.workspace/05.menu/30.external-share","/workspace/menu/external-share/",{"title":415,"path":416,"stem":417,"tags":6,"slug":418,"sourcePath":416},"휴지통","/workspace/menu/trash","20.workspace/05.menu/40.trash","/workspace/menu/trash/",{"title":420,"tags":6,"slug":6,"path":421,"stem":422,"children":423,"page":66,"sourcePath":421},"계정","/workspace/account","20.workspace/10.account",[424,429,434],{"title":425,"path":426,"stem":427,"tags":6,"slug":428,"sourcePath":426},"회원가입 및 로그인","/workspace/account/signup","20.workspace/10.account/10.signup","/workspace/account/signup/",{"title":430,"path":431,"stem":432,"tags":6,"slug":433,"sourcePath":431},"비밀번호 재설정","/workspace/account/reset-password","20.workspace/10.account/20.reset-password","/workspace/account/reset-password/",{"title":435,"path":436,"stem":437,"tags":6,"slug":438,"sourcePath":436},"계정 설정","/workspace/account/account-settings","20.workspace/10.account/30.account-settings","/workspace/account/account-settings/",{"title":440,"tags":6,"slug":6,"path":441,"stem":442,"children":443,"page":66,"sourcePath":441},"폴더","/workspace/folder","20.workspace/20.folder",[444,449,454,459,464,471,476,481,486,491,496,501,506,511,518],{"title":445,"path":446,"stem":447,"tags":6,"slug":448,"sourcePath":446},"폴더 기본 기능","/workspace/folder/basic","20.workspace/20.folder/10.basic","/workspace/folder/basic/",{"title":450,"path":451,"stem":452,"tags":6,"slug":453,"sourcePath":451},"여러 폴더 한꺼번에 만들기","/workspace/folder/bulk-folder-creation","20.workspace/20.folder/12.bulk-folder-creation","/workspace/folder/bulk-folder-creation/",{"title":455,"path":456,"stem":457,"tags":6,"slug":458,"sourcePath":456},"필터","/workspace/folder/filter","20.workspace/20.folder/13.filter","/workspace/folder/filter/",{"title":460,"path":461,"stem":462,"tags":6,"slug":463,"sourcePath":461},"폴더 보기 옵션 설정","/workspace/folder/folder-view-options","20.workspace/20.folder/14.folder-view-options","/workspace/folder/folder-view-options/",{"title":465,"path":466,"stem":467,"tags":468,"slug":470,"sourcePath":466},"폴더를 게시판으로 사용하기","/workspace/folder/board-view","20.workspace/20.folder/15.board-view",[469],"hot","/workspace/folder/board-view/",{"title":472,"path":473,"stem":474,"tags":6,"slug":475,"sourcePath":473},"폴더 웹 보기","/workspace/folder/folder-web-view","20.workspace/20.folder/16.folder-web-view","/workspace/folder/folder-web-view/",{"title":477,"path":478,"stem":479,"tags":6,"slug":480,"sourcePath":478},"폴더 정리","/workspace/folder/folder-organize","20.workspace/20.folder/17.folder-organize","/workspace/folder/folder-organize/",{"title":482,"path":483,"stem":484,"tags":6,"slug":485,"sourcePath":483},"폴더 공지 (README)","/workspace/folder/folder-readme","20.workspace/20.folder/18.folder-readme","/workspace/folder/folder-readme/",{"title":487,"path":488,"stem":489,"tags":6,"slug":490,"sourcePath":488},"폴더/파일 목록 내보내기","/workspace/folder/folder-export","20.workspace/20.folder/20.folder-export","/workspace/folder/folder-export/",{"title":492,"path":493,"stem":494,"tags":6,"slug":495,"sourcePath":493},"레벨별 접근 권한 설정","/workspace/folder/level-access-permissions","20.workspace/20.folder/24.level-access-permissions","/workspace/folder/level-access-permissions/",{"title":497,"path":498,"stem":499,"tags":6,"slug":500,"sourcePath":498},"팀별 접근 권한 설정","/workspace/folder/team-access-permissions","20.workspace/20.folder/26.team-access-permissions","/workspace/folder/team-access-permissions/",{"title":502,"path":503,"stem":504,"tags":6,"slug":505,"sourcePath":503},"파일 규칙 설정하기","/workspace/folder/file-rules","20.workspace/20.folder/28.file-rules","/workspace/folder/file-rules/",{"title":507,"path":508,"stem":509,"tags":6,"slug":510,"sourcePath":508},"폴더 웹훅","/workspace/folder/webhook","20.workspace/20.folder/30.webhook","/workspace/folder/webhook/",{"title":512,"path":513,"stem":514,"children":515,"tags":6,"slug":517,"sourcePath":513},"폴더 지식인덱스 설정하기","/workspace/folder/knowledge-index","20.workspace/20.folder/32.knowledge-index",[516],{"title":512,"path":513,"stem":514,"tags":6,"slug":517,"sourcePath":513},"/workspace/folder/knowledge-index/",{"title":519,"path":520,"stem":521,"tags":6,"slug":522,"sourcePath":520},"업무 자동화 폴더","/workspace/folder/automation","20.workspace/20.folder/40.automation","/workspace/folder/automation/",{"title":524,"tags":6,"slug":6,"path":525,"stem":526,"children":527,"page":66,"sourcePath":525},"파일","/workspace/file","20.workspace/30.file",[528,533,538,543,548,553,558,563,568,573,578,583,588,593,598,603,608,613,618,623,628,633,637,642,647,652,657],{"title":529,"path":530,"stem":531,"tags":6,"slug":532,"sourcePath":530},"파일 관리 기본 기능","/workspace/file/overview","20.workspace/30.file/00.overview","/workspace/file/overview/",{"title":534,"path":535,"stem":536,"tags":6,"slug":537,"sourcePath":535},"파일 보면서 목록 확인하기","/workspace/file/list-in-file","20.workspace/30.file/05.list-in-file","/workspace/file/list-in-file/",{"title":539,"path":540,"stem":541,"tags":6,"slug":542,"sourcePath":540},"마크다운, 텍스트 파일 보기 및 편집","/workspace/file/text-file-viewer","20.workspace/30.file/10.text-file-viewer","/workspace/file/text-file-viewer/",{"title":544,"path":545,"stem":546,"tags":6,"slug":547,"sourcePath":545},"HTML 파일 보기","/workspace/file/html-viewer","20.workspace/30.file/11.html-viewer","/workspace/file/html-viewer/",{"title":549,"path":550,"stem":551,"tags":6,"slug":552,"sourcePath":550},"CSV 파일 보기 및 편집","/workspace/file/csv-viewer","20.workspace/30.file/12.csv-viewer","/workspace/file/csv-viewer/",{"title":554,"path":555,"stem":556,"tags":6,"slug":557,"sourcePath":555},"이미지/동영상 파일 보기","/workspace/file/image-file-viewer","20.workspace/30.file/13.image-file-viewer","/workspace/file/image-file-viewer/",{"title":559,"path":560,"stem":561,"tags":6,"slug":562,"sourcePath":560},"오피스/PDF 파일 보기","/workspace/file/office-viewer","20.workspace/30.file/14.office-viewer","/workspace/file/office-viewer/",{"title":564,"path":565,"stem":566,"tags":6,"slug":567,"sourcePath":565},"웹페이지 붙여넣기 (HTML)","/workspace/file/paste-html","20.workspace/30.file/20.paste-html","/workspace/file/paste-html/",{"title":569,"path":570,"stem":571,"tags":6,"slug":572,"sourcePath":570},"스크린샷 붙여넣기","/workspace/file/paste-screenshot","20.workspace/30.file/21.paste-screenshot","/workspace/file/paste-screenshot/",{"title":574,"path":575,"stem":576,"tags":6,"slug":577,"sourcePath":575},"마크다운 붙여넣기 (MD)","/workspace/file/paste-md","20.workspace/30.file/22.paste-md","/workspace/file/paste-md/",{"title":579,"path":580,"stem":581,"tags":6,"slug":582,"sourcePath":580},"스크린 녹화하기","/workspace/file/screen-recording","20.workspace/30.file/23.screen-recording","/workspace/file/screen-recording/",{"title":584,"path":585,"stem":586,"tags":6,"slug":587,"sourcePath":585},"빠른노트","/workspace/file/quick-note","20.workspace/30.file/24.quick-note","/workspace/file/quick-note/",{"title":589,"path":590,"stem":591,"tags":6,"slug":592,"sourcePath":590},"파일 태그","/workspace/file/file-tag","20.workspace/30.file/33.file-tag","/workspace/file/file-tag/",{"title":594,"path":595,"stem":596,"tags":6,"slug":597,"sourcePath":595},"파일 이름 일괄 변경","/workspace/file/bulk-name-revise","20.workspace/30.file/34.bulk-name-revise","/workspace/file/bulk-name-revise/",{"title":599,"path":600,"stem":601,"tags":6,"slug":602,"sourcePath":600},"파일 변환","/workspace/file/file-convert-overview","20.workspace/30.file/40.file-convert-overview","/workspace/file/file-convert-overview/",{"title":604,"path":605,"stem":606,"tags":6,"slug":607,"sourcePath":605},"템플릿 파일","/workspace/file/templates","20.workspace/30.file/41.templates","/workspace/file/templates/",{"title":609,"path":610,"stem":611,"tags":6,"slug":612,"sourcePath":610},"할 일 목록 (Todo)","/workspace/file/template-todo","20.workspace/30.file/42.template-todo","/workspace/file/template-todo/",{"title":614,"path":615,"stem":616,"tags":6,"slug":617,"sourcePath":615},"결재 서식","/workspace/file/template-approval","20.workspace/30.file/43.template-approval","/workspace/file/template-approval/",{"title":619,"path":620,"stem":621,"tags":6,"slug":622,"sourcePath":620},"칸반 보드","/workspace/file/template-kanban","20.workspace/30.file/44.template-kanban","/workspace/file/template-kanban/",{"title":624,"path":625,"stem":626,"tags":6,"slug":627,"sourcePath":625},"타임라인","/workspace/file/template-timeline","20.workspace/30.file/45.template-timeline","/workspace/file/template-timeline/",{"title":629,"path":630,"stem":631,"tags":6,"slug":632,"sourcePath":630},"메모장","/workspace/file/template-memo","20.workspace/30.file/46.template-memo","/workspace/file/template-memo/",{"title":634,"path":635,"stem":636,"tags":6,"slug":635,"sourcePath":635},"AI 채팅 파일","/workspace/file/ai-chat-file","20.workspace/30.file/47.ai-chat-file",{"title":638,"path":639,"stem":640,"tags":6,"slug":641,"sourcePath":639},"파일 변경 기록 확인","/workspace/file/audit-trail","20.workspace/30.file/50.audit-trail","/workspace/file/audit-trail/",{"title":643,"path":644,"stem":645,"tags":6,"slug":646,"sourcePath":644},"파일 버전 관리","/workspace/file/version-trail","20.workspace/30.file/51.version-trail","/workspace/file/version-trail/",{"title":648,"path":649,"stem":650,"tags":6,"slug":651,"sourcePath":649},"편집 잠금","/workspace/file/file-lock","20.workspace/30.file/52.file-lock","/workspace/file/file-lock/",{"title":653,"path":654,"stem":655,"tags":6,"slug":656,"sourcePath":654},"파일 암호화","/workspace/file/file-encrypt","20.workspace/30.file/53.file-encrypt","/workspace/file/file-encrypt/",{"title":658,"path":659,"stem":660,"tags":6,"slug":661,"sourcePath":659},"디스크 파일 등록","/workspace/file/disk-file-registration","20.workspace/30.file/60.disk-file-registration","/workspace/file/disk-file-registration/",{"title":663,"tags":6,"slug":6,"path":664,"stem":665,"children":666,"page":66,"sourcePath":664},"협업","/workspace/cooperation","20.workspace/35.cooperation",[667,672,677,682,687,692,697,702,707,713],{"title":668,"path":669,"stem":670,"tags":6,"slug":671,"sourcePath":669},"파일·폴더 댓글","/workspace/cooperation/file-comments","20.workspace/35.cooperation/00.file-comments","/workspace/cooperation/file-comments/",{"title":673,"path":674,"stem":675,"tags":6,"slug":676,"sourcePath":674},"채팅","/workspace/cooperation/chat","20.workspace/35.cooperation/10.chat","/workspace/cooperation/chat/",{"title":678,"path":679,"stem":680,"tags":6,"slug":681,"sourcePath":679},"협업 채팅 및 편집 잠금","/workspace/cooperation/collaboration-chat","20.workspace/35.cooperation/11.collaboration-chat","/workspace/cooperation/collaboration-chat/",{"title":683,"path":684,"stem":685,"tags":6,"slug":686,"sourcePath":684},"팀원 작업 위치 따라가기","/workspace/cooperation/follow-team-location","20.workspace/35.cooperation/12.follow-team-location","/workspace/cooperation/follow-team-location/",{"title":688,"path":689,"stem":690,"tags":6,"slug":691,"sourcePath":689},"멘션","/workspace/cooperation/mention","20.workspace/35.cooperation/14.mention","/workspace/cooperation/mention/",{"title":693,"path":694,"stem":695,"tags":6,"slug":696,"sourcePath":694},"쪽지","/workspace/cooperation/dm","20.workspace/35.cooperation/16.dm","/workspace/cooperation/dm/",{"title":698,"path":699,"stem":700,"tags":6,"slug":701,"sourcePath":699},"알림 보관함","/workspace/cooperation/notification-inbox","20.workspace/35.cooperation/18.notification-inbox","/workspace/cooperation/notification-inbox/",{"title":703,"path":704,"stem":705,"tags":6,"slug":706,"sourcePath":704},"팀 활동 확인하기","/workspace/cooperation/file-activity","20.workspace/35.cooperation/30.file-activity","/workspace/cooperation/file-activity/",{"title":708,"path":709,"stem":710,"tags":711,"slug":712,"sourcePath":709},"외부 공유 링크 만들기","/workspace/cooperation/share-link-creation","20.workspace/35.cooperation/40.share-link-creation",[469],"/workspace/cooperation/share-link-creation/",{"title":714,"path":715,"stem":716,"tags":6,"slug":717,"sourcePath":715},"외부 공유 이메일 전송","/workspace/cooperation/share-link-email","20.workspace/35.cooperation/42.share-link-email","/workspace/cooperation/share-link-email/",{"title":719,"tags":6,"slug":6,"path":720,"stem":721,"children":722,"page":66,"sourcePath":720},"검색","/workspace/search","20.workspace/40.search",[723,728,734,739,744,749],{"title":724,"path":725,"stem":726,"tags":6,"slug":727,"sourcePath":725},"파일 검색","/workspace/search/search","20.workspace/40.search/00.search","/workspace/search/search/",{"title":729,"path":730,"stem":731,"tags":732,"slug":733,"sourcePath":730},"문맥 검색 (AI 검색)","/workspace/search/context-search","20.workspace/40.search/10.context-search",[469],"/workspace/search/context-search/",{"title":735,"path":736,"stem":737,"tags":6,"slug":738,"sourcePath":736},"이미지 검색","/workspace/search/image-search","20.workspace/40.search/20.image-search","/workspace/search/image-search/",{"title":740,"path":741,"stem":742,"tags":6,"slug":743,"sourcePath":741},"채팅 검색","/workspace/search/chat-search","20.workspace/40.search/30.chat-search","/workspace/search/chat-search/",{"title":745,"path":746,"stem":747,"tags":6,"slug":748,"sourcePath":746},"댓글 검색","/workspace/search/comment-search","20.workspace/40.search/40.comment-search","/workspace/search/comment-search/",{"title":750,"path":751,"stem":752,"tags":6,"slug":753,"sourcePath":751},"유의어 검색","/workspace/search/synonym-search","20.workspace/40.search/50.synonym-search","/workspace/search/synonym-search/",{"title":755,"tags":6,"slug":6,"path":756,"stem":757,"children":758,"page":66,"sourcePath":756},"AI","/workspace/ai","20.workspace/50.ai",[759,764,770],{"title":760,"path":761,"stem":762,"tags":6,"slug":763,"sourcePath":761},"AI 기능 요약","/workspace/ai/overview","20.workspace/50.ai/00.overview","/workspace/ai/overview/",{"title":765,"path":766,"stem":767,"tags":768,"slug":769,"sourcePath":766},"로컬 AI에게 업무 요청하기","/workspace/ai/ai-work","20.workspace/50.ai/10.ai-work",[469],"/workspace/ai/ai-work/",{"title":771,"path":772,"stem":773,"tags":6,"slug":774,"sourcePath":772},"외부 AI 활용하기","/workspace/ai/external-ai","20.workspace/50.ai/20.external-ai","/workspace/ai/external-ai/",{"title":776,"tags":6,"slug":6,"path":777,"stem":778,"children":779,"page":66,"sourcePath":777},"웹스페이스","/webspace","40.webspace",[780,785,790,795,800,805,811,816,821,826,831,866],{"title":781,"path":782,"stem":783,"tags":6,"slug":784,"sourcePath":782},"웹스페이스(Webspace)란?","/webspace/overview","40.webspace/00.overview","/webspace/overview/",{"title":786,"path":787,"stem":788,"tags":6,"slug":789,"sourcePath":787},"웹사이트 배포하기","/webspace/website-release","40.webspace/10.website-release","/webspace/website-release/",{"title":791,"path":792,"stem":793,"tags":6,"slug":794,"sourcePath":792},"스키마 파일(.sfn) 만들기","/webspace/create-database","40.webspace/20.create-database","/webspace/create-database/",{"title":796,"path":797,"stem":798,"tags":6,"slug":799,"sourcePath":797},"API 빌드 및 데이터베이스 배포하기","/webspace/api-overview","40.webspace/24.api-overview","/webspace/api-overview/",{"title":801,"path":802,"stem":803,"tags":6,"slug":804,"sourcePath":802},"프론트엔드 샘플 확인하기","/webspace/frontend-example","40.webspace/26.frontend-example","/webspace/frontend-example/",{"title":806,"path":807,"stem":808,"tags":809,"slug":810,"sourcePath":807},"팀 내부용 웹서비스 만들기","/webspace/internal-webservice","40.webspace/32.internal-webservice",[469],"/webspace/internal-webservice/",{"title":812,"path":813,"stem":814,"tags":6,"slug":815,"sourcePath":813},"외부 공개용 웹서비스 만들기","/webspace/external-webservice","40.webspace/34.external-webservice","/webspace/external-webservice/",{"title":817,"path":818,"stem":819,"tags":6,"slug":820,"sourcePath":818},"SQL 가져오기와 내보내기","/webspace/sql-converter","40.webspace/42.sql-converter","/webspace/sql-converter/",{"title":822,"path":823,"stem":824,"tags":6,"slug":825,"sourcePath":823},"스키마를 코드로 변환하기","/webspace/code-converter","40.webspace/44.code-converter","/webspace/code-converter/",{"title":827,"path":828,"stem":829,"tags":6,"slug":830,"sourcePath":828},"성능과 확장","/webspace/performance","40.webspace/48.performance","/webspace/performance/",{"title":832,"tags":6,"slug":6,"path":833,"stem":834,"children":835,"page":66,"sourcePath":833},"웹스페이스 관리","/webspace/admin","40.webspace/50.admin",[836,841,846,851,856,861],{"title":837,"path":838,"stem":839,"tags":6,"slug":840,"sourcePath":838},"웹스페이스 관리 시작하기","/webspace/admin/overview","40.webspace/50.admin/00.overview","/webspace/admin/overview/",{"title":842,"path":843,"stem":844,"tags":6,"slug":845,"sourcePath":843},"운영 현황","/webspace/admin/operations","40.webspace/50.admin/10.operations","/webspace/admin/operations/",{"title":847,"path":848,"stem":849,"tags":6,"slug":850,"sourcePath":848},"워크스페이스 접근","/webspace/admin/workspace-access","40.webspace/50.admin/20.workspace-access","/webspace/admin/workspace-access/",{"title":852,"path":853,"stem":854,"tags":6,"slug":855,"sourcePath":853},"API · 사이트 보안","/webspace/admin/api-site-security","40.webspace/50.admin/30.api-site-security","/webspace/admin/api-site-security/",{"title":857,"path":858,"stem":859,"tags":6,"slug":860,"sourcePath":858},"서비스 및 용량","/webspace/admin/service-capacity","40.webspace/50.admin/40.service-capacity","/webspace/admin/service-capacity/",{"title":862,"path":863,"stem":864,"tags":6,"slug":865,"sourcePath":863},"배포 관리와 프론트엔드 릴리스","/webspace/admin/deployments","40.webspace/50.admin/50.deployments","/webspace/admin/deployments/",{"title":867,"tags":868,"slug":6,"path":869,"stem":870,"children":871,"page":66,"sourcePath":869},"웹스페이스 따라해보기",[469],"/webspace/examples","40.webspace/60.examples",[872,877,882,888,893,898],{"title":873,"path":869,"stem":874,"tags":6,"slug":875,"sourcePath":876},"웹스페이스 응용편","40.webspace/60.examples/00.overview","/webspace/examples/","/webspace/examples/overview",{"title":878,"path":879,"stem":880,"tags":6,"slug":881,"sourcePath":879},"나만의 업무 시스템 만들기","/webspace/examples/my-own-system","40.webspace/60.examples/10.my-own-system","/webspace/examples/my-own-system/",{"title":883,"path":884,"stem":885,"tags":886,"slug":887,"sourcePath":884},"실시간 오목 게임 만들기","/webspace/examples/realtime-gomoku","40.webspace/60.examples/20.realtime-gomoku",[469],"/webspace/examples/realtime-gomoku/",{"title":889,"path":890,"stem":891,"tags":6,"slug":892,"sourcePath":890},"폴더 파일로 자료 게시판 만들기","/webspace/examples/folder-board","40.webspace/60.examples/30.folder-board","/webspace/examples/folder-board/",{"title":894,"path":895,"stem":896,"tags":6,"slug":897,"sourcePath":895},"공동 몬스터 레이드 만들기","/webspace/examples/monster-raid","40.webspace/60.examples/40.monster-raid","/webspace/examples/monster-raid/",{"title":899,"path":900,"stem":901,"tags":6,"slug":902,"sourcePath":900},"AI 상담 채팅 샘플 배포하기","/webspace/examples/ai-support-chat","40.webspace/60.examples/50.ai-support-chat","/webspace/examples/ai-support-chat/",{"title":904,"tags":6,"slug":6,"path":905,"stem":906,"children":907,"page":66,"sourcePath":905},"플러그인 사용하기","/plugin","50.plugin",[908,913,933,994,1015,1050],{"title":909,"path":910,"stem":911,"tags":6,"slug":912,"sourcePath":910},"플러그인 개요","/plugin/overview","50.plugin/00.overview","/plugin/overview/",{"title":914,"tags":6,"slug":6,"path":915,"stem":916,"children":917,"page":66,"sourcePath":915},"캘린더","/plugin/calendar","50.plugin/10.calendar",[918,923,928],{"title":919,"path":920,"stem":921,"tags":6,"slug":922,"sourcePath":920},"캘린더 소개","/plugin/calendar/overview","50.plugin/10.calendar/00.overview","/plugin/calendar/overview/",{"title":924,"path":925,"stem":926,"tags":6,"slug":927,"sourcePath":925},"일정 생성, 수정 및 삭제하기","/plugin/calendar/create-event","50.plugin/10.calendar/10.create-event","/plugin/calendar/create-event/",{"title":929,"path":930,"stem":931,"tags":6,"slug":932,"sourcePath":930},"활동 기록 확인하기","/plugin/calendar/file-activity","50.plugin/10.calendar/40.file-activity","/plugin/calendar/file-activity/",{"title":934,"tags":6,"slug":6,"path":935,"stem":936,"children":937,"page":66,"sourcePath":935},"이메일","/plugin/email","50.plugin/20.email",[938,943,948,953,958,964,969,974,979,984,989],{"title":939,"path":940,"stem":941,"tags":6,"slug":942,"sourcePath":940},"이메일 소개","/plugin/email/overview","50.plugin/20.email/00.overview","/plugin/email/overview/",{"title":944,"path":945,"stem":946,"tags":6,"slug":947,"sourcePath":945},"이메일 설정","/plugin/email/setfn-email-setting","50.plugin/20.email/05.setfn-email-setting","/plugin/email/setfn-email-setting/",{"title":949,"path":950,"stem":951,"tags":6,"slug":952,"sourcePath":950},"외부 이메일 연결","/plugin/email/external-email","50.plugin/20.email/07.external-email","/plugin/email/external-email/",{"title":954,"path":955,"stem":956,"tags":6,"slug":957,"sourcePath":955},"이메일 기본 기능","/plugin/email/email-basic","50.plugin/20.email/10.email-basic","/plugin/email/email-basic/",{"title":959,"path":960,"stem":961,"tags":6,"slug":962,"sourcePath":963},"메일 AI 어시스턴트 사용하기","/plugin/email/ai-assistant","50.plugin/20.email/15.email-ai-assistant","/plugin/email/ai-assistant/","/plugin/email/email-ai-assistant",{"title":965,"path":966,"stem":967,"tags":6,"slug":968,"sourcePath":966},"이메일 작성 및 전송","/plugin/email/email-compose","50.plugin/20.email/20.email-compose","/plugin/email/email-compose/",{"title":970,"path":971,"stem":972,"tags":6,"slug":973,"sourcePath":971},"파일 첨부하기","/plugin/email/email-attachment","50.plugin/20.email/30.email-attachment","/plugin/email/email-attachment/",{"title":975,"path":976,"stem":977,"tags":6,"slug":978,"sourcePath":976},"이메일 폴더 관리","/plugin/email/email-folders","50.plugin/20.email/40.email-folders","/plugin/email/email-folders/",{"title":980,"path":981,"stem":982,"tags":6,"slug":983,"sourcePath":981},"이메일 자동 분류하기","/plugin/email/email-auto-classify","50.plugin/20.email/50.email-auto-classify","/plugin/email/email-auto-classify/",{"title":985,"path":986,"stem":987,"tags":6,"slug":988,"sourcePath":986},"이메일 파일 보관 및 공유","/plugin/email/email-open-in-space","50.plugin/20.email/60.email-open-in-space","/plugin/email/email-open-in-space/",{"title":990,"path":991,"stem":992,"tags":6,"slug":993,"sourcePath":991},"이메일 보안","/plugin/email/email-security","50.plugin/20.email/70.email-security","/plugin/email/email-security/",{"title":995,"tags":6,"slug":6,"path":996,"stem":997,"children":998,"page":66,"sourcePath":996},"워크플로우 (업무자동화)","/plugin/workflow","50.plugin/30.workflow",[999,1004,1010],{"title":1000,"path":1001,"stem":1002,"tags":6,"slug":1003,"sourcePath":1001},"워크플로우 소개","/plugin/workflow/overview","50.plugin/30.workflow/00.overview","/plugin/workflow/overview/",{"title":1005,"path":1006,"stem":1007,"tags":1008,"slug":1009,"sourcePath":1006},"새 워크플로우 만들기","/plugin/workflow/new-workflow","50.plugin/30.workflow/10.new-workflow",[469],"/plugin/workflow/new-workflow/",{"title":1011,"path":1012,"stem":1013,"tags":6,"slug":1014,"sourcePath":1012},"실행 기록 확인하기","/plugin/workflow/execution-history","50.plugin/30.workflow/20.execution-history","/plugin/workflow/execution-history/",{"title":1016,"tags":6,"slug":6,"path":1017,"stem":1018,"children":1019,"page":66,"sourcePath":1017},"파인튜닝 (AI 학습)","/plugin/fine-tuning","50.plugin/40.fine-tuning",[1020,1025,1030,1035,1040,1045],{"title":1021,"path":1022,"stem":1023,"tags":6,"slug":1024,"sourcePath":1022},"파인튜닝 소개","/plugin/fine-tuning/overview","50.plugin/40.fine-tuning/00.overview","/plugin/fine-tuning/overview/",{"title":1026,"path":1027,"stem":1028,"tags":6,"slug":1029,"sourcePath":1027},"학습 데이터 전처리","/plugin/fine-tuning/pre-processing","50.plugin/40.fine-tuning/10.pre-processing","/plugin/fine-tuning/pre-processing/",{"title":1031,"path":1032,"stem":1033,"tags":6,"slug":1034,"sourcePath":1032},"학습","/plugin/fine-tuning/training","50.plugin/40.fine-tuning/20.training","/plugin/fine-tuning/training/",{"title":1036,"path":1037,"stem":1038,"tags":6,"slug":1039,"sourcePath":1037},"평가","/plugin/fine-tuning/evaluation","50.plugin/40.fine-tuning/30.evaluation","/plugin/fine-tuning/evaluation/",{"title":1041,"path":1042,"stem":1043,"tags":6,"slug":1044,"sourcePath":1042},"채팅 테스트","/plugin/fine-tuning/chat-test","50.plugin/40.fine-tuning/40.chat-test","/plugin/fine-tuning/chat-test/",{"title":1046,"path":1047,"stem":1048,"tags":6,"slug":1049,"sourcePath":1047},"내보내기","/plugin/fine-tuning/export","50.plugin/40.fine-tuning/50.export","/plugin/fine-tuning/export/",{"title":1051,"tags":6,"slug":6,"path":1052,"stem":1053,"children":1054,"page":66,"sourcePath":1052},"EDC (데이터 수집)","/plugin/edc","50.plugin/50.edc",[1055,1060,1065,1070],{"title":1056,"path":1057,"stem":1058,"tags":6,"slug":1059,"sourcePath":1057},"EDC 소개","/plugin/edc/overview","50.plugin/50.edc/00.overview","/plugin/edc/overview/",{"title":1061,"path":1062,"stem":1063,"tags":6,"slug":1064,"sourcePath":1062},"데이터 입력, Audit Trail","/plugin/edc/data-entry","50.plugin/50.edc/10.data-entry","/plugin/edc/data-entry/",{"title":1066,"path":1067,"stem":1068,"tags":6,"slug":1069,"sourcePath":1067},"빌더","/plugin/edc/builder","50.plugin/50.edc/20.builder","/plugin/edc/builder/",{"title":1071,"path":1072,"stem":1073,"tags":6,"slug":1074,"sourcePath":1072},"사용자/기관 설정","/plugin/edc/account","50.plugin/50.edc/30.account","/plugin/edc/account/",{"title":1076,"tags":6,"slug":6,"path":1077,"stem":1078,"children":1079,"page":66,"sourcePath":1077},"명령줄 도구","/cli","90.cli",[1080],{"title":1081,"path":1082,"stem":1083,"tags":6,"slug":1084,"sourcePath":1082},"명령어로 서버 관리하기","/cli/commands","90.cli/10.commands","/cli/commands/",{"title":1086,"tags":6,"slug":6,"path":1087,"stem":1088,"children":1089,"page":66,"sourcePath":1087},"보안 업데이트","/security-updates","95.security-updates",[1090,1095,1100,1105],{"title":1091,"path":1092,"stem":1093,"tags":6,"slug":1094,"sourcePath":1092},"보안 점검과 업데이트 방식 알아보기","/security-updates/overview","95.security-updates/00.overview","/security-updates/overview/",{"title":1096,"path":1097,"stem":1098,"tags":6,"slug":1099,"sourcePath":1097},"보안 점검 기록","/security-updates/review-log","95.security-updates/10.review-log","/security-updates/review-log/",{"title":1101,"path":1102,"stem":1103,"tags":6,"slug":1104,"sourcePath":1102},"주요 취약점 점검 현황","/security-updates/vulnerability-status","95.security-updates/20.vulnerability-status","/security-updates/vulnerability-status/",{"title":1106,"path":1107,"stem":1108,"tags":6,"slug":1109,"sourcePath":1107},"서버 보안 업데이트 점검하기","/security-updates/server-checklist","95.security-updates/30.server-checklist","/security-updates/server-checklist/",{"title":1111,"tags":6,"slug":6,"path":1112,"stem":1113,"children":1114,"page":66,"sourcePath":1112},"FAQ","/faq","99.FAQ",[1115,1121,1127,1133,1139,1145,1151],{"title":1116,"path":1117,"stem":1118,"tags":6,"slug":1119,"sourcePath":1120},"SetFN vs 클라우드 서비스 비교","/FAQ/comparison-cloud","99.FAQ/10.comparison-cloud","/FAQ/comparison-cloud/","/faq/comparison-cloud",{"title":1122,"path":1123,"stem":1124,"tags":6,"slug":1125,"sourcePath":1126},"SetFN vs NAS 비교","/FAQ/comparison-nas","99.FAQ/20.comparison-nas","/FAQ/comparison-nas/","/faq/comparison-nas",{"title":1128,"path":1129,"stem":1130,"tags":6,"slug":1131,"sourcePath":1132},"보안 정책","/FAQ/security-policy","99.FAQ/30.security-policy","/FAQ/security-policy/","/faq/security-policy",{"title":1134,"path":1135,"stem":1136,"tags":6,"slug":1137,"sourcePath":1138},"SetFN은 왜 빠른가요","/FAQ/why-fast","99.FAQ/40.why-fast","/FAQ/why-fast/","/faq/why-fast",{"title":1140,"path":1141,"stem":1142,"tags":6,"slug":1143,"sourcePath":1144},"라이선스 FAQ","/FAQ/license-faq","99.FAQ/50.license-faq","/FAQ/license-faq/","/faq/license-faq",{"title":1146,"path":1147,"stem":1148,"tags":6,"slug":1149,"sourcePath":1150},"AI 기능 FAQ","/FAQ/ai-faq","99.FAQ/60.ai-faq","/FAQ/ai-faq/","/faq/ai-faq",{"title":1152,"path":1153,"stem":1154,"tags":6,"slug":1155,"sourcePath":1156},"문제 해결 가이드","/FAQ/troubleshooting","99.FAQ/70.troubleshooting","/FAQ/troubleshooting/","/faq/troubleshooting",{"id":1158,"title":1096,"body":1159,"cover":6,"description":2464,"extension":2465,"image":6,"meta":2466,"navigation":2467,"path":1097,"reviewSummary":2468,"reviewedAt":2469,"seo":2470,"slug":1099,"stem":1098,"tags":6,"thumbnail":6,"thumbnailPosition":6,"thumbnailScale":6,"__hash__":2479},"docs_ko/95.security-updates/10.review-log.md",{"type":1160,"value":1161,"toc":2450},"minimal",[1162,1166,1175,1178,1181,1186,1189,1195,1378,1383,1393,1397,1400,1404,1585,1590,1600,1604,1607,1611,1877,1882,1895,1899,1902,1907,1930,1934,2165,2170,2173,2190,2194,2213,2217,2220,2278,2282,2287,2291,2330,2334,2337,2430,2434],[1163,1164,1096],"h1",{"id":1165},"보안-점검-기록",[1167,1168,1169,1170,1174],"p",{},"SetFN이 진행한 보안 점검을 최신순으로 기록합니다. 각 기록에는 점검 범위, 찾은 문제, 조치 상태가 들어 있습니다. 상태 표기는 ",[1171,1172,1101],"a",{"href":1173},"/ko/docs/security-updates/vulnerability-status/#%EC%83%81%ED%83%9C-%ED%91%9C%EA%B8%B0","과 같습니다.",[1167,1176,1177],{},"문제를 악용하는 방법이 알려지지 않도록, 기록에는 재현 절차 대신 영향과 조치 내용만 적습니다.",[1179,1180],"hr",{},[1182,1183,1185],"h2",{"id":1184},"_2026-10-24-ai-교차-검토와-후속-조치","2026-10-24 AI 교차 검토와 후속 조치",[1167,1187,1188],{},"1~3차 점검에서 Claude가 고친 내용을 OpenAI Codex가 읽기 전용으로 다시 검토했습니다. 코드가 의도대로 고쳐졌는지와 화면 사용성(UI/UX)을 함께 보았고, 지적마다 코드로 확인해 실제 결함만 고친 뒤 Codex가 막는 문제가 남지 않을 때까지 수정본을 다섯 차례 되풀이해 검토했습니다. 3차 점검에서 남겨 둔 과제(관리자 2단계 인증, 길이 중심 비밀번호 규칙, TinyMCE)도 이날 함께 처리했습니다.",[1167,1190,1191],{},[1192,1193,1194],"strong",{},"찾은 문제와 조치",[1196,1197,1198,1214],"table",{},[1199,1200,1201],"thead",{},[1202,1203,1204,1208,1211],"tr",{},[1205,1206,1207],"th",{},"영역",[1205,1209,1210],{},"내용",[1205,1212,1213],{},"상태",[1215,1216,1217,1240,1251,1262,1274,1286,1298,1310,1322,1334,1345,1356,1367],"tbody",{},[1202,1218,1219,1223,1235],{},[1220,1221,1222],"td",{},"인증",[1220,1224,1225,1226,1230,1231,1234],{},"관리자 계정에 인증 앱 2단계 인증(복구 코드 포함)을 추가하고, 모든 관리자가 등록해야 하는 ",[1227,1228,1229],"code",{},"관리자 2단계 인증 필수"," 정책을 보안 설정에 넣었습니다. ",[1171,1232,335],{"href":1233},"/ko/docs/admin/security/two-factor-auth/","를 참고하세요.",[1220,1236,1237],{},[1227,1238,1239],{},"수정 완료(배포 예정)",[1202,1241,1242,1244,1247],{},[1220,1243,1222],{},[1220,1245,1246],{},"2단계 인증을 등록하거나 해제하면 그 계정의 다른 세션을 정리합니다. 필수 정책은 이미 열린 실시간 연결과 진행 중인 MCP 작업에도 적용되고, 비밀번호를 바꾸면 대기 중인 로그인 단계를 무효로 합니다.",[1220,1248,1249],{},[1227,1250,1239],{},[1202,1252,1253,1255,1258],{},[1220,1254,1222],{},[1220,1256,1257],{},"새로 설치한 서버의 기본 비밀번호 규칙을 12자 이상, 문자 종류 조합 요구 없음으로 바꿨습니다(NIST SP 800-63B-4). 설치 마법사와 명령줄 도구도 같은 규칙을 따르며, 기존 서버의 규칙은 바뀌지 않습니다.",[1220,1259,1260],{},[1227,1261,1239],{},[1202,1263,1264,1267,1270],{},[1220,1265,1266],{},"편집기",[1220,1268,1269],{},"단체 안내 메일 편집기를 Tiptap으로 교체하고 HTML 파일의 시각 편집기(TinyMCE)를 제거했습니다. TinyMCE 6에 남아 있던 미수정 취약점의 영향이 없어졌습니다. HTML 파일은 원본 코드로만 편집합니다.",[1220,1271,1272],{},[1227,1273,1239],{},[1202,1275,1276,1279,1282],{},[1220,1277,1278],{},"권한",[1220,1280,1281],{},"프레젠테이션·시트·자동 변환이 넣는 이미지, 유사 이미지 검색과 AI 답변 근거의 본문에 요청한 사람의 권한을 확인합니다. 오피스 미리보기 결과는 만든 사람만 받을 수 있습니다.",[1220,1283,1284],{},[1227,1285,1239],{},[1202,1287,1288,1291,1294],{},[1220,1289,1290],{},"문서 변환",[1220,1292,1293],{},"문서 안의 TeX 수식을 통해 작업 폴더 밖의 파일을 읽을 수 있었습니다. 작업 폴더 밖 파일은 읽지 못하게 막았습니다.",[1220,1295,1296],{},[1227,1297,1239],{},[1202,1299,1300,1303,1306],{},[1220,1301,1302],{},"서버 안정성",[1220,1304,1305],{},"변환할 때 문서 구조를 나누어 읽고, 암호가 걸린 문서의 읽기 크기를 제한합니다. 외부 변환 도구는 실행 전에 메모리가 부족할 때 먼저 종료될 대상으로 표시합니다.",[1220,1307,1308],{},[1227,1309,1239],{},[1202,1311,1312,1315,1318],{},[1220,1313,1314],{},"기록",[1220,1316,1317],{},"차단 해제가 일부만 성공했을 때의 처리와 설정 변경 감사 기록에서 빠진 항목을 보완했습니다.",[1220,1319,1320],{},[1227,1321,1239],{},[1202,1323,1324,1327,1330],{},[1220,1325,1326],{},"화면",[1220,1328,1329],{},"단체 메일 초안을 보내지 않고 나갈 때와 복구 코드를 저장하지 않고 나갈 때 확인 창을 표시하고, 키보드·스크린 리더 접근성을 보완했습니다.",[1220,1331,1332],{},[1227,1333,1239],{},[1202,1335,1336,1338,1341],{},[1220,1337,1222],{},[1220,1339,1340],{},"계정마다 인증 세대를 두어, 모든 세션 끊기·비밀번호 변경·2단계 인증 변경 뒤에는 이전 세션과 그 세션에서 파생된 토큰 갱신·앱 로그인을 쓸 수 없게 했습니다. 세션 삭제가 실패해도 적용됩니다.",[1220,1342,1343],{},[1227,1344,1239],{},[1202,1346,1347,1349,1352],{},[1220,1348,1222],{},[1220,1350,1351],{},"모든 세션을 끊을 때 로그인과 동의 화면을 거쳐 연결한 MCP OAuth 연결도 함께 끊습니다. 사용자가 직접 만든 API 키는 유지됩니다.",[1220,1353,1354],{},[1227,1355,1239],{},[1202,1357,1358,1360,1363],{},[1220,1359,1302],{},[1220,1361,1362],{},"실시간 연결 차단이 느린 연결 때문에 늦어지지 않게 하고, 암호 문서 처리에 동시 실행과 대기 수 제한을 두었습니다.",[1220,1364,1365],{},[1227,1366,1239],{},[1202,1368,1369,1371,1374],{},[1220,1370,1222],{},[1220,1372,1373],{},"서버가 로그인 상태를 잠시 확인하지 못하면 로그아웃시키지 않고 잠시 뒤 다시 시도하게 했습니다.",[1220,1375,1376],{},[1227,1377,1239],{},[1167,1379,1380],{},[1192,1381,1382],{},"남은 한계",[1384,1385,1386,1390],"ul",{},[1387,1388,1389],"li",{},"브라우저가 비밀번호를 해시로 바꿔 보내므로 서버가 비밀번호 길이 규칙을 직접 강제하지 못합니다. 길이와 조합 규칙은 화면에서 검사하고, 흔한 비밀번호 차단은 서버에서 합니다.",[1387,1391,1392],{},"정책 적용 상태와 2단계 인증 대기 상태는 서버 메모리에 있습니다. 서버를 다시 시작하면 진행 중이던 로그인을 처음부터 다시 해야 합니다.",[1182,1394,1396],{"id":1395},"_2026-10-23-3차-후속-점검","2026-10-23 3차 후속 점검",[1167,1398,1399],{},"2차 재점검에서 남겨 둔 후속 항목과 국제 표준 문서의 권고(NIST SP 800-63B-4 비밀번호 기준, OWASP Top 10:2025 A09 보안 로깅)를 반영했습니다. 권한 문제는 수정 전 코드에서 실패하는 테스트로 먼저 확인한 뒤 고쳤고, 수정본은 새로 받은 소스에서 다시 빌드·시험했습니다.",[1167,1401,1402],{},[1192,1403,1194],{},[1196,1405,1406,1416],{},[1199,1407,1408],{},[1202,1409,1410,1412,1414],{},[1205,1411,1207],{},[1205,1413,1210],{},[1205,1415,1213],{},[1215,1417,1418,1429,1440,1451,1462,1473,1485,1497,1508,1519,1530,1541,1552,1563,1574],{},[1202,1419,1420,1422,1425],{},[1220,1421,1278],{},[1220,1423,1424],{},"문서 변환(AI 변환 도구, 문서 변환, 오피스 미리보기)이 원본 폴더 전체에서 이미지를 가져와, 변환을 요청한 사람이 읽을 수 없는 하위 폴더의 이미지가 결과 파일에 들어갈 수 있었습니다. 요청한 사람이 읽을 수 있는 이미지만 넣도록 바꿨습니다.",[1220,1426,1427],{},[1227,1428,1239],{},[1202,1430,1431,1433,1436],{},[1220,1432,1278],{},[1220,1434,1435],{},"문서 변환에서 문서에 적은 스타일시트·표지 경로를 통해 서버의 다른 파일 내용이 결과 파일에 들어갈 수 있었습니다. 변환 전에 스타일시트 지정과 안전하지 않은 경로를 지웁니다. 이 때문에 문서에 지정한 CSS 스타일은 변환 결과에 적용되지 않습니다.",[1220,1437,1438],{},[1227,1439,1239],{},[1202,1441,1442,1444,1447],{},[1220,1443,1278],{},[1220,1445,1446],{},"지식 검색 결과와 AI 답변 근거가 보기 권한만으로 문서 본문 일부를 보여 주었습니다. 본문은 보기와 내려받기 권한이 모두 있을 때만 보여 주고, 보기 권한만 있으면 제목과 위치만 보여 줍니다.",[1220,1448,1449],{},[1227,1450,1239],{},[1202,1452,1453,1455,1458],{},[1220,1454,1278],{},[1220,1456,1457],{},"즐겨찾기, 오피스 미리보기와 온라인 편집, 편집 이력이 팀 공간 시스템 폴더의 접근 경계와 현재 권한을 다시 확인하지 않았습니다. 요청할 때마다 다시 확인하고, 편집 이력의 이전 내용은 내려받기 권한이 있어야 볼 수 있습니다.",[1220,1459,1460],{},[1227,1461,1239],{},[1202,1463,1464,1466,1469],{},[1220,1465,1278],{},[1220,1467,1468],{},"웹사이트(웹스페이스) 표의 합계·평균 같은 집계가 읽기가 제한된 컬럼 값을 반영했고, 행 삭제 권한만으로 영구 삭제할 수 있었습니다. 읽을 수 없는 컬럼은 집계에서 빼고, 영구 삭제는 관리자와 배포 담당자만 할 수 있습니다.",[1220,1470,1471],{},[1227,1472,1239],{},[1202,1474,1475,1478,1481],{},[1220,1476,1477],{},"자동화",[1220,1479,1480],{},"문서 잠금 같은 동작이 거부된 경우에도 자동화와 웹훅이 실행될 수 있었습니다. 동작이 성공했을 때만 실행합니다.",[1220,1482,1483],{},[1227,1484,1239],{},[1202,1486,1487,1490,1493],{},[1220,1488,1489],{},"설정",[1220,1491,1492],{},"폴더 설정 묶음을 적용하면 폴더의 지식 활용 설정이 지워질 수 있었습니다. 기존 설정을 유지합니다.",[1220,1494,1495],{},[1227,1496,1239],{},[1202,1498,1499,1501,1504],{},[1220,1500,1222],{},[1220,1502,1503],{},"새 비밀번호를 정할 때 흔히 쓰이거나 유출된 비밀번호 약 2만 개를 막습니다(NIST SP 800-63B-4). 가입, 비밀번호 변경·재설정, 관리자의 계정 만들기·비밀번호 재설정, 명령줄 도구, 설치 마법사에 적용되며, 지금 쓰는 비밀번호로 로그인하는 것은 그대로입니다.",[1220,1505,1506],{},[1227,1507,1239],{},[1202,1509,1510,1512,1515],{},[1220,1511,1314],{},[1220,1513,1514],{},"관리자의 보안·정책 설정 변경, 차단과 차단 해제, 사용자 권한 변경, 계정 만들기·삭제, 비밀번호 재설정, 기기 승인·거부, 세션·로봇 확인(CAPTCHA) 정책 변경을 감사 로그에 남깁니다. 바꾼 관리자, 시각, 접속 IP, 바뀐 항목이 기록되고 비밀번호·키 같은 비밀값은 기록하지 않습니다.",[1220,1516,1517],{},[1227,1518,1239],{},[1202,1520,1521,1523,1526],{},[1220,1522,410],{},[1220,1524,1525],{},"관리자가 외부 공유를 꺼도 링크를 만든 사람이 기존 링크를 확인하고 삭제할 수 있도록 화면을 고쳤습니다. 새 링크는 만들 수 없습니다.",[1220,1527,1528],{},[1227,1529,1239],{},[1202,1531,1532,1534,1537],{},[1220,1533,1326],{},[1220,1535,1536],{},"AI 요청 한도, 압축 다운로드 대기 같은 새 서버 거절 사유를 사용자 언어의 안내 문구로 보여 줍니다.",[1220,1538,1539],{},[1227,1540,1239],{},[1202,1542,1543,1545,1548],{},[1220,1544,1302],{},[1220,1546,1547],{},"큰 텍스트 파일(대용량 CSV 등)을 열 때 파일 전체를 메모리에 올려, 여러 사람이 동시에 열면 서버 메모리가 바닥날 수 있었습니다. 16MB가 넘는 파일은 나누어 보내도록 바꿨습니다.",[1220,1549,1550],{},[1227,1551,1239],{},[1202,1553,1554,1556,1559],{},[1220,1555,1302],{},[1220,1557,1558],{},"브랜딩 로고와 AI 이미지 요약이 이미지의 가로·세로 크기를 확인하지 않고 풀었습니다. 크기를 먼저 확인하고 지나치게 큰 이미지는 풀지 않습니다.",[1220,1560,1561],{},[1227,1562,1239],{},[1202,1564,1565,1567,1570],{},[1220,1566,1302],{},[1220,1568,1569],{},"경계가 깨지거나 아주 깊게 중첩된 메일을 처리하는 일부 코드(현재 쓰이지 않음)에 깊이 제한이 없고 끝나지 않을 수 있었습니다. 중첩 깊이를 제한하고 오류가 나면 멈추도록 고쳤습니다.",[1220,1571,1572],{},[1227,1573,1239],{},[1202,1575,1576,1578,1581],{},[1220,1577,1302],{},[1220,1579,1580],{},"문서 변환·이미지·동영상 처리 프로그램이 메모리를 크게 쓰면 SetFN 서버가 대신 종료될 수 있었습니다. 메모리가 부족할 때 이 프로그램들이 먼저 종료되도록 표시합니다.",[1220,1582,1583],{},[1227,1584,1239],{},[1167,1586,1587],{},[1192,1588,1589],{},"남은 과제",[1384,1591,1592],{},[1387,1593,1594,1595,1599],{},"이 점검에서 남겨 둔 관리자 2단계 인증, 길이 중심 비밀번호 규칙(새 설치 기본값), TinyMCE 대체는 ",[1171,1596,1598],{"href":1597},"#_2026-10-24-ai-%EA%B5%90%EC%B0%A8-%EA%B2%80%ED%86%A0%EC%99%80-%ED%9B%84%EC%86%8D-%EC%A1%B0%EC%B9%98","2026-10-24 AI 교차 검토","에서 처리했습니다.",[1182,1601,1603],{"id":1602},"_2026-10-23-2차-재점검","2026-10-23 2차 재점검",[1167,1605,1606],{},"1차 수정 뒤 같은 날 전체를 다시 점검했습니다. 1차 수정에 빈틈이 없는지 다시 검토하고, 1차에서 다루지 않은 영역(기능별 권한 확인 범위, 입력 처리, 메일·웹훅·AI 도구의 권한 경계, 웹 화면, 비밀 정보와 설정)을 AI(Claude)로 나누어 검토했습니다. 찾은 문제는 수정 전 코드에서 실패하는 테스트로 확인한 뒤 고쳤습니다.",[1167,1608,1609],{},[1192,1610,1194],{},[1196,1612,1613,1623],{},[1199,1614,1615],{},[1202,1616,1617,1619,1621],{},[1205,1618,1207],{},[1205,1620,1210],{},[1205,1622,1213],{},[1215,1624,1625,1636,1647,1658,1669,1680,1691,1702,1714,1725,1737,1749,1761,1773,1785,1797,1809,1821,1832,1843,1854,1865],{},[1202,1626,1627,1629,1632],{},[1220,1628,1278],{},[1220,1630,1631],{},"검색, 폴더 트리, 실시간 파일, AI 파일 도구에서 일반 사용자가 관리자 영역(모든 사용자의 개인 공간)을 지정할 수 있었습니다. 전체 관리자만 열 수 있도록 바꿨습니다.",[1220,1633,1634],{},[1227,1635,1239],{},[1202,1637,1638,1640,1643],{},[1220,1639,1278],{},[1220,1641,1642],{},"이름이 비슷한 다른 사용자의 개인 공간으로 파일 경로가 벗어날 수 있었습니다. 모든 공간의 파일 접근에 경계 확인을 넣었습니다.",[1220,1644,1645],{},[1227,1646,1239],{},[1202,1648,1649,1651,1654],{},[1220,1650,1278],{},[1220,1652,1653],{},"데이터베이스 파일을 직접 조회하는 기능에 경로 권한 확인이 없었고, 다른 데이터베이스 파일을 열 수 있었습니다. 권한 확인과 위험한 명령 차단을 넣었습니다.",[1220,1655,1656],{},[1227,1657,1239],{},[1202,1659,1660,1662,1665],{},[1220,1661,1278],{},[1220,1663,1664],{},"AI 일정 도구가 일정 소유자를 확인하지 않았고, AI 파일 도구가 비슷한 이름의 파일을 대신 읽을 때 권한을 다시 확인하지 않았습니다.",[1220,1666,1667],{},[1227,1668,1239],{},[1202,1670,1671,1673,1676],{},[1220,1672,1278],{},[1220,1674,1675],{},"개인 공간 활동 기록, 공간 간 복사의 원본 권한, 한글 자모 표기 차이에 따른 권한 확인, 즐겨찾기, 변환 상태, 작업 취소의 소유자 확인을 보완했습니다.",[1220,1677,1678],{},[1227,1679,1239],{},[1202,1681,1682,1684,1687],{},[1220,1683,1278],{},[1220,1685,1686],{},"웹사이트(웹스페이스) 표의 컬럼 읽기·쓰기 제한이 적용되지 않았습니다. 삭제된 행과 작성자 컬럼도 보호하도록 바꿨습니다.",[1220,1688,1689],{},[1227,1690,1239],{},[1202,1692,1693,1695,1698],{},[1220,1694,1278],{},[1220,1696,1697],{},"설정을 저장할 때 IP 접근 제한 항목이 빠지면 제한이 꺼질 수 있었습니다.",[1220,1699,1700],{},[1227,1701,1239],{},[1202,1703,1704,1707,1710],{},[1220,1705,1706],{},"데이터 분리",[1220,1708,1709],{},"팀 일정 목록, 받은 편지함, 알림에 다른 사용자의 개인 일정이 보일 수 있었습니다.",[1220,1711,1712],{},[1227,1713,1239],{},[1202,1715,1716,1718,1721],{},[1220,1717,1302],{},[1220,1719,1720],{},"자동완성 요청이 동시에 들어오면 서버가 멈출 수 있었습니다.",[1220,1722,1723],{},[1227,1724,1239],{},[1202,1726,1727,1730,1733],{},[1220,1728,1729],{},"외부 요청",[1220,1731,1732],{},"AI 모델 연결이 일반 사용자 요청을 관리 기능까지 전달했고, 일부 기능이 서버 내부 주소로 요청을 보낼 수 있었습니다. 플러그인으로 로그인 정보가 전달되던 것도 막았습니다.",[1220,1734,1735],{},[1227,1736,1239],{},[1202,1738,1739,1742,1745],{},[1220,1740,1741],{},"콘텐츠 격리",[1220,1743,1744],{},"웹사이트 정적 파일(XML·XHTML), 문서 변환 미리보기, 브랜딩 설정 값, PDF 변환 엔진, 로그인 후 이동 주소를 보완했습니다.",[1220,1746,1747],{},[1227,1748,1239],{},[1202,1750,1751,1754,1757],{},[1220,1752,1753],{},"과부하 방어",[1220,1755,1756],{},"요청 크기 제한을 기능 경로 기준으로 바꾸고, 느린 요청 본문에 시간 제한을 두고, 동시 업로드의 저장 공간 할당량을 예약하고, IPv6 요청 제한을 대역 단위로 묶었습니다.",[1220,1758,1759],{},[1227,1760,1239],{},[1202,1762,1763,1766,1769],{},[1220,1764,1765],{},"데이터 보존",[1220,1767,1768],{},"문자 인식(OCR) 결과가 없을 때 원본이 삭제되지 않도록 바꿨습니다.",[1220,1770,1771],{},[1227,1772,1239],{},[1202,1774,1775,1778,1781],{},[1220,1776,1777],{},"웹 화면",[1220,1779,1780],{},"메일 작성기의 HTML 정화를 표준 정화 도구(DOMPurify)로 바꾸고, 새 창으로 여는 링크를 보호했습니다.",[1220,1782,1783],{},[1227,1784,1239],{},[1202,1786,1787,1790,1793],{},[1220,1788,1789],{},"메일",[1220,1791,1792],{},"연락처 수정이 다른 사용자의 연락처에 영향을 줄 수 있었고, 외부 메일 계정이 회사 내부 주소를 차지할 수 있었습니다. 비활성 메일함 접근과 팀 공간에 저장된 공유 메일함 원문 파일 접근도 막았습니다.",[1220,1794,1795],{},[1227,1796,1239],{},[1202,1798,1799,1802,1805],{},[1220,1800,1801],{},"파일·연동",[1220,1803,1804],{},"파일 저장 잠금이 다른 사용자의 같은 이름 파일까지 막을 수 있었고, 내려받은 압축 파일 안의 이름이 다른 폴더로 풀릴 수 있었습니다. 워크플로 연동은 매번 사용자를 다시 확인하고, 웹훅 토큰은 로그에서 가리고, 서명 필수 설정은 기존 웹훅에도 적용합니다.",[1220,1806,1807],{},[1227,1808,1239],{},[1202,1810,1811,1814,1817],{},[1220,1812,1813],{},"공유",[1220,1815,1816],{},"외부 공유 기능을 끄거나 만든 사람의 공유 권한을 회수해도 기존 공유 링크가 계속 열렸고, 사용 횟수 제한을 동시에 넘길 수 있었습니다. 기능을 꺼도 만든 사람은 자기 링크를 보고 끊을 수 있습니다.",[1220,1818,1819],{},[1227,1820,1239],{},[1202,1822,1823,1825,1828],{},[1220,1824,1278],{},[1220,1826,1827],{},"1:1·단체 대화방 첨부를 같은 팀의 다른 사용자도 파일 기능으로 열 수 있었습니다. 그 방의 참여자와 관리자만 열 수 있도록 바꿨습니다.",[1220,1829,1830],{},[1227,1831,1239],{},[1202,1833,1834,1836,1839],{},[1220,1835,1278],{},[1220,1837,1838],{},"권한이 없어 거부된 폴더 조회 응답에 폴더 안 항목 정보가 함께 담길 수 있었습니다.",[1220,1840,1841],{},[1227,1842,1239],{},[1202,1844,1845,1847,1850],{},[1220,1846,1278],{},[1220,1848,1849],{},"파일 저장과 결재 처리 요청이 권한 거부 응답을 보낸 뒤에도 실제로 처리될 수 있었습니다. 거부하면 그 자리에서 멈추도록 바꿨습니다.",[1220,1851,1852],{},[1227,1853,1239],{},[1202,1855,1856,1858,1861],{},[1220,1857,1278],{},[1220,1859,1860],{},"AI 도구의 폴더 설정 조회·변경과 파일 내용을 바탕으로 만든 결과(리서치, 유사 이미지, 폴더 분석)에 권한 확인을 보완했습니다.",[1220,1862,1863],{},[1227,1864,1239],{},[1202,1866,1867,1870,1873],{},[1220,1868,1869],{},"설정·비밀 정보",[1220,1871,1872],{},"저장소에 비밀 키가 없고, 비밀번호 해시·토큰 서명·메일 계정 암호화가 적합함을 확인했습니다. API 설명 페이지가 역프록시를 거쳐 공개되던 것을 막고, 쓰지 않는 약한 암호 함수를 지웠습니다.",[1220,1874,1875],{},[1227,1876,1239],{},[1167,1878,1879],{},[1192,1880,1881],{},"운영자 안내",[1384,1883,1884],{},[1387,1885,1886,1887,1890,1891,1894],{},"외부 AI 연동(AP 브리지)에서 ",[1227,1888,1889],{},"/api/ai-proxy","를 쓴다면 서버와 연동 쪽에 같은 ",[1227,1892,1893],{},"SETFN_AI_PROXY_TOKEN"," 값을 설정해야 합니다. 이번 수정부터 토큰 없이 로컬 요청만으로는 접근할 수 없습니다.",[1182,1896,1898],{"id":1897},"_2026-10-23-출시-전-전체-보안-점검","2026-10-23 출시 전 전체 보안 점검",[1167,1900,1901],{},"메모리 부족 상황을 노린 공격 유형이 알려진 것을 계기로, 출시 전에 서버 전체를 다시 점검했습니다. AI(Claude)로 다섯 영역을 나누어 코드를 검토하고, 찾은 문제는 코드와 테스트로 다시 확인한 뒤 수정했습니다.",[1167,1903,1904],{},[1192,1905,1906],{},"점검 범위",[1384,1908,1909,1912,1915,1918,1921,1924,1927],{},[1387,1910,1911],{},"로그인 없이 호출할 수 있는 기능의 요청 크기와 연결 시간",[1387,1913,1914],{},"한 사용자의 요청 데이터가 다른 사용자 응답에 섞일 수 있는 경로",[1387,1916,1917],{},"완전하지 않은 데이터를 정상 데이터로 저장하는 경로",[1387,1919,1920],{},"요청이 반복될 때 서버 메모리에 계속 쌓이는 상태",[1387,1922,1923],{},"서버·웹 화면 라이브러리의 알려진 취약점, 문서 처리 프로그램의 2025년 이후 주요 취약점",[1387,1925,1926],{},"KISA 보호나라 보안 공지 463건(2025-01-01 ~ 2026-10-22)",[1387,1928,1929],{},"OWASP Top 10:2025, OWASP ASVS 5.0, NIST SP 800-63B-4, KISA 웹 취약점 점검 항목",[1167,1931,1932],{},[1192,1933,1194],{},[1196,1935,1936,1946],{},[1199,1937,1938],{},[1202,1939,1940,1942,1944],{},[1205,1941,1207],{},[1205,1943,1210],{},[1205,1945,1213],{},[1215,1947,1948,1960,1971,1982,1993,2004,2015,2026,2037,2048,2059,2070,2082,2094,2106,2117,2128,2140,2152],{},[1202,1949,1950,1953,1956],{},[1220,1951,1952],{},"사용자 간 데이터 분리",[1220,1954,1955],{},"파일 이름 자동완성에 다른 사용자의 개인 공간 파일 이름이 나올 수 있었습니다. 공간과 사용자별로 색인을 나누고, 관리자 공간은 관리자만 조회하도록 바꿨습니다.",[1220,1957,1958],{},[1227,1959,1239],{},[1202,1961,1962,1964,1967],{},[1220,1963,1952],{},[1220,1965,1966],{},"팀 일정과 개인 일정을 동시에 조회하면 다른 사용자의 개인 일정이 섞여 보일 수 있었습니다. 요청마다 일정 저장 위치를 고정하도록 바꿨습니다.",[1220,1968,1969],{},[1227,1970,1239],{},[1202,1972,1973,1975,1978],{},[1220,1974,1952],{},[1220,1976,1977],{},"휴지통에서 같은 이름의 파일을 덮어써 복원할 때 다른 파일의 댓글·변경 이력이 바뀔 수 있었습니다.",[1220,1979,1980],{},[1227,1981,1239],{},[1202,1983,1984,1986,1989],{},[1220,1985,1302],{},[1220,1987,1988],{},"검색 결과를 실시간으로 보내는 중 연결이 끊기면 응답이 끝난 뒤에도 기록을 시도해 서버가 중단될 수 있었습니다.",[1220,1990,1991],{},[1227,1992,1239],{},[1202,1994,1995,1997,2000],{},[1220,1996,1302],{},[1220,1998,1999],{},"실시간 연결의 현재 화면 정보를 여러 작업이 동시에 읽고 쓰는 경합을 정리했습니다.",[1220,2001,2002],{},[1227,2003,1239],{},[1202,2005,2006,2008,2011],{},[1220,2007,1753],{},[1220,2009,2010],{},"서버 연결에 시간 제한이 없어 느린 연결을 대량으로 열어 두는 공격에 취약했습니다. 헤더 수신 시간·유휴 연결 시간·헤더 크기 제한을 넣었습니다.",[1220,2012,2013],{},[1227,2014,1239],{},[1202,2016,2017,2019,2022],{},[1220,2018,1753],{},[1220,2020,2021],{},"요청 본문 크기 제한이 없는 기능이 있었습니다. 전체 API에 기본 상한을 두고, 로그인 없이 호출하는 앱 로그인 준비·기기 등록 확인·설치 화면에 개별 상한을 넣었습니다.",[1220,2023,2024],{},[1227,2025,1239],{},[1202,2027,2028,2030,2033],{},[1220,2029,1753],{},[1220,2031,2032],{},"로그인 실패 기록과 앱 로그인 대기 요청이 끝없이 늘어날 수 있었습니다. 전체 개수와 접속 위치별 개수 상한을 넣었습니다.",[1220,2034,2035],{},[1227,2036,1239],{},[1202,2038,2039,2041,2044],{},[1220,2040,1753],{},[1220,2042,2043],{},"메일 중복 처리 기록, 웹사이트 실시간 구독, AI 요청 동시 실행, 압축 다운로드 동시 작업, 폴더 트리 캐시가 끝없이 늘어날 수 있었습니다. 각각 상한과 주기적 정리를 넣었습니다.",[1220,2045,2046],{},[1227,2047,1239],{},[1202,2049,2050,2052,2055],{},[1220,2051,1765],{},[1220,2053,2054],{},"길이를 알리지 않은 업로드가 저장 공간 할당량 확인을 건너뛸 수 있었고, 문서 암호 설정이 파일을 제자리에서 덮어써 실패 시 원본이 손상될 수 있었습니다. 받은 양을 세면서 할당량을 확인하고, 문서 암호 설정과 변환 결과 저장은 임시 파일에 쓴 뒤 바꾸도록 고쳤습니다.",[1220,2056,2057],{},[1227,2058,1239],{},[1202,2060,2061,2063,2066],{},[1220,2062,1765],{},[1220,2064,2065],{},"너무 큰 특허 XML이 잘린 채 처리된 뒤 원본이 삭제될 수 있었습니다. 크기를 넘으면 실패로 처리하고, 일부만 해석된 원본은 지우지 않도록 고쳤습니다.",[1220,2067,2068],{},[1227,2069,1239],{},[1202,2071,2072,2075,2078],{},[1220,2073,2074],{},"문서 처리 프로그램",[1220,2076,2077],{},"LibreOffice에 Ubuntu 24.04에서 아직 수정되지 않은 취약점(CVE-2026-63277)이 있습니다. 문서 변환에 쓰는 LibreOffice 프로필에서 Java 사용을 끄도록 바꿨습니다.",[1220,2079,2080],{},[1227,2081,1239],{},[1202,2083,2084,2086,2089],{},[1220,2085,2074],{},[1220,2087,2088],{},"압축·이미지·문서 파일을 처리할 때의 크기 상한을 보강하고 있습니다.",[1220,2090,2091],{},[1227,2092,2093],{},"수정 중",[1202,2095,2096,2099,2102],{},[1220,2097,2098],{},"의존성",[1220,2100,2101],{},"Go 서버 라이브러리의 알려진 취약점 41건을 수정 버전으로 올리고, 더 이상 관리되지 않는 압축 라이브러리를 자체 모듈로 교체했습니다.",[1220,2103,2104],{},[1227,2105,1239],{},[1202,2107,2108,2110,2113],{},[1220,2109,2098],{},[1220,2111,2112],{},"웹 화면 라이브러리(문서 편집기, PDF 보기, Markdown 보기 등)의 심각도 높음 이상 취약점 20건을 수정 버전으로 올렸습니다.",[1220,2114,2115],{},[1227,2116,1239],{},[1202,2118,2119,2121,2124],{},[1220,2120,2098],{},[1220,2122,2123],{},"HTML 파일 편집기(TinyMCE)의 일부 취약점은 상위 버전에서만 수정되어 전환을 검토하고 있습니다. 메일 편집기는 입력 정화로 막았습니다.",[1220,2125,2126],{},[1227,2127,2093],{},[1202,2129,2130,2133,2136],{},[1220,2131,2132],{},"보안 헤더",[1220,2134,2135],{},"관리자·계정 화면을 다른 사이트에 끼워 넣지 못하게 하고, API 응답의 형식 추측과 외부로 넘어가는 주소 정보를 제한했습니다.",[1220,2137,2138],{},[1227,2139,1239],{},[1202,2141,2142,2144,2147],{},[1220,2143,1222],{},[1220,2145,2146],{},"비밀번호 정책을 NIST 기준(조합 규칙 대신 길이와 흔한 비밀번호 차단)으로 바꾸고, 관리자 2단계 인증을 추가할 예정입니다.",[1220,2148,2149],{},[1227,2150,2151],{},"개선 예정",[1202,2153,2154,2157,2160],{},[1220,2155,2156],{},"외부 공지",[1220,2158,2159],{},"KISA 공지 중 SetFN이 직접 영향받는 공지는 없었습니다. 운영 환경에 따라 해당하는 32건은 운영자 확인 항목으로 정리했습니다.",[1220,2161,2162],{},[1227,2163,2164],{},"운영자 조치 필요",[1167,2166,2167],{},[1192,2168,2169],{},"수정 확인",[1167,2171,2172],{},"각 수정에는 수정 전 코드에서 실패하는 테스트를 붙였습니다. 수정 후에는 운영 데이터와 분리된 시험 서버를 따로 실행하고 명령줄 도구로 관리자와 일반 사용자 계정을 만든 뒤, 실제 요청으로 다음을 확인했습니다.",[1384,2174,2175,2178,2181,2184,2187],{},[1387,2176,2177],{},"다른 사용자의 개인 공간 파일 이름이 자동완성에 나오지 않음",[1387,2179,2180],{},"팀·개인 일정을 동시에 40회 조회하는 동안 개인 일정이 팀 목록에 섞이지 않음",[1387,2182,2183],{},"헤더를 끝내지 않는 느린 연결을 서버가 제한 시간 뒤 끊음",[1387,2185,2186],{},"지나치게 큰 요청과 긴 입력을 본문을 읽기 전에 거절함",[1387,2188,2189],{},"관리자 화면에 클릭재킹 방지 헤더가 붙고, 고객 웹사이트 페이지에는 붙지 않음",[1167,2191,2192],{},[1192,2193,1881],{},[1384,2195,2196,2206],{},[1387,2197,2198,2201,2202,2205],{},[1171,2199,1106],{"href":2200},"/ko/docs/security-updates/server-checklist/","를 새로 만들었습니다. Ubuntu ",[1227,2203,2204],{},"universe"," 패키지의 보안 수정을 받는 방법과 MuPDF를 설치하지 않는 이유를 안내합니다.",[1387,2207,2208,2209,2212],{},"Linux와 Windows 설치 문서의 권장 패키지에서 ",[1227,2210,2211],{},"mupdf-tools","를 뺐습니다.",[1182,2214,2216],{"id":2215},"_2026-10-20-2026-10-22-권한-경계-재검토","2026-10-20 ~ 2026-10-22 권한 경계 재검토",[1167,2218,2219],{},"AI(OpenAI Codex)로 권한·공유 처리 코드를 병렬로 다시 검토하고, 찾은 결함은 수정 전 코드에서 실패하는 테스트로 확인한 뒤 고쳤습니다.",[1196,2221,2222,2230],{},[1199,2223,2224],{},[1202,2225,2226,2228],{},[1205,2227,1210],{},[1205,2229,1213],{},[1215,2231,2232,2242,2251,2260,2269],{},[1202,2233,2234,2237],{},[1220,2235,2236],{},"데스크톱 동기화 목록에 나열 권한이 없는 폴더의 이름과 파일 크기가 포함되던 문제",[1220,2238,2239],{},[1227,2240,2241],{},"조치 완료",[1202,2243,2244,2247],{},[1220,2245,2246],{},"공유 링크·휴지통 복원·문서 전송의 권한 처리 결함, 권한 거부가 서버 오류(500)로 보이던 문제",[1220,2248,2249],{},[1227,2250,2241],{},[1202,2252,2253,2256],{},[1220,2254,2255],{},"회수한 권한이 실시간 연결에서 되살아날 수 있던 순서 문제, 파일 알림의 받는 사람 범위",[1220,2257,2258],{},[1227,2259,2241],{},[1202,2261,2262,2265],{},[1220,2263,2264],{},"나간 대화방에 늦게 도착한 AI 응답이 보이던 문제",[1220,2266,2267],{},[1227,2268,2241],{},[1202,2270,2271,2274],{},[1220,2272,2273],{},"문서 변환 메뉴와 OCR 결과 저장의 권한 검사 보완",[1220,2275,2276],{},[1227,2277,2241],{},[1182,2279,2281],{"id":2280},"_2026-10-19-ai-로그-원문-제한","2026-10-19 AI 로그 원문 제한",[1167,2283,2284,2285],{},"AI 기능의 진단 로그에 요청 원문이 과도하게 남지 않도록 기록 범위를 줄였습니다. ",[1227,2286,2241],{},[1182,2288,2290],{"id":2289},"_2026-10-13-변환공개-웹-권한-보강","2026-10-13 변환·공개 웹 권한 보강",[1196,2292,2293,2301],{},[1199,2294,2295],{},[1202,2296,2297,2299],{},[1205,2298,1210],{},[1205,2300,1213],{},[1215,2302,2303,2312,2321],{},[1202,2304,2305,2308],{},[1220,2306,2307],{},"변환 폴더 재처리 기능에 경로 권한 검사가 없던 문제",[1220,2309,2310],{},[1227,2311,2241],{},[1202,2313,2314,2317],{},[1220,2315,2316],{},"변환 설정이 없는 폴더에서 원본이 삭제되던 기본값을 보존으로 변경",[1220,2318,2319],{},[1227,2320,2241],{},[1202,2322,2323,2326],{},[1220,2324,2325],{},"공개 웹 조회 권한과 문서 이력 경계 보강, 실시간 연결 재인증 회귀 보강",[1220,2327,2328],{},[1227,2329,2241],{},[1182,2331,2333],{"id":2332},"_2026-09-25-전방위-보안-점검","2026-09-25 전방위 보안 점검",[1167,2335,2336],{},"권한, 공유, 인증, 웹 화면 스크립트 실행(XSS), 서버 측 요청 위조(SSRF), AI·워크플로 도구를 점검했습니다. 격리된 시험 서버에 실제 요청을 보내 확인한 뒤 수정했습니다.",[1196,2338,2339,2347],{},[1199,2340,2341],{},[1202,2342,2343,2345],{},[1205,2344,1210],{},[1205,2346,1213],{},[1215,2348,2349,2358,2367,2376,2385,2394,2403,2412,2421],{},[1202,2350,2351,2354],{},[1220,2352,2353],{},"공유 링크 토큰의 종류·발급자·경로 범위 검증 강화",[1220,2355,2356],{},[1227,2357,2241],{},[1202,2359,2360,2363],{},[1220,2361,2362],{},"경로를 정규화한 뒤 권한을 판정하도록 변경, 목록 조회에도 상위 폴더 권한 적용",[1220,2364,2365],{},[1227,2366,2241],{},[1202,2368,2369,2372],{},[1220,2370,2371],{},"CSRF 예외 조건 강화, CORS 출처 비교에 포트 포함, 비밀번호 변경 시 모든 세션 종료",[1220,2373,2374],{},[1227,2375,2241],{},[1202,2377,2378,2381],{},[1220,2379,2380],{},"Office 문서 저장·잠금에 경로 권한과 폴더 정책 적용",[1220,2382,2383],{},[1227,2384,2241],{},[1202,2386,2387,2390],{},[1220,2388,2389],{},"AI 도구가 내부 인자를 받지 못하게 하고, 파일 생성·덮어쓰기에 권한과 편집 잠금 적용",[1220,2391,2392],{},[1227,2393,2241],{},[1202,2395,2396,2399],{},[1220,2397,2398],{},"워크플로 연동에 토큰 필수, 파일 도구에 권한 검사 적용",[1220,2400,2401],{},[1227,2402,2241],{},[1202,2404,2405,2408],{},[1220,2406,2407],{},"메일·Markdown·Word 문서 표시의 HTML 정화 강화, 업로드 파일 응답 격리",[1220,2409,2410],{},[1227,2411,2241],{},[1202,2413,2414,2417],{},[1220,2415,2416],{},"계정 잠금 기능이 악용되지 않도록 최근 로그인에 성공한 IP 예외 추가",[1220,2418,2419],{},[1227,2420,2241],{},[1202,2422,2423,2426],{},[1220,2424,2425],{},"실시간 기능의 관리자 작업(강제 퇴장 등) 권한 강화",[1220,2427,2428],{},[1227,2429,2241],{},[1182,2431,2433],{"id":2432},"관련-문서","관련 문서",[1384,2435,2436,2441,2446],{},[1387,2437,2438],{},[1171,2439,1091],{"href":2440},"/ko/docs/security-updates/overview/",[1387,2442,2443],{},[1171,2444,1101],{"href":2445},"/ko/docs/security-updates/vulnerability-status/",[1387,2447,2448],{},[1171,2449,1106],{"href":2200},{"title":2451,"searchDepth":2452,"depth":2453,"links":2454},"",2,3,[2455,2456,2457,2458,2459,2460,2461,2462,2463],{"id":1184,"depth":2452,"text":1185},{"id":1395,"depth":2452,"text":1396},{"id":1602,"depth":2452,"text":1603},{"id":1897,"depth":2452,"text":1898},{"id":2215,"depth":2452,"text":2216},{"id":2280,"depth":2452,"text":2281},{"id":2289,"depth":2452,"text":2290},{"id":2332,"depth":2452,"text":2333},{"id":2432,"depth":2452,"text":2433},"SetFN이 진행한 보안 점검의 날짜, 범위, 찾은 문제와 조치 상태를 최신순으로 기록합니다.","md",{},true,"출시 전 보안 점검 1~3차와 AI(Claude·Codex) 교차 검토: 관리자 2단계 인증 추가, 새 설치 비밀번호 규칙을 길이 중심으로 변경, 메일·HTML 편집기 교체(TinyMCE 제거), 권한 우회·데이터 분리 문제 수정, 라이브러리 취약점 61건 수정, KISA 공지 463건 대조","2026-10-24",{"title":2471,"description":2472,"ogType":2473,"twitterCard":2474,"keywords":2475},"보안 점검 기록 | SetFN Docs","SetFN 보안 점검의 날짜별 기록입니다. 점검 범위, 찾은 문제, 조치 상태를 최신순으로 확인할 수 있습니다.","article","summary_large_image",[1096,2476,2477,2478],"보안 업데이트 내역","취약점 조치","SetFN","c4uXDEMxYLEiS9EFsdFq-eXcS51J70IraMKe66j8Glc",[2481,2482],{"title":1091,"path":1092,"stem":1093,"slug":1094,"children":-1},{"title":1101,"path":1102,"stem":1103,"slug":1104,"children":-1},{"title":1096,"filename":2484,"content":2485},"review-log","# 보안 점검 기록\n\nSetFN이 진행한 보안 점검을 최신순으로 기록합니다. 각 기록에는 점검 범위, 찾은 문제, 조치 상태가 들어 있습니다. 상태 표기는 [주요 취약점 점검 현황](/ko/docs/security-updates/vulnerability-status/#상태-표기)과 같습니다.\n\n문제를 악용하는 방법이 알려지지 않도록, 기록에는 재현 절차 대신 영향과 조치 내용만 적습니다.\n\n---\n\n## 2026-10-24 AI 교차 검토와 후속 조치\n\n1~3차 점검에서 Claude가 고친 내용을 OpenAI Codex가 읽기 전용으로 다시 검토했습니다. 코드가 의도대로 고쳐졌는지와 화면 사용성(UI/UX)을 함께 보았고, 지적마다 코드로 확인해 실제 결함만 고친 뒤 Codex가 막는 문제가 남지 않을 때까지 수정본을 다섯 차례 되풀이해 검토했습니다. 3차 점검에서 남겨 둔 과제(관리자 2단계 인증, 길이 중심 비밀번호 규칙, TinyMCE)도 이날 함께 처리했습니다.\n\n**찾은 문제와 조치**\n\n| 영역 | 내용 | 상태 |\n|------|------|------|\n| 인증 | 관리자 계정에 인증 앱 2단계 인증(복구 코드 포함)을 추가하고, 모든 관리자가 등록해야 하는 `관리자 2단계 인증 필수` 정책을 보안 설정에 넣었습니다. [관리자 2단계 인증 설정하기](/ko/docs/admin/security/two-factor-auth/)를 참고하세요. | `수정 완료(배포 예정)` |\n| 인증 | 2단계 인증을 등록하거나 해제하면 그 계정의 다른 세션을 정리합니다. 필수 정책은 이미 열린 실시간 연결과 진행 중인 MCP 작업에도 적용되고, 비밀번호를 바꾸면 대기 중인 로그인 단계를 무효로 합니다. | `수정 완료(배포 예정)` |\n| 인증 | 새로 설치한 서버의 기본 비밀번호 규칙을 12자 이상, 문자 종류 조합 요구 없음으로 바꿨습니다(NIST SP 800-63B-4). 설치 마법사와 명령줄 도구도 같은 규칙을 따르며, 기존 서버의 규칙은 바뀌지 않습니다. | `수정 완료(배포 예정)` |\n| 편집기 | 단체 안내 메일 편집기를 Tiptap으로 교체하고 HTML 파일의 시각 편집기(TinyMCE)를 제거했습니다. TinyMCE 6에 남아 있던 미수정 취약점의 영향이 없어졌습니다. HTML 파일은 원본 코드로만 편집합니다. | `수정 완료(배포 예정)` |\n| 권한 | 프레젠테이션·시트·자동 변환이 넣는 이미지, 유사 이미지 검색과 AI 답변 근거의 본문에 요청한 사람의 권한을 확인합니다. 오피스 미리보기 결과는 만든 사람만 받을 수 있습니다. | `수정 완료(배포 예정)` |\n| 문서 변환 | 문서 안의 TeX 수식을 통해 작업 폴더 밖의 파일을 읽을 수 있었습니다. 작업 폴더 밖 파일은 읽지 못하게 막았습니다. | `수정 완료(배포 예정)` |\n| 서버 안정성 | 변환할 때 문서 구조를 나누어 읽고, 암호가 걸린 문서의 읽기 크기를 제한합니다. 외부 변환 도구는 실행 전에 메모리가 부족할 때 먼저 종료될 대상으로 표시합니다. | `수정 완료(배포 예정)` |\n| 기록 | 차단 해제가 일부만 성공했을 때의 처리와 설정 변경 감사 기록에서 빠진 항목을 보완했습니다. | `수정 완료(배포 예정)` |\n| 화면 | 단체 메일 초안을 보내지 않고 나갈 때와 복구 코드를 저장하지 않고 나갈 때 확인 창을 표시하고, 키보드·스크린 리더 접근성을 보완했습니다. | `수정 완료(배포 예정)` |\n| 인증 | 계정마다 인증 세대를 두어, 모든 세션 끊기·비밀번호 변경·2단계 인증 변경 뒤에는 이전 세션과 그 세션에서 파생된 토큰 갱신·앱 로그인을 쓸 수 없게 했습니다. 세션 삭제가 실패해도 적용됩니다. | `수정 완료(배포 예정)` |\n| 인증 | 모든 세션을 끊을 때 로그인과 동의 화면을 거쳐 연결한 MCP OAuth 연결도 함께 끊습니다. 사용자가 직접 만든 API 키는 유지됩니다. | `수정 완료(배포 예정)` |\n| 서버 안정성 | 실시간 연결 차단이 느린 연결 때문에 늦어지지 않게 하고, 암호 문서 처리에 동시 실행과 대기 수 제한을 두었습니다. | `수정 완료(배포 예정)` |\n| 인증 | 서버가 로그인 상태를 잠시 확인하지 못하면 로그아웃시키지 않고 잠시 뒤 다시 시도하게 했습니다. | `수정 완료(배포 예정)` |\n\n**남은 한계**\n\n- 브라우저가 비밀번호를 해시로 바꿔 보내므로 서버가 비밀번호 길이 규칙을 직접 강제하지 못합니다. 길이와 조합 규칙은 화면에서 검사하고, 흔한 비밀번호 차단은 서버에서 합니다.\n- 정책 적용 상태와 2단계 인증 대기 상태는 서버 메모리에 있습니다. 서버를 다시 시작하면 진행 중이던 로그인을 처음부터 다시 해야 합니다.\n\n## 2026-10-23 3차 후속 점검\n\n2차 재점검에서 남겨 둔 후속 항목과 국제 표준 문서의 권고(NIST SP 800-63B-4 비밀번호 기준, OWASP Top 10:2025 A09 보안 로깅)를 반영했습니다. 권한 문제는 수정 전 코드에서 실패하는 테스트로 먼저 확인한 뒤 고쳤고, 수정본은 새로 받은 소스에서 다시 빌드·시험했습니다.\n\n**찾은 문제와 조치**\n\n| 영역 | 내용 | 상태 |\n|------|------|------|\n| 권한 | 문서 변환(AI 변환 도구, 문서 변환, 오피스 미리보기)이 원본 폴더 전체에서 이미지를 가져와, 변환을 요청한 사람이 읽을 수 없는 하위 폴더의 이미지가 결과 파일에 들어갈 수 있었습니다. 요청한 사람이 읽을 수 있는 이미지만 넣도록 바꿨습니다. | `수정 완료(배포 예정)` |\n| 권한 | 문서 변환에서 문서에 적은 스타일시트·표지 경로를 통해 서버의 다른 파일 내용이 결과 파일에 들어갈 수 있었습니다. 변환 전에 스타일시트 지정과 안전하지 않은 경로를 지웁니다. 이 때문에 문서에 지정한 CSS 스타일은 변환 결과에 적용되지 않습니다. | `수정 완료(배포 예정)` |\n| 권한 | 지식 검색 결과와 AI 답변 근거가 보기 권한만으로 문서 본문 일부를 보여 주었습니다. 본문은 보기와 내려받기 권한이 모두 있을 때만 보여 주고, 보기 권한만 있으면 제목과 위치만 보여 줍니다. | `수정 완료(배포 예정)` |\n| 권한 | 즐겨찾기, 오피스 미리보기와 온라인 편집, 편집 이력이 팀 공간 시스템 폴더의 접근 경계와 현재 권한을 다시 확인하지 않았습니다. 요청할 때마다 다시 확인하고, 편집 이력의 이전 내용은 내려받기 권한이 있어야 볼 수 있습니다. | `수정 완료(배포 예정)` |\n| 권한 | 웹사이트(웹스페이스) 표의 합계·평균 같은 집계가 읽기가 제한된 컬럼 값을 반영했고, 행 삭제 권한만으로 영구 삭제할 수 있었습니다. 읽을 수 없는 컬럼은 집계에서 빼고, 영구 삭제는 관리자와 배포 담당자만 할 수 있습니다. | `수정 완료(배포 예정)` |\n| 자동화 | 문서 잠금 같은 동작이 거부된 경우에도 자동화와 웹훅이 실행될 수 있었습니다. 동작이 성공했을 때만 실행합니다. | `수정 완료(배포 예정)` |\n| 설정 | 폴더 설정 묶음을 적용하면 폴더의 지식 활용 설정이 지워질 수 있었습니다. 기존 설정을 유지합니다. | `수정 완료(배포 예정)` |\n| 인증 | 새 비밀번호를 정할 때 흔히 쓰이거나 유출된 비밀번호 약 2만 개를 막습니다(NIST SP 800-63B-4). 가입, 비밀번호 변경·재설정, 관리자의 계정 만들기·비밀번호 재설정, 명령줄 도구, 설치 마법사에 적용되며, 지금 쓰는 비밀번호로 로그인하는 것은 그대로입니다. | `수정 완료(배포 예정)` |\n| 기록 | 관리자의 보안·정책 설정 변경, 차단과 차단 해제, 사용자 권한 변경, 계정 만들기·삭제, 비밀번호 재설정, 기기 승인·거부, 세션·로봇 확인(CAPTCHA) 정책 변경을 감사 로그에 남깁니다. 바꾼 관리자, 시각, 접속 IP, 바뀐 항목이 기록되고 비밀번호·키 같은 비밀값은 기록하지 않습니다. | `수정 완료(배포 예정)` |\n| 외부 공유 | 관리자가 외부 공유를 꺼도 링크를 만든 사람이 기존 링크를 확인하고 삭제할 수 있도록 화면을 고쳤습니다. 새 링크는 만들 수 없습니다. | `수정 완료(배포 예정)` |\n| 화면 | AI 요청 한도, 압축 다운로드 대기 같은 새 서버 거절 사유를 사용자 언어의 안내 문구로 보여 줍니다. | `수정 완료(배포 예정)` |\n| 서버 안정성 | 큰 텍스트 파일(대용량 CSV 등)을 열 때 파일 전체를 메모리에 올려, 여러 사람이 동시에 열면 서버 메모리가 바닥날 수 있었습니다. 16MB가 넘는 파일은 나누어 보내도록 바꿨습니다. | `수정 완료(배포 예정)` |\n| 서버 안정성 | 브랜딩 로고와 AI 이미지 요약이 이미지의 가로·세로 크기를 확인하지 않고 풀었습니다. 크기를 먼저 확인하고 지나치게 큰 이미지는 풀지 않습니다. | `수정 완료(배포 예정)` |\n| 서버 안정성 | 경계가 깨지거나 아주 깊게 중첩된 메일을 처리하는 일부 코드(현재 쓰이지 않음)에 깊이 제한이 없고 끝나지 않을 수 있었습니다. 중첩 깊이를 제한하고 오류가 나면 멈추도록 고쳤습니다. | `수정 완료(배포 예정)` |\n| 서버 안정성 | 문서 변환·이미지·동영상 처리 프로그램이 메모리를 크게 쓰면 SetFN 서버가 대신 종료될 수 있었습니다. 메모리가 부족할 때 이 프로그램들이 먼저 종료되도록 표시합니다. | `수정 완료(배포 예정)` |\n\n**남은 과제**\n\n- 이 점검에서 남겨 둔 관리자 2단계 인증, 길이 중심 비밀번호 규칙(새 설치 기본값), TinyMCE 대체는 [2026-10-24 AI 교차 검토](#_2026-10-24-ai-교차-검토와-후속-조치)에서 처리했습니다.\n\n## 2026-10-23 2차 재점검\n\n1차 수정 뒤 같은 날 전체를 다시 점검했습니다. 1차 수정에 빈틈이 없는지 다시 검토하고, 1차에서 다루지 않은 영역(기능별 권한 확인 범위, 입력 처리, 메일·웹훅·AI 도구의 권한 경계, 웹 화면, 비밀 정보와 설정)을 AI(Claude)로 나누어 검토했습니다. 찾은 문제는 수정 전 코드에서 실패하는 테스트로 확인한 뒤 고쳤습니다.\n\n**찾은 문제와 조치**\n\n| 영역 | 내용 | 상태 |\n|------|------|------|\n| 권한 | 검색, 폴더 트리, 실시간 파일, AI 파일 도구에서 일반 사용자가 관리자 영역(모든 사용자의 개인 공간)을 지정할 수 있었습니다. 전체 관리자만 열 수 있도록 바꿨습니다. | `수정 완료(배포 예정)` |\n| 권한 | 이름이 비슷한 다른 사용자의 개인 공간으로 파일 경로가 벗어날 수 있었습니다. 모든 공간의 파일 접근에 경계 확인을 넣었습니다. | `수정 완료(배포 예정)` |\n| 권한 | 데이터베이스 파일을 직접 조회하는 기능에 경로 권한 확인이 없었고, 다른 데이터베이스 파일을 열 수 있었습니다. 권한 확인과 위험한 명령 차단을 넣었습니다. | `수정 완료(배포 예정)` |\n| 권한 | AI 일정 도구가 일정 소유자를 확인하지 않았고, AI 파일 도구가 비슷한 이름의 파일을 대신 읽을 때 권한을 다시 확인하지 않았습니다. | `수정 완료(배포 예정)` |\n| 권한 | 개인 공간 활동 기록, 공간 간 복사의 원본 권한, 한글 자모 표기 차이에 따른 권한 확인, 즐겨찾기, 변환 상태, 작업 취소의 소유자 확인을 보완했습니다. | `수정 완료(배포 예정)` |\n| 권한 | 웹사이트(웹스페이스) 표의 컬럼 읽기·쓰기 제한이 적용되지 않았습니다. 삭제된 행과 작성자 컬럼도 보호하도록 바꿨습니다. | `수정 완료(배포 예정)` |\n| 권한 | 설정을 저장할 때 IP 접근 제한 항목이 빠지면 제한이 꺼질 수 있었습니다. | `수정 완료(배포 예정)` |\n| 데이터 분리 | 팀 일정 목록, 받은 편지함, 알림에 다른 사용자의 개인 일정이 보일 수 있었습니다. | `수정 완료(배포 예정)` |\n| 서버 안정성 | 자동완성 요청이 동시에 들어오면 서버가 멈출 수 있었습니다. | `수정 완료(배포 예정)` |\n| 외부 요청 | AI 모델 연결이 일반 사용자 요청을 관리 기능까지 전달했고, 일부 기능이 서버 내부 주소로 요청을 보낼 수 있었습니다. 플러그인으로 로그인 정보가 전달되던 것도 막았습니다. | `수정 완료(배포 예정)` |\n| 콘텐츠 격리 | 웹사이트 정적 파일(XML·XHTML), 문서 변환 미리보기, 브랜딩 설정 값, PDF 변환 엔진, 로그인 후 이동 주소를 보완했습니다. | `수정 완료(배포 예정)` |\n| 과부하 방어 | 요청 크기 제한을 기능 경로 기준으로 바꾸고, 느린 요청 본문에 시간 제한을 두고, 동시 업로드의 저장 공간 할당량을 예약하고, IPv6 요청 제한을 대역 단위로 묶었습니다. | `수정 완료(배포 예정)` |\n| 데이터 보존 | 문자 인식(OCR) 결과가 없을 때 원본이 삭제되지 않도록 바꿨습니다. | `수정 완료(배포 예정)` |\n| 웹 화면 | 메일 작성기의 HTML 정화를 표준 정화 도구(DOMPurify)로 바꾸고, 새 창으로 여는 링크를 보호했습니다. | `수정 완료(배포 예정)` |\n| 메일 | 연락처 수정이 다른 사용자의 연락처에 영향을 줄 수 있었고, 외부 메일 계정이 회사 내부 주소를 차지할 수 있었습니다. 비활성 메일함 접근과 팀 공간에 저장된 공유 메일함 원문 파일 접근도 막았습니다. | `수정 완료(배포 예정)` |\n| 파일·연동 | 파일 저장 잠금이 다른 사용자의 같은 이름 파일까지 막을 수 있었고, 내려받은 압축 파일 안의 이름이 다른 폴더로 풀릴 수 있었습니다. 워크플로 연동은 매번 사용자를 다시 확인하고, 웹훅 토큰은 로그에서 가리고, 서명 필수 설정은 기존 웹훅에도 적용합니다. | `수정 완료(배포 예정)` |\n| 공유 | 외부 공유 기능을 끄거나 만든 사람의 공유 권한을 회수해도 기존 공유 링크가 계속 열렸고, 사용 횟수 제한을 동시에 넘길 수 있었습니다. 기능을 꺼도 만든 사람은 자기 링크를 보고 끊을 수 있습니다. | `수정 완료(배포 예정)` |\n| 권한 | 1:1·단체 대화방 첨부를 같은 팀의 다른 사용자도 파일 기능으로 열 수 있었습니다. 그 방의 참여자와 관리자만 열 수 있도록 바꿨습니다. | `수정 완료(배포 예정)` |\n| 권한 | 권한이 없어 거부된 폴더 조회 응답에 폴더 안 항목 정보가 함께 담길 수 있었습니다. | `수정 완료(배포 예정)` |\n| 권한 | 파일 저장과 결재 처리 요청이 권한 거부 응답을 보낸 뒤에도 실제로 처리될 수 있었습니다. 거부하면 그 자리에서 멈추도록 바꿨습니다. | `수정 완료(배포 예정)` |\n| 권한 | AI 도구의 폴더 설정 조회·변경과 파일 내용을 바탕으로 만든 결과(리서치, 유사 이미지, 폴더 분석)에 권한 확인을 보완했습니다. | `수정 완료(배포 예정)` |\n| 설정·비밀 정보 | 저장소에 비밀 키가 없고, 비밀번호 해시·토큰 서명·메일 계정 암호화가 적합함을 확인했습니다. API 설명 페이지가 역프록시를 거쳐 공개되던 것을 막고, 쓰지 않는 약한 암호 함수를 지웠습니다. | `수정 완료(배포 예정)` |\n\n**운영자 안내**\n\n- 외부 AI 연동(AP 브리지)에서 `/api/ai-proxy`를 쓴다면 서버와 연동 쪽에 같은 `SETFN_AI_PROXY_TOKEN` 값을 설정해야 합니다. 이번 수정부터 토큰 없이 로컬 요청만으로는 접근할 수 없습니다.\n\n## 2026-10-23 출시 전 전체 보안 점검\n\n메모리 부족 상황을 노린 공격 유형이 알려진 것을 계기로, 출시 전에 서버 전체를 다시 점검했습니다. AI(Claude)로 다섯 영역을 나누어 코드를 검토하고, 찾은 문제는 코드와 테스트로 다시 확인한 뒤 수정했습니다.\n\n**점검 범위**\n\n- 로그인 없이 호출할 수 있는 기능의 요청 크기와 연결 시간\n- 한 사용자의 요청 데이터가 다른 사용자 응답에 섞일 수 있는 경로\n- 완전하지 않은 데이터를 정상 데이터로 저장하는 경로\n- 요청이 반복될 때 서버 메모리에 계속 쌓이는 상태\n- 서버·웹 화면 라이브러리의 알려진 취약점, 문서 처리 프로그램의 2025년 이후 주요 취약점\n- KISA 보호나라 보안 공지 463건(2025-01-01 ~ 2026-10-22)\n- OWASP Top 10:2025, OWASP ASVS 5.0, NIST SP 800-63B-4, KISA 웹 취약점 점검 항목\n\n**찾은 문제와 조치**\n\n| 영역 | 내용 | 상태 |\n|------|------|------|\n| 사용자 간 데이터 분리 | 파일 이름 자동완성에 다른 사용자의 개인 공간 파일 이름이 나올 수 있었습니다. 공간과 사용자별로 색인을 나누고, 관리자 공간은 관리자만 조회하도록 바꿨습니다. | `수정 완료(배포 예정)` |\n| 사용자 간 데이터 분리 | 팀 일정과 개인 일정을 동시에 조회하면 다른 사용자의 개인 일정이 섞여 보일 수 있었습니다. 요청마다 일정 저장 위치를 고정하도록 바꿨습니다. | `수정 완료(배포 예정)` |\n| 사용자 간 데이터 분리 | 휴지통에서 같은 이름의 파일을 덮어써 복원할 때 다른 파일의 댓글·변경 이력이 바뀔 수 있었습니다. | `수정 완료(배포 예정)` |\n| 서버 안정성 | 검색 결과를 실시간으로 보내는 중 연결이 끊기면 응답이 끝난 뒤에도 기록을 시도해 서버가 중단될 수 있었습니다. | `수정 완료(배포 예정)` |\n| 서버 안정성 | 실시간 연결의 현재 화면 정보를 여러 작업이 동시에 읽고 쓰는 경합을 정리했습니다. | `수정 완료(배포 예정)` |\n| 과부하 방어 | 서버 연결에 시간 제한이 없어 느린 연결을 대량으로 열어 두는 공격에 취약했습니다. 헤더 수신 시간·유휴 연결 시간·헤더 크기 제한을 넣었습니다. | `수정 완료(배포 예정)` |\n| 과부하 방어 | 요청 본문 크기 제한이 없는 기능이 있었습니다. 전체 API에 기본 상한을 두고, 로그인 없이 호출하는 앱 로그인 준비·기기 등록 확인·설치 화면에 개별 상한을 넣었습니다. | `수정 완료(배포 예정)` |\n| 과부하 방어 | 로그인 실패 기록과 앱 로그인 대기 요청이 끝없이 늘어날 수 있었습니다. 전체 개수와 접속 위치별 개수 상한을 넣었습니다. | `수정 완료(배포 예정)` |\n| 과부하 방어 | 메일 중복 처리 기록, 웹사이트 실시간 구독, AI 요청 동시 실행, 압축 다운로드 동시 작업, 폴더 트리 캐시가 끝없이 늘어날 수 있었습니다. 각각 상한과 주기적 정리를 넣었습니다. | `수정 완료(배포 예정)` |\n| 데이터 보존 | 길이를 알리지 않은 업로드가 저장 공간 할당량 확인을 건너뛸 수 있었고, 문서 암호 설정이 파일을 제자리에서 덮어써 실패 시 원본이 손상될 수 있었습니다. 받은 양을 세면서 할당량을 확인하고, 문서 암호 설정과 변환 결과 저장은 임시 파일에 쓴 뒤 바꾸도록 고쳤습니다. | `수정 완료(배포 예정)` |\n| 데이터 보존 | 너무 큰 특허 XML이 잘린 채 처리된 뒤 원본이 삭제될 수 있었습니다. 크기를 넘으면 실패로 처리하고, 일부만 해석된 원본은 지우지 않도록 고쳤습니다. | `수정 완료(배포 예정)` |\n| 문서 처리 프로그램 | LibreOffice에 Ubuntu 24.04에서 아직 수정되지 않은 취약점(CVE-2026-63277)이 있습니다. 문서 변환에 쓰는 LibreOffice 프로필에서 Java 사용을 끄도록 바꿨습니다. | `수정 완료(배포 예정)` |\n| 문서 처리 프로그램 | 압축·이미지·문서 파일을 처리할 때의 크기 상한을 보강하고 있습니다. | `수정 중` |\n| 의존성 | Go 서버 라이브러리의 알려진 취약점 41건을 수정 버전으로 올리고, 더 이상 관리되지 않는 압축 라이브러리를 자체 모듈로 교체했습니다. | `수정 완료(배포 예정)` |\n| 의존성 | 웹 화면 라이브러리(문서 편집기, PDF 보기, Markdown 보기 등)의 심각도 높음 이상 취약점 20건을 수정 버전으로 올렸습니다. | `수정 완료(배포 예정)` |\n| 의존성 | HTML 파일 편집기(TinyMCE)의 일부 취약점은 상위 버전에서만 수정되어 전환을 검토하고 있습니다. 메일 편집기는 입력 정화로 막았습니다. | `수정 중` |\n| 보안 헤더 | 관리자·계정 화면을 다른 사이트에 끼워 넣지 못하게 하고, API 응답의 형식 추측과 외부로 넘어가는 주소 정보를 제한했습니다. | `수정 완료(배포 예정)` |\n| 인증 | 비밀번호 정책을 NIST 기준(조합 규칙 대신 길이와 흔한 비밀번호 차단)으로 바꾸고, 관리자 2단계 인증을 추가할 예정입니다. | `개선 예정` |\n| 외부 공지 | KISA 공지 중 SetFN이 직접 영향받는 공지는 없었습니다. 운영 환경에 따라 해당하는 32건은 운영자 확인 항목으로 정리했습니다. | `운영자 조치 필요` |\n\n**수정 확인**\n\n각 수정에는 수정 전 코드에서 실패하는 테스트를 붙였습니다. 수정 후에는 운영 데이터와 분리된 시험 서버를 따로 실행하고 명령줄 도구로 관리자와 일반 사용자 계정을 만든 뒤, 실제 요청으로 다음을 확인했습니다.\n\n- 다른 사용자의 개인 공간 파일 이름이 자동완성에 나오지 않음\n- 팀·개인 일정을 동시에 40회 조회하는 동안 개인 일정이 팀 목록에 섞이지 않음\n- 헤더를 끝내지 않는 느린 연결을 서버가 제한 시간 뒤 끊음\n- 지나치게 큰 요청과 긴 입력을 본문을 읽기 전에 거절함\n- 관리자 화면에 클릭재킹 방지 헤더가 붙고, 고객 웹사이트 페이지에는 붙지 않음\n\n**운영자 안내**\n\n- [서버 보안 업데이트 점검하기](/ko/docs/security-updates/server-checklist/)를 새로 만들었습니다. Ubuntu `universe` 패키지의 보안 수정을 받는 방법과 MuPDF를 설치하지 않는 이유를 안내합니다.\n- Linux와 Windows 설치 문서의 권장 패키지에서 `mupdf-tools`를 뺐습니다.\n\n## 2026-10-20 ~ 2026-10-22 권한 경계 재검토\n\nAI(OpenAI Codex)로 권한·공유 처리 코드를 병렬로 다시 검토하고, 찾은 결함은 수정 전 코드에서 실패하는 테스트로 확인한 뒤 고쳤습니다.\n\n| 내용 | 상태 |\n|------|------|\n| 데스크톱 동기화 목록에 나열 권한이 없는 폴더의 이름과 파일 크기가 포함되던 문제 | `조치 완료` |\n| 공유 링크·휴지통 복원·문서 전송의 권한 처리 결함, 권한 거부가 서버 오류(500)로 보이던 문제 | `조치 완료` |\n| 회수한 권한이 실시간 연결에서 되살아날 수 있던 순서 문제, 파일 알림의 받는 사람 범위 | `조치 완료` |\n| 나간 대화방에 늦게 도착한 AI 응답이 보이던 문제 | `조치 완료` |\n| 문서 변환 메뉴와 OCR 결과 저장의 권한 검사 보완 | `조치 완료` |\n\n## 2026-10-19 AI 로그 원문 제한\n\nAI 기능의 진단 로그에 요청 원문이 과도하게 남지 않도록 기록 범위를 줄였습니다. `조치 완료`\n\n## 2026-10-13 변환·공개 웹 권한 보강\n\n| 내용 | 상태 |\n|------|------|\n| 변환 폴더 재처리 기능에 경로 권한 검사가 없던 문제 | `조치 완료` |\n| 변환 설정이 없는 폴더에서 원본이 삭제되던 기본값을 보존으로 변경 | `조치 완료` |\n| 공개 웹 조회 권한과 문서 이력 경계 보강, 실시간 연결 재인증 회귀 보강 | `조치 완료` |\n\n## 2026-09-25 전방위 보안 점검\n\n권한, 공유, 인증, 웹 화면 스크립트 실행(XSS), 서버 측 요청 위조(SSRF), AI·워크플로 도구를 점검했습니다. 격리된 시험 서버에 실제 요청을 보내 확인한 뒤 수정했습니다.\n\n| 내용 | 상태 |\n|------|------|\n| 공유 링크 토큰의 종류·발급자·경로 범위 검증 강화 | `조치 완료` |\n| 경로를 정규화한 뒤 권한을 판정하도록 변경, 목록 조회에도 상위 폴더 권한 적용 | `조치 완료` |\n| CSRF 예외 조건 강화, CORS 출처 비교에 포트 포함, 비밀번호 변경 시 모든 세션 종료 | `조치 완료` |\n| Office 문서 저장·잠금에 경로 권한과 폴더 정책 적용 | `조치 완료` |\n| AI 도구가 내부 인자를 받지 못하게 하고, 파일 생성·덮어쓰기에 권한과 편집 잠금 적용 | `조치 완료` |\n| 워크플로 연동에 토큰 필수, 파일 도구에 권한 검사 적용 | `조치 완료` |\n| 메일·Markdown·Word 문서 표시의 HTML 정화 강화, 업로드 파일 응답 격리 | `조치 완료` |\n| 계정 잠금 기능이 악용되지 않도록 최근 로그인에 성공한 IP 예외 추가 | `조치 완료` |\n| 실시간 기능의 관리자 작업(강제 퇴장 등) 권한 강화 | `조치 완료` |\n\n## 관련 문서\n\n- [보안 점검과 업데이트 방식 알아보기](/ko/docs/security-updates/overview/)\n- [주요 취약점 점검 현황](/ko/docs/security-updates/vulnerability-status/)\n- [서버 보안 업데이트 점검하기](/ko/docs/security-updates/server-checklist/)\n",1793056622780]