SQL 인젝션 테스터

SQL 인젝션 공격을 이해하고 매개변수화된 쿼리로 방지하는 방법을 배우기 위한 교육용 도구

모든 처리는 브라우저에서 이루어집니다. 데이터가 업로드되지 않습니다.
Offline Ready

SQL 인젝션 테스터

SQL 인젝션 공격을 이해하고 매개변수화된 쿼리로 방지하는 방법을 배우기 위한 교육용 도구

🔒모든 처리는 브라우저에서 이루어집니다. 데이터가 업로드되지 않습니다.
쿼리 템플릿
SELECT (Login)
사용자 입력 (시뮬레이션)
시뮬레이션된 사용자 입력을 입력하여 SQL 쿼리에 미치는 영향을 확인하세요...
일반적인 SQL 인젝션 페이로드
취약한 쿼리 (문자열 연결)
안전하지 않음 - 프로덕션에서 사용하지 마세요
SELECT * FROM users WHERE username = 'user_input_here' AND password = 'pass123'
안전한 매개변수화 대안
Node.js (mysql2)
const [rows] = await connection.execute(
  'SELECT * FROM users WHERE username = ? AND password = ?',
  [username, password]
);
Python (psycopg2)
cursor.execute(
    "SELECT * FROM users WHERE username = %s AND password = %s",
    (username, password)
)
Java (PreparedStatement)
PreparedStatement ps = conn.prepareStatement(
    "SELECT * FROM users WHERE username = ? AND password = ?"
);
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
C# (SqlParameter)
using var cmd = new SqlCommand(
    "SELECT * FROM users WHERE username = @user AND password = @pass",
    connection
);
cmd.Parameters.AddWithValue("@user", username);
cmd.Parameters.AddWithValue("@pass", password);
PHP (PDO)
$stmt = $pdo->prepare(
    'SELECT * FROM users WHERE username = :user AND password = :pass'
);
$stmt->execute(['user' => $username, 'pass' => $password]);
SQL 인젝션 방지 모범 사례
1
SQL에 문자열 연결 대신 항상 매개변수화된 쿼리 (prepared statements)를 사용하세요.
2
매개변수화된 쿼리를 자동으로 생성하는 ORM(Sequelize, SQLAlchemy, Entity Framework)을 사용하세요.
3
최소 권한 원칙을 적용하세요: 데이터베이스 계정은 필요한 권한만 가져야 합니다.
4
매개변수화할 수 없는 동적 식별자(열 이름, 테이블 이름)에는 허용 목록을 사용하세요.
5
입력 유효성 검사를 심층 방어 수단으로 구현하되, 유일한 보호 수단으로 의존하지 마세요.
6
WAF(웹 애플리케이션 방화벽) 규칙을 활성화하고 SQL 인젝션 시도 패턴에 대한 로그를 모니터링하세요.