SQL - 문제 미리보기
문제 1803
medium
SQL Injection을 방지하는 안전한 코드 방식은?
```sql
-- 위험한 코드:
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
-- 안전한 코드:
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = _______";
db.Execute(txtSQL, txtUserId);
```
```sql
-- 위험한 코드:
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
-- 안전한 코드:
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = _______";
db.Execute(txtSQL, txtUserId);
```
정답: B
⦁ SQL 매개변수(Parameter)의 개념:
⦁ 실행 시점에 안전하게 값을 전달하는 방식
⦁ SQL 엔진이 데이터와 코드를 분리하여 처리
⦁ 악의적인 SQL 코드가 명령어로 해석되지 않음
⦁ `@0` 매개변수 방식:
```sql
-- 1단계: 매개변수 자리표시자로 SQL 작성
"SELECT * FROM Users WHERE UserId = @0"
-- 2단계: 실행 시 안전하게 값 전달
db.Execute(txtSQL, txtUserId);
```
⦁ 매개변수 사용의 장점:
⦁ SQL 구조 변경 불가: 입력값이 데이터로만 처리됨
⦁ 자동 이스케이프: 특수문자가 자동으로 안전하게 처리
⦁ 타입 검증: 컬럼 타입에 맞는 값인지 자동 확인
⦁ 다른 언어/프레임워크의 매개변수:
⦁ ASP.NET: `@0`, `@1`, `@2`...
⦁ PHP PDO: `:name`, `:email`
⦁ Java PreparedStatement: `?`
⦁ Python: `%s`, `?`
💡 학습 팁
이 문제를 포함한 SQL 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.