> ## Documentation Index
> Fetch the complete documentation index at: https://docs.replit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Project Security Center

> 보안 스캔을 선택하고, 발견 사항을 검토하고, Replit App을 게시하기 전에 취약점을 수정하세요.

export const chatIcon = (name, size = 19) => {
  const paths = {
    MessageCircle: <path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z" />,
    ChartNoAxesCombined: <>
        <path d="M12 16v5" />
        <path d="M16 14v7" />
        <path d="M20 10v11" />
        <path d="m22 3-8.646 8.646a.5.5 0 0 1-.708 0L9.354 8.354a.5.5 0 0 0-.708 0L2 15" />
        <path d="M4 18v3" />
        <path d="M8 14v7" />
      </>,
    Workflow: <>
        <rect width="8" height="8" x="3" y="3" rx="2" />
        <path d="M7 11v4a2 2 0 0 0 2 2h4" />
        <rect width="8" height="8" x="13" y="13" rx="2" />
      </>,
    Lightbulb: <>
        <path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5" />
        <path d="M9 18h6" />
        <path d="M10 22h4" />
      </>,
    Code2: <>
        <path d="m18 16 4-4-4-4" />
        <path d="m6 8-4 4 4 4" />
        <path d="m14.5 4-5 16" />
      </>,
    Presentation: <>
        <path d="M2 3h20" />
        <path d="M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3" />
        <path d="m7 21 5-5 5 5" />
      </>,
    PanelsTopLeft: <>
        <rect width="18" height="18" x="3" y="3" rx="2" />
        <path d="M3 9h18" />
        <path d="M9 21V9" />
      </>,
    Keyboard: <>
        <rect width="20" height="14" x="2" y="5" rx="2" />
        <path d="M6 9h.01M10 9h.01M14 9h.01M18 9h.01M6 13h.01M10 13h.01M14 13h.01M18 13h.01M8 17h8" />
      </>,
    Layers3: <>
        <path d="m12 2 9 5-9 5-9-5 9-5Z" />
        <path d="m3 12 9 5 9-5M3 17l9 5 9-5" />
      </>,
    CalendarClock: <>
        <path d="M16 2v4M8 2v4M3 10h18" />
        <rect width="18" height="19" x="3" y="4" rx="2" />
        <path d="M12 14v3l2 1" />
      </>,
    ConversationProject: <>
        <path d="M3 4h8v6H6l-3 2V4Z" />
        <rect width="9" height="9" x="12" y="11" rx="1.5" />
        <path d="M12 14h9M15 11v9" />
      </>,
    CursorDesign: <>
        <path d="m5 3 13 7-6 2-2 6L5 3Z" />
        <path d="M15 16h6M18 13v6" />
      </>,
    AppWindow: <>
        <rect width="20" height="18" x="2" y="3" rx="2" />
        <path d="M2 8h20M6 5.5h.01M9 5.5h.01" />
      </>,
    CloudUpload: <>
        <path d="M12 13v8M8 17l4-4 4 4" />
        <path d="M20 16.5A5 5 0 0 0 18 7h-1.3A7 7 0 0 0 3.3 9.4 4.5 4.5 0 0 0 5 18h2" />
      </>,
    Image: <>
        <rect width="18" height="18" x="3" y="3" rx="2" ry="2" />
        <circle cx="9" cy="9" r="2" />
        <path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" />
      </>,
    FileUp: <>
        <path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" />
        <path d="M14 2v4a2 2 0 0 0 2 2h4" />
        <path d="M12 12v6" />
        <path d="m15 15-3-3-3 3" />
      </>,
    Search: <>
        <circle cx="11" cy="11" r="8" />
        <path d="m21 21-4.3-4.3" />
      </>,
    Sparkles: <path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z" />,
    Briefcase: <>
        <path d="M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16" />
        <rect width="20" height="14" x="2" y="6" rx="2" />
      </>,
    WandSparkles: <>
        <path d="m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72" />
        <path d="m14 7 3 3" />
        <path d="M5 6v4" />
        <path d="M19 14v4" />
        <path d="M10 2v2" />
        <path d="M7 8H3" />
        <path d="M21 16h-4" />
        <path d="M11 3H9" />
      </>
  };
  return <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
      {paths[name] ?? paths.Sparkles}
    </svg>;
};

