{% extends "base.html" %} {% block title %}{{ project }} — CPGuard{% endblock %} {% block head %} {% endblock %} {% block content %}

{{ project }}

프로젝트 · 스캔 {{ scans|length }}회 · 최근 {{ latest.created_at|date:"Y-m-d H:i" }} 최신 스캔 자세히 새 스캔 업로드

보안 상태 — 배지를 누르면 아래 탐색기에서 해당 위험도만 봅니다

{{ latest.open_count }} 건 조치대상 / 탐지 {{ latest.finding_count }} {% for sev, n in counts.items %}{{ sev|upper }} {{ n }}{% endfor %} {% if prev %} | 이전 스캔 대비 신규 +{{ new_count }} 해결 −{{ resolved_count }} {% if risk_delta > 0 %}▲ 위험 증가 (+{{ risk_delta }}){% elif risk_delta < 0 %}▼ 위험 감소 ({{ risk_delta }}){% else %}— 변화 없음{% endif %} {% else %} 첫 스캔 — 다음 스캔부터 신규/해결을 비교합니다 {% endif %} 감사 완료 {{ audited }}/{{ latest.finding_count }}
감사 상태 취약 확정 {{ audit_summary.confirmed|default:0 }} 오탐 {{ audit_summary.false_positive|default:0 }} 조치완료 {{ audit_summary.fixed|default:0 }} 보류 {{ audit_summary.deferred|default:0 }} 미확인 {{ audit_summary.unaudited|default:0 }} 오탐·보류·조치완료는 조치대상에서 빠집니다
{% if latest.integrity_note %}
스캔 무결성: {{ latest.integrity_note }}
{% endif %} {% if latest.language_stats %} {% for r in latest.language_stats %} {% endfor %}
개발언어파일라인 탐지밀도
{{ r.language }} {{ r.files }} {{ r.lines }} {{ r.issues }} {{ r.density }}
{% endif %}
진단 제외 설정{% if setting %} · 경로 {{ setting.glob_list|length }} · 규칙 {{ setting.rule_list|length }}{% endif %}
{% csrf_token %}
다음 진단부터 적용됩니다{% if applied_excludes %} · 최근 진단에 적용된 경로 {{ applied_excludes|length }}개{% endif %}
최근 진단 수행 조건 · 규칙 조정 {{ tuned_specs|length }}건 · SCA {% if sca_done %}수행{% else %}미수행{% endif %}
사용자 규칙 조정 — {% if tuned_specs %}동봉 규칙 위에 겹쳐 적용됨: {% for s in tuned_specs %}{{ s }}{% if not forloop.last %}, {% endif %}{% endfor %} {% else %}없음. 오탐이 나는 규칙은 ~/.cpguard/specs/ 에 같은 id 의 yml 을 두면 sink·sanitizer 를 더하거나 위험도를 낮출 수 있습니다 (제외보다 정밀합니다).{% endif %}
오픈소스 컴포넌트(SCA) — {% if sca_note %}{{ sca_note }} {% else %}이번 진단에서는 수행하지 않았습니다. 업로드 화면에서 켤 수 있습니다 (패키지명·버전이 OSV.dev 로 전송됩니다).{% endif %}
{% if sca_done %}
직전 진단과 SCA 수행 여부가 다르면 오픈소스 항목은 신규/해결 비교에서 제외됩니다 — 점검하지 않은 것을 조치했다고 셀 수 없기 때문입니다.
{% endif %}

우선 조사 대상 — 신규 → 위험도 순, 감사 안 된 것만

{% for f in priority %}
{# SCA 탐지는 규칙 id 가 전부 같다. 구분되는 것은 컴포넌트와 CVE 다. #} {% if f.category == "dependency" and f.matched_value %}{{ f.matched_value }}{% else %}{{ f.rule_id }}{% endif %} {% if prev and f.fp in new_fps %}NEW{% endif %} · {{ f.cwe }}
{{ f.file }}:{{ f.line }}
{{ f.severity|upper }}
{% empty %}

감사되지 않은 이슈가 없습니다.

{% endfor %}

최근 스캔

상태
{% if latest.integrity_note %}⚠ 부분 완료{% else %}✔ 완료{% endif %}
일시
{{ latest.created_at|date:"Y-m-d H:i" }}
파일
{{ latest.file_count }}
탐지
{{ latest.finding_count }}
업로드
{{ latest.name }}
자세히 분석목록표 SARIF

위험도 추세 — 스캔별 누적

{% for t in trend %}
{{ t.total }}
{% for sev, n in t.counts.items %}
{% endfor %}
{% endfor %}
{% for t in trend %}
{{ t.when|date:"m/d" }}
{% endfor %}
심각 높음 중간 낮음 정보· 막대 클릭 시 해당 스캔으로

취약점 탐색 — 위험도·규칙·CWE 분포와 전체 목록(필터·페이지네이션)

위험도 분포

상위 규칙 (클릭 = 필터)

상위 CWE

전체 심각 높음 중간 낮음 정보
위험도규칙 CWE / OWASP위치종류LLM
불러오는 중…

스캔 이력

{% for s in scans %} {% endfor %}
일시업로드파일탐지신규해결위험도
{{ s.created_at|date:"Y-m-d H:i" }} {{ s.name }} {{ s.file_count }} {{ s.finding_count }} {% if s.new_count %}+{{ s.new_count }}{% else %}—{% endif %} {% if s.resolved_count %}−{{ s.resolved_count }}{% else %}—{% endif %} {% for sev, n in s.open_severity_counts.items %}{{ sev|upper }} {{ n }} {% endfor %}
{% csrf_token %}
{% endblock %}