AI가 생성한 코드를 배포해도 안전할까요? 확인해야 할 것과 두 번째 AI가 잡아내는 오류
요약
AI 생성 코드는 작동할 수 있지만, 보안 취약점 검사가 필수적입니다. API 키 노출, 파라미터화되지 않은 쿼리 사용 등 흔한 오류 유형을 인지하고, 다른 AI 모델의 '두 번째 검토'를 통해 잠재적인 위험 요소를 사전에 발견해야 합니다.
핵심 포인트
- API 키나 비밀번호 같은 민감 정보는 코드에 직접 포함하지 않아야 합니다.
- 사용자 입력값을 데이터베이스 쿼리에 바로 붙이는 것은 SQL 인젝션 위험이 있습니다. 파라미터화된 쿼리를 사용하세요.
- AI가 만든 코드는 스스로 검사할 수 없으므로, 다른 모델 계열의 리뷰를 거치는 것이 안전합니다.
- SPOE와 같은 도구는 배포 전 다양한 보안 취약점을 무료로 스캔하고 수정할 기회를 제공합니다.
원래 the SPOE blog에 게시되었습니다.
AI가 작성한 코드는 보통 작동합니다. 하지만 그것이 안전한지는 별개의 문제입니다. 그리고 그 답은 모델 자체보다는 사용자의 눈앞에 도달하기 전에 코드를 어떤 검사를 거치는지에 달려 있습니다.
좋은 소식은, 실수들이 예측 가능하다는 것입니다. 같은 몇 가지 유형의 실수가 반복적으로 나타나며, 대부분은 개발자가 코드 한 줄을 읽지 않고도 잡아낼 수 있습니다.
중요한 오류들
코드 속 비밀 정보. API 키, 데이터베이스 비밀번호 또는 결제 키를 파일에 그대로 붙여넣는 경우입니다. 일단 그 파일이 공개 저장소에 올라가거나 브라우저로 배포되면, 누구나 그 키를 사용할 수 있습니다. 이것은 가장 흔하고 가장 비용이 많이 드는 문제입니다.
텍스트로 만들어진 데이터베이스 쿼리. 코드가 사용자가 입력한 내용을 별도로 전달하는 대신 데이터베이스 쿼리에 직접 붙여 넣을 때, 조작된 입력을 통해 본인의 것이 아닌 데이터를 읽거나 삭제할 수 있습니다. 해결책은 지루하고 표준적입니다: 파라미터화된 쿼리(parameterised queries)를 사용해야 합니다.
누구인지 묻지 않고 데이터를 변경하는 라우트. 주소만 알면 누구나 기록을 삭제하거나 가격을 변경할 수 있는 페이지나 엔드포인트가 있습니다.
사용자로부터의 원시 HTML(Raw HTML). 방문자가 입력한 내용을 HTML로 표시하게 하면, 그들이 다른 사람들의 브라우저에서 자신만의 스크립트를 실행하도록 할 수 있게 합니다.
모든 사이트에서 허용되는 쿠키. 다른 웹사이트가 로그인된 사용자로서 귀하를 대신하여 행동할 수 있도록 하는 느슨한 설정입니다.
검색 엔진이 읽을 수 없는 페이지. 보안 취약점은 아니지만, AI로 구축된 사이트는 제목(title), 설명(description) 또는 사이트맵(sitemap) 없이 배포되는 경우가 많으며, 그러면 아무도 그 사이트를 찾지 못하게 됩니다.
같은 AI가 자신의 작업을 검사해서는 안 되는 이유
코드 작성 모델에게 안전한지 물어보면, 그것은 자신과 동의하는 경향이 있습니다. 즉, 실수를 만들어낸 맹점(blind spots)을 공유하기 때문입니다. 다른 모델 계열의 리뷰어가 변화를 새롭고 다르게 습관화된 시각으로 읽으면, 그 차이를 발견할 수 있습니다. 이는 작가가 자신의 책을 교정하지 않는 것과 같은 이유입니다.
SPOE가 하는 일
두 번째 AI가 모든 변경 사항을 검토합니다. 빌더가 만드는 모든 변경 사항은 프로젝트에 적용되기 전에 다른 계열의 모델에 의해 검토됩니다. 검토 과정에서 심각한 문제가 발견되면, 해당 변경 사항은 그대로 들어가지 않고 나란히 비교되는(side-by-side diff) 상태로 대기하며, 한 번의 클릭으로 발견된 내용을 수정하도록 되돌릴 수 있습니다. 시간 초과되거나 실패하는 검토는 절대 통과로 간주되지 않습니다.
배포 전에 확인하세요. 무료입니다. Check 버튼은 AI나 크레딧을 사용하지 않고 스캔을 실행합니다. 코드 내의 키, 텍스트로 생성된 SQL, 원시 HTML, 모든 사이트에서 허용하는 쿠키, 로그인 없이 데이터를 변경하는 라우트, 그리고 검색 엔진이 놓칠 수 있는 부분까지 확인합니다. 심각한 발견 사항은 사용자가 결정할 때까지 게시를 보류하며, 그 결정은 기록됩니다. 동일한 체크 기능은 앱이 존재하는 한 사용자 자신의 기기나 CI 환경에서 실행할 수 있도록 모든 내보내기(export)에 check.mjs로 포함됩니다.
비밀 정보는 코드에서 분리됩니다. 사용자가 추가하는 키는 프로젝트의 금고(vault)에 봉인되어 저장되며, 앱 서버에는 환경 변수(environment variables)로 전달됩니다. 빌더에게는 키의 이름만 알려지고, 값은 절대 노출되지 않습니다.
모든 변경 사항은 버전입니다. 만약 무언가 누락된 것이 있더라도 한 번의 클릭으로 롤백할 수 있습니다.
여전히 당신의 역할이 남아있습니다
어떤 검사 도구도 모든 것을 찾아내지 못합니다. AI 또는 사람이 만든 앱에 실제 고객 데이터를 넣기 전에 다음을 수행해야 합니다:
- 로그아웃 상태에서 모든 페이지를 클릭해보고, 접근해서는 안 되는 곳에 도달할 수 있는지 시도합니다.
- 의미 없는 내용, 매우 긴 텍스트, 특이한 문자로 양식을 테스트해봅니다.
- Check가 발견한 내용을 살펴보고 심각한 문제들을 수정합니다.
- 키는 금고(vault)에 보관하고, 빌더에게 메시지로 절대 보내지 않습니다.
- 돈이나 개인 데이터를 처리하는 부분은 기술적인 사람이 읽어봅니다.
AI는 구축 속도를 높여줍니다. Check 기능이 배포할 수 있는 안전성을 확보해 줍니다. 무료로 시작하기를 통해 첫 빌드에 Check를 실행하거나, 다른 빌더들과 SPOE가 어떻게 비교되는지 여기서 확인하세요를 읽어보세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기