export const ChatExample = ({icon, iconSrc, tag, title, href, palette, children}) => {
  const body = <>
      {palette && <div className={`chat-use-case-visual palette-${palette}`}>
          <div className="chat-use-case-window">
            <i />
            <i />
            <i />
            <b />
            <b />
            <b />
          </div>
          <em>
            {iconSrc ? <img src={iconSrc} alt="" width="26" height="26" /> : chatIcon(icon, 24)}
          </em>
        </div>}
      <span>
        {iconSrc ? <img src={iconSrc} alt="" width="19" height="19" /> : chatIcon(icon, 19)}
      </span>
      {tag && <div className="chat-example-tag">{tag}</div>}
      <strong>{title}</strong>
      <p>{children}</p>
      <small>{href ? "Explore →" : ""}</small>
    </>;
  const className = `chat-example${palette ? " has-visual" : ""}`;
  return href ? <a className={className} href={href}>
      {body}
    </a> : <div className={className}>{body}</div>;
};

export const ChatExampleGrid = ({hasVisuals, children}) => {
  return <section className={`chat-mkt chat-workflow-grid${hasVisuals ? " has-visuals" : ""}`}>
      {children}
    </section>;
};

<Frame>
  <img src="https://mintcdn.com/replit/m66KQX7992wJ3rkk/images/security-scanner/security-scanner-hero.png?fit=max&auto=format&n=m66KQX7992wJ3rkk&q=85&s=fe56b3d0d0735cc2a6dbdba2b252badc" alt="심각도별로 그룹화된 보안 스캔 발견 사항을 보여주는 Project Security Center" style={{ display: "block", margin: "0 auto" }} width="3402" height="2058" data-path="images/security-scanner/security-scanner-hero.png" />
</Frame>

Project Security Center는 Replit App의 보안 및 개인정보 관련 취약점을 찾아 수정하는 중심 장소입니다. 프로젝트의 **Tools** 패널에서 **Security Center**를 선택해 스캔을 실행하고, 발견 사항을 검토하고, 승인된 문제를 Agent에게 보내 해결하세요.

<Note>
  종속성 보안이 처음이신가요? CVE, SBOM, 노출도, Fix with Agent, Republish, Auto-Protect의 정의는 [보안
  개념](/ko/features/security/concepts)을 참고하세요.
</Note>

## 보안 스캔 선택하기

[보안 스캔 수준](/ko/features/security/security-scan-levels)을 비교하여 Level 1, 2, 3이 각각 무엇을 검사하는지 확인하세요.

필요한 검토 유형에 맞는 스캔을 선택하세요.

<div id="agent-security-scans" />

<div id="level-3-scans" />

<ChatExampleGrid>
  <ChatExample title="소스 코드 검토하기" icon="Code2" href="/ko/features/security/agent-security-scans">
    일반적인 코드 리뷰 워크플로에는 Agent 보안 스캔을 사용하세요. Security
    Agent가 코드베이스를 감사하고, 발견 사항을 보고하고, 수정을 도와줍니다.
  </ChatExample>

  <ChatExample title="실행 중인 앱 테스트하기" icon="Search" href="/ko/features/security/black-box-pen-tests">
    실행 중인 앱에 대한 블랙박스 침투 테스트도 필요하다면 Level 3 스캔을
    사용하세요. Level 3는 소스 코드 검토와 함께 이 테스트를 실행합니다.
  </ChatExample>
</ChatExampleGrid>

두 경로 모두 **Security Center**에 발견 사항을 보고합니다. Agent 보안 스캔은 유료 Replit 빌더가 사용할 수 있습니다.

## 자동 종속성 스캔

자동 종속성 스캔은 프로젝트 패키지를 공개 취약점 기록과 비교해 확인합니다. 이 스캔은 무료이며 자동으로 실행됩니다. 새로운 Common Vulnerabilities and Exposures(CVE) 항목이 공개되면 Replit이 프로젝트의 종속성과 비교해 확인하고, 수동으로 다시 스캔할 필요 없이 일치하는 항목을 **Security** 패널에 표시합니다.

종속성 스캔은 Node.js/npm, Python, Go, Rust, PHP, Ruby를 지원합니다.

자동 종속성 수정은 현재 Node.js/npm에 초점을 맞추고 있습니다.

<Frame>
  <img src="https://mintcdn.com/replit/MuLW6SmzOLVKbNrI/images/project-security-center/fix-all-with-agent.png?fit=max&auto=format&n=MuLW6SmzOLVKbNrI&q=85&s=8d6a692c34d6d106462fa714bdc703aa" alt="Fix all with Agent 작업이 있는 자동 종속성 스캔 카드" width="1440" height="900" data-path="images/project-security-center/fix-all-with-agent.png" />
