{"meta":{"title":"첫 번째 코드 취약성 찾기 및 수정","intro":"데모 리포지토리에서 경고를 해결하여 code scanning 코드 보안의 기본 사항을 알아봅니다.","product":"시작하기","breadcrumbs":[{"href":"/ko/get-started","title":"시작하기"},{"href":"/ko/get-started/learning-to-code","title":"코딩 학습"},{"href":"/ko/get-started/learning-to-code/finding-and-fixing-your-first-code-vulnerability","title":"코드 보안"}],"documentType":"article"},"body":"# 첫 번째 코드 취약성 찾기 및 수정\n\n데모 리포지토리에서 경고를 해결하여 code scanning 코드 보안의 기본 사항을 알아봅니다.\n\n코딩을 학습할 때 실수로 프로젝트에 취약성을 가져오는 것은 정상입니다. 작업을 공유하기 전에 이러한 보안 문제가 해결되지 않으면 공격자는 이러한 문제를 사용하여 코드를 조작하고 중요한 데이터에 액세스할 수 있으므로 가능한 빨리 문제를 식별하고 패치하는 것이 중요합니다.\n\n고맙게도 공용 리포지토리에서 취약성을 자동으로 찾고, 설명하고, 수정하는 도구 code scanning 가 있습니다. 이 자습서에서는 작업을 안전하게 유지하는 방법을 알아봅니다 code scanning.\n\n## 데모 리포지토리 설정\n\n먼저 보안 취약성이 있는 데모 프로젝트를 포크해 보겠습니다. 이 프로젝트는 간단한 웹 페이지를 빌드하지만, 프로젝트를 배포하지 않으므로, 이 연습에서는 **보안 위험이 없습니다**.\n\n1. [\n   `new2code/code-scanning-demo`\n   ](https://github.com/new2code/code-scanning-demo) 리포지토리로 이동합니다.\n2. 페이지의 오른쪽 위에서 <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-repo-forked\" aria-label=\"repo forked icon\" role=\"img\"><path d=\"M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z\"></path></svg>를 클릭합니다\\*\\*\\*\\*.\n3. 표시되는 페이지에서 **Create fork**를 클릭하세요.\n\n## 코드에서 취약성 찾기\n\n이제 프로젝트를 설정했으므로 코드의 취약성을 확인하기 위해 포크에 대해 code scanning을(를) 활성화하겠습니다.\n\n1. GitHub로 돌아가, 리포지토리의 홈페이지에서 **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-shield\" aria-label=\"shield\" role=\"img\"><path d=\"M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"></path></svg> Security and quality** 을 클릭합니다.\n2. \"Code scanning 경고\" 행에서 **\\[설정]을 code scanning** 클릭합니다.\n3. \"도구\" 섹션의 \"CodeQL 분석\" 옆에 있는 **설정을** 선택한 다음 **기본값**을 클릭합니다.\n4. 표시되는 팝업에서 **\\[활성화 CodeQL**]을 클릭합니다. 그러면 코드에서 GitHub Actions 취약성을 검사하는 워크플로가 트리거됩니다.\n5. 워크플로의 상태를 확인하려면 탐색 모음에서 <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-play\" aria-label=\"play icon\" role=\"img\"><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"></path></svg> 클릭합니다\\*\\*\\*\\*.\n6. 워크플로가 완료되면 탐색 모음에서 을 클릭합니다 **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-shield\" aria-label=\"shield\" role=\"img\"><path d=\"M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"></path></svg> Security and quality**.\n7. 워크플로에서 code scanning 검색한 경고를 보려면 측면 탐색에서 <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-codescan\" aria-label=\"codescan icon\" role=\"img\"><path d=\"M8.47 4.97a.75.75 0 0 0 0 1.06L9.94 7.5 8.47 8.97a.75.75 0 1 0 1.06 1.06l2-2a.75.75 0 0 0 0-1.06l-2-2a.75.75 0 0 0-1.06 0ZM6.53 6.03a.75.75 0 0 0-1.06-1.06l-2 2a.75.75 0 0 0 0 1.06l2 2a.75.75 0 1 0 1.06-1.06L5.06 7.5l1.47-1.47Z\"></path><path d=\"M12.246 13.307a7.501 7.501 0 1 1 1.06-1.06l2.474 2.473a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM1.5 7.5a6.002 6.002 0 0 0 3.608 5.504 6.002 6.002 0 0 0 6.486-1.117.748.748 0 0 1 .292-.293A6 6 0 1 0 1.5 7.5Z\"></path></svg>**Code scanning** 을 클릭한 후, **반사형 교차 사이트 스크립팅**을 클릭합니다.\n\n## 경고 사항 이해하기\n\ncode scanning 이제 코드의 취약성을 확인했으므로 경고에 제공된 정보를 세어보겠습니다.\n\n### 위치\n\n경고는 취약성을 만드는 코드 줄 중앙에 파일의 작은 미리 보기를 표시합니다. 이 경우, 취약성은 `index.js` 파일의 8줄에서 감지되었고, 사이트에 사용자가 제공한 입력을 구현합니다.\n\n자세히 살펴보면 악성 코드를 확인하지 않고 `greet`를 사용자 입력에 할당할 때 7줄에서 기본 문제가 발생하는 것을 확인할 수 있습니다. 코드의 취약성에 대한 단계별 보기를 보려면 취약성 줄 아래 설명선에서 **Show paths**를 클릭하세요.\n\n![code scanning 경고가 있는 위치의 스크린샷. \"Show paths\" 단추는 주황색 윤곽선으로 표시됩니다.](/assets/images/help/repository/code-scanning-alert-location-learners.png)\n\n### 설명 및 권장 사항\n\n파일 미리 보기 code scanning 아래에서 취약성에 대한 자세한 설명을 제공합니다. 권장 수정 사항과 취약하고 고정된 코드의 예를 보려면 **자세히**<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-chevron-down\" aria-label=\"chevron down icon\" role=\"img\"><path d=\"M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z\"></path></svg> 표시를 클릭합니다.\n\n![code scanning 경고의 세부 정보에 대한 스크린샷. \"Show more\"라는 레이블이 지정된 드롭다운이 주황색 윤곽선으로 표시됩니다.](/assets/images/help/repository/code-scanning-alert-details-learners.png)\n\n이 경우, 사용자 입력을 사용하기 전에 정화하는 것이 좋습니다. 즉, 악성 코드에 대한 입력을 확인한 다음 필요한 경우 정리해야 합니다.\n\n> \\[!TIP] 권장 수정 사항을 완전히 이해하지 못하는 경우 설명 [해 달라고 요청 Copilot Chat](https://github.com/copilot) 하세요.\n\n### 타임라인\n\n마지막으로 페이지 아래쪽에서 경고의 타임라인을 볼 수 있습니다. 타임라인에는 취약성이 처음 감지된 커밋이 포함되며 취약성을 수정하면 자동으로 업데이트됩니다.\n\n![code scanning 경고의 타임라인에 대한 스크린샷.](/assets/images/help/repository/code-scanning-alert-timeline-learners.png)\n\n## 자동으로 취약성 수정\n\n프로젝트를 빠르고 쉽게 보호하려면 code scanning에 GitHub Copilot Autofix를 사용합시다.\n\n1. 경고 제목 아래에서 \"이 경고의 수정 속도를 높이려면 Copilot Autofix을(를) 사용하십시오\"라는 제안 상자가 있습니다. <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-shield-check\" aria-label=\"shield check icon\" role=\"img\"><path d=\"m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z\"></path></svg>을 클릭하십시오.\n2. 수정 제안을 생성한 후에 Copilot 는 제안된 변경 내용을 설명하고, 변경 내용의 미리 보기를 렌더링하고, 추가된 종속성을 호출합니다. \\*\\*\\\n   잠시 시간을 내어 Copilot의 작품을 읽어보십시오.\n3. 수정을 사용하여 끌어오기 요청을 만들려면 **Commit to new branch**를 클릭한 다음, **Commit change**를 클릭하세요.\n4. 초안 끌어오기 요청이 만들어지면 페이지 아래쪽에서 **Ready for review**를 클릭하여 병합할 수 있도록 합니다.\n5. 수정을 적용하려면 **Merge pull request**를 클릭한 다음 **Confirm merge**를 클릭하세요.\n\n   끌어오기 요청이 병합되고 워크플로가 code scanning 다시 실행되면 경고가 자동으로 닫히고 취약성을 수정하는 커밋이 타임라인에 추가됩니다.\n\n> \\[!NOTE] 실제 프로젝트에서는 코드를 커밋하기 전에 항상 제안된 Copilot 변경 내용을 검토해야 합니다.\n\n## 다음 단계\n\n이제 데모 리포지토리를 code scanning 사용해 보았으므로 **사용자 고유의 프로젝트에서 이를 사용하도록 설정** 하여 현재 및 미래의 취약성을 빠르게 찾아 수정할 수 있습니다.\n\n이제 직접 작성한 코드의 보안을 확보했으니, 다음 단계로 넘어가 **종속성**의 보안 상태도 확인해 보세요.\n[첫 번째 종속성 취약성 찾기 및 수정하기](/ko/get-started/learning-to-code/finding-and-fixing-your-first-dependency-vulnerability)을(를) 참조하세요."}