07·개념·10분

공격과 방어

웹 앱에 대한 대부분의 공격은 영리하지 않습니다. 자동화되어 있고, 값싸며, 인터넷의 모든 사이트를 한꺼번에 노립니다. 각각에는 표준 방어가 있습니다.

인젝션

공격자가 폼에 입력한 내용을 앱이 데이터베이스 쿼리나 페이지에 붙여 넣습니다. 입력이 명령의 일부가 되면 데이터를 읽거나 지우거나(SQL 인젝션) 다른 방문자의 브라우저에서 스크립트를 실행할 수 있습니다(XSS). 방어: 텍스트로 명령을 만들지 않기. 쿼리를 파라미터화하고, 페이지에 렌더링되는 모든 것을 이스케이프합니다.

무차별 대입과 크리덴셜 스터핑

비밀번호를 추측하거나, 다른 사이트에서 유출된 이메일과 비밀번호 쌍을 그대로 시도하는 것. 방어: 로그인 속도 제한, 반복 실패 시 잠금, 가장 흔한 추측을 배제하는 비밀번호 정책, 그리고 유출된 비밀번호로는 통과할 수 없는 인증 앱의 2차 요소 MFA.

봇

가짜 계정 수천 개를 만들고, 가격을 긁어 가고, 스팸을 제출하는 스크립트. 방어: 중요한 폼(로그인, 가입, 비밀번호 재설정)의 봇 확인과 주소별 속도 제한.

서비스 거부

실제 요청에 답할 수 없을 때까지 요청을 쏟아붓는 것. 방어: 앱 앞의 WAF(웹 애플리케이션 방화벽). 공격 패턴과 악성 주소를 인식해 서버에 닿기 전에 차단합니다.

시크릿

조용한 실패: 저장소에 커밋된 API 키, 페이지에 들어간 데이터베이스 비밀번호. 방어: 시크릿은 서버에만 두고, 키는 해시만 저장하며, 먼저 취소하고 나중에 조사합니다.

DontCode에서는

플랫폼 WAF가 공격을 자동으로 차단하고, 분석 페이지에서 무엇을 막았는지 보여줍니다. 사용자의 보안 페이지에서 스위치 하나로 로그인, 가입, 비밀번호 재설정의 봇 확인을 켤 수 있고, 비밀번호 정책과 2단계 인증 설정도 같은 페이지에 있습니다. 공개 API를 거치는 쿼리는 서버에서 파라미터화되고, OAuth 시크릿은 쓰기 전용이며, API 키는 해시로 저장됩니다.

더 알아보기

이해도 확인

  1. 1.SQL 인젝션에 대한 표준 방어는?

  2. 2.공격자가 다른 사이트에서 유출된 이메일과 비밀번호 쌍 목록을 갖고 있습니다. 맞는 쌍이 통하지 않게 하는 방어는?

  3. 3.WAF는 어디에 있을까요?

  4. 4.공개 저장소에서 API 키를 발견했습니다. 첫 번째 할 일은?