SQL Injection 공격이란 무엇이며, 어떻게 예방할 수 있나요?
힌트 · Prepared Statement, ORM 사용, 입력값 검증의 중요성을 설명해보세요.
모범답안
SQL Injection은 웹 애플리케이션의 보안 취약점 중 하나로, 사용자가 입력한 값을 제대로 검증하지 않고 SQL 쿼리에 포함시켜 데이터베이스를 공격하는 방식입니다. 공격자는 악의적인 SQL 코드를 삽입하여 데이터베이스의 정보를 탈취하거나 변조, 심지어 삭제까지 할 수 있습니다.
SQL Injection을 예방하는 가장 효과적인 방법은 Prepared Statement를 사용하는 것입니다. Prepared Statement는 SQL 쿼리의 구조와 데이터를 분리하여, 사용자 입력 값을 쿼리 문자열이 아닌 파라미터로 전달합니다. 이렇게 하면 입력 값이 SQL 코드로 해석될 가능성을 원천적으로 차단할 수 있습니다.
ORM(Object-Relational Mapping) 프레임워크를 사용하는 것도 좋은 방법입니다. ORM은 데이터베이스 쿼리를 직접 작성하는 대신 객체 지향적인 방식으로 데이터베이스를 다루도록 도와주므로, SQL Injection 공격의 위험을 줄여줍니다.
또한, 사용자 입력 값에 대한 철저한 검증은 필수적입니다. 허용된 문자만 사용하도록 제한하거나, 특수 문자를 필터링하는 등의 방법을 통해 악의적인 입력 값을 차단해야 합니다. 데이터베이스 계정에 필요한 최소한의 권한만 부여하는 것도 SQL Injection 공격으로 인한 피해를 최소화하는 데 도움이 됩니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 웹 보안 면접 질문
- XSS(Cross-Site Scripting) 공격이란 무엇이며, 어떻게 방어할 수 있나요?
- CSRF(Cross-Site Request Forgery) 공격이란 무엇이며, 방어 방법을 설명해주세요.
- 인증(Authentication)과 인가(Authorization)의 차이를 설명하고, 구체적인 예시를 들어주세요.
- 인증(Authentication)에서 '신원 확인'과 인가(Authorization)에서 '권한 확인'은 각각 어떤 정보를 기준으로 판단하나요? 로그인 이후 매 요청마다 이 두 가지가 어떻게 적용되는지 설명해주세요.
- 역할 기반 접근 제어(RBAC)란 무엇이며, 사용자에게 권한을 직접 부여하는 방식과 비교해 어떤 장점이 있나요?