</Frame>

### Auto-Protect

Auto-Protect는 자동 종속성 스캔을 확장한 기능입니다. Replit이 일치하는 취약점을 발견하면 Agent가 패치를 준비하고 테스트한 뒤 직접 링크가 포함된 이메일을 보냅니다. 패치는 검토를 위해 **Security** 패널에 대기 상태로 남아 있습니다. 패치를 적용한 후에는 프로덕션 버전에 수정 사항이 포함되도록 앱을 다시 게시하세요.

Auto-Protect는 종속성 CVE만 다룹니다. 애플리케이션 코드를 검토하려면 [Agent 보안 스캔](/ko/features/security/agent-security-scans)을 사용하세요.

두 Auto-Protect 설정은 모두 기본적으로 꺼져 있습니다.

<Steps>
  <Step title="패치 준비 활성화하기">
    Workspace 관리자가 **Settings** > **Account** > **Advanced**로 이동해
    Replit이 완화 조치를 준비할 최소 심각도(low, medium, high, critical)를
    선택합니다.
  </Step>

  <Step title="보안 이메일 활성화하기">
    **Settings** > **Personalization** > **Email Notifications**로 이동해
    알림을 받고 싶은 최소 심각도를 선택하세요.
  </Step>
</Steps>

새로운 취약점이 발생할 때마다 Replit은 영향을 받은 모든 프로젝트를 요약하는 이메일을 워크스페이스당 최대 한 건 보냅니다. 패치를 적용하기 전에 **Go to Task**를 선택해 Agent가 준비한 패치를 확인하세요. 패치를 적용한 후에는 새 버전을 게시할 때까지 해당 취약점이 **pending republish**로 표시됩니다.

<Note>
  Agent가 준비한 완화 조치는 Auto-Protect가 선제적으로 준비한 경우를 포함해
  다른 Agent 작업과 동일하게 요금이 청구됩니다.
</Note>

## 발견 사항 검토

보안 결과는 **Security** 패널에 표시되며 심각도별로 그룹화됩니다.

| 심각도 | 안내 |
| - | - |
| Critical | 게시 전에 해결해야 하는 즉각적인 위험 |
| High | 특정 조건에서 악용될 수 있는 심각한 문제 |
| Medium | 악용 가능성이 낮은 잠재적 위험 |
| Low / Informational | 사소한 문제 및 모범 사례 권장 사항 |

각 발견 사항을 수락, 수정, 또는 무시하기 전에 검토하세요. 승인된 문제는 Agent에게 보내 해결하고, 수정 사항을 적용한 후 해당 스캔을 다시 실행하세요.

## 개발 및 게시 중 보안 검사

### 빌드 중 보안 스캔

Agent로 빌드하는 동안 Replit은 Agent가 변경한 파일에서 일반적인 안전하지 않은 패턴과 하드코딩된 시크릿을 자동으로 검토합니다. 이는 전체 코드베이스 검토가 아니라 Agent 워크플로 내의 초기 경량 검사입니다. 이 결과는 **Security** 패널에 별도의 보고서로 표시되지 않습니다.

### 게시 검사

Replit은 게시 전에도 보안 스캔을 실행합니다. **Block publishing of critical vulnerabilities** 설정은 스캔에서 critical 문제가 발견되었을 때 어떤 일이 일어날지를 결정합니다.

* **On**: 문제가 해결되거나 무시되기 전까지 게시가 차단됩니다.
* **Off**: 게시가 진행되며 발견 사항은 검토용으로 남습니다.

엔터프라이즈 조직은 모든 앱에 이 설정을 의무화할 수 있습니다.

이 검사들은 전체 [Agent 보안 스캔](/ko/features/security/agent-security-scans)이나 [Level 3 스캔](/ko/features/security/black-box-pen-tests)을 대체하지 않고 보완합니다.

## 다음 단계

* [Agent 보안 스캔 워크플로](/ko/features/security/agent-security-scans)를 따라 해보세요.
* [Level 3로 블랙박스 침투 테스트](/ko/features/security/black-box-pen-tests) 실행하는 방법을 알아보세요.
* [게시](/ko/learn/projects-and-artifacts/replit-deployments)에 대해 자세히 알아보세요.
* [Replit이 AI 생성 코드를 보호하는 방법](https://blog.replit.com/securing-ai-generated-code)을 읽어보세요.
