오늘은 SQL Injection 편에 이어서 심화 과정에 대해 다뤄보겠습니다.
이 글을 통해 누구나 이해할 수 있는 정도로 전문적인 내용을 제공할 예정이며, 실제 심화 예제 구문도 함께 소개하겠습니다.
1. 소개
SQL Injection은 악의적인 사용자가 웹 응용 프로그램에 악의적인 SQL 코드를 삽입하여 데이터베이스를 조작하거나 노출시키는 공격 기법입니다. 이번 글에서는 이러한 공격 기법을 더 깊이있게 이해하고, 모의해커들도 이해할 수 있을 만큼 전문적인 내용을 제공하려고 합니다.
2. SQL Injection 기본 개념
SQL Injection은 주로 웹 애플리케이션에서 발생하며, 입력 폼 등을 통해 사용자로부터 입력받은 데이터를 적절히 검증하지 않아 공격자가 악의적인 SQL 문을 삽입할 수 있는 상황을 만들어냅니다. 이러한 취약점을 이용한 공격으로 데이터베이스의 정보를 탈취하거나 조작할 수 있습니다.
3. SQL Injection의 위험성
SQL Injection 공격은 데이터 유출 뿐만 아니라 데이터베이스의 기밀성, 무결성, 가용성을 모두 침해할 수 있습니다. 공격자는 악의적인 SQL 코드를 삽입하여 데이터베이스의 내용을 삭제하거나 수정할 수 있으며, 이는 비즈니스에 큰 영향을 미칠 수 있습니다.
4. 실전 SQL Injection 예제와 공격 종류
4.1 Blind SQL Injection
Blind SQL Injection은 결과를 직접 확인하지 못하는 상황에서 공격을 수행하는 기법입니다. 이러한 상황에서 공격자는 참과 거짓 여부를 판단하여 데이터베이스의 정보를 추측하고 노출시킵니다.
예를 들어, 로그인 페이지의 입력 폼에 아이디와 패스워드를 입력하는 경우를 생각해보겠습니다.
SELECT * FROM users WHERE username = 'admin' AND password = 'password123'
만약 위와 같은 쿼리가 사용된다면, 공격자는 입력 폼에 다음과 같은 값을 입력할 수 있습니다.
아이디: admin' AND 1=1--
패스워드: 무시
이 경우, 쿼리는 아래와 같이 해석됩니다.
SELECT * FROM users WHERE username = 'admin' AND password = '' AND 1=1--
결과적으로, ‘AND 1=1’ 부분이 참이므로 로그인이 성공하게 됩니다. 이와 반대로, 공격자가 아래와 같은 값을 입력한다면 어떨까요?
아이디: admin' AND 1=2--
패스워드: 무시
이 경우 쿼리는 다음과 같이 해석됩니다.
SELECT * FROM users WHERE username = 'admin' AND password = '' AND 1=2--
이번에는 ‘AND 1=2’ 부분이 거짓이므로 로그인은 실패하게 됩니다. 공격자는 이와 같은 방법으로 데이터베이스의 정보를 추측하고 노출시킬 수 있습니다.
4.2 Union-based SQL Injection
Union-based SQL Injection은 UNION 연산을 활용하여 데이터베이스의 정보를 노출시키는 공격입니다. UNION 연산은 두 개의 결과 집합을 결합하는데 사용되며, 공격자는 이를 이용하여 다른 테이블의 정보를 가져올 수 있습니다.
예를 들어, 아래와 같은 쿼리가 있다고 가정해봅시다.
SELECT title, content FROM articles WHERE id = 1
공격자는 입력 폼에 다음과 같은 값을 입력하여 UNION 연산을 수행할 수 있습니다.
아이디: 1 UNION SELECT username, password FROM users--
패스워드: 무시
이 경우, UNION 연산을 통해 articles 테이블의 결과와 users 테이블의 결과가 결합되어 출력됩니다. 공격자는 이를 통해 데이터베이스의 다른 테이블에 접근하여 정보를 노출시킬 수 있습니다.
4.3 Error-based SQL Injection
Error-based SQL Injection은 데이터베이스에서 발생하는 에러 메시지를 활용하여 정보를 추출하는 공격입니다. 공격자는 에러 메시지에 포함된 정보를 분석하여 데이터베이스의 구조와 내용을 파악할 수 있습니다.
예를 들어, 아래와 같은 쿼리가 있다고 가정해봅시다.
SELECT name, age FROM employees WHERE id = 5
공격자는 입력 폼에 다음과 같은 값을 입력하여 에러를 유발시킬 수 있습니다.
아이디: 5 AND 1=CONVERT(int, (SELECT @@version))--
패스워드: 무시
이 경우, SELECT @@version 부분에서 에러가 발생하며, 데이터베이스의 버전 정보가 에러 메시지에 포함됩니다. 공격자는 이와 같은 방법으로 데이터베이스의 구조와 내용을 추측하고 노출시킬 수 있습니다.
위의 예제들을 통해 Blind SQL Injection, Union-based SQL Injection, Error-based SQL Injection에 대한 공격 기법을 더 자세히 살펴보았습니다. 이러한 기법들은 공격자가 데이터베이스의 정보를 노출시키거나 조작하는 데 사용할 수 있으며, 웹 애플리케이션의 보안 강화가 필요한 이유입니다. 실제 시나리오에서 이러한 공격을 예방하고 대응하는 방법에 대해서는 뒷부분에서 자세히 다루도록 하겠습니다.
5. SQL Injection 방어 방법
SQL Injection 공격으로부터 웹 애플리케이션을 보호하기 위해 다양한 방어 방법을 적용할 수 있습니다. 아래에서는 입력 값 검증과 정제, Prepared Statements 사용, 그리고 ORM 프레임워크 활용에 대해 더 자세히 알아보겠습니다.
5.1 입력 값 검증과 정제
입력 값의 검증과 정제는 공격자가 악의적인 SQL 코드를 삽입하는 것을 방지하기 위한 첫 번째 방어 수단입니다. 사용자로부터의 입력을 받을 때 반드시 다음과 같은 단계를 수행해야 합니다.
- 유효성 검사: 입력 값이 예상한 형식과 유형에 맞는지 확인합니다. 정규 표현식 등을 사용하여 유효성을 검사할 수 있습니다.
- 화이트리스트 필터링: 허용된 문자와 값만 허용하도록 입력 값을 필터링합니다. 허용되지 않는 문자나 값은 거부됩니다.
- 이스케이프: SQL 특수 문자를 이스케이프하여 그 의미를 변경하지 못하도록 합니다. 예를 들어, 작은따옴표는 작은따옴표 두 개로 변환하여 SQL 쿼리에 영향을 미치지 않도록 합니다.
5.2 Prepared Statements 사용
Prepared Statements는 SQL Injection 공격을 예방하기 위한 강력한 방법 중 하나입니다. Prepared Statements는 입력 값을 포함하지 않는 쿼리 템플릿을 미리 준비한 후, 입력 값은 나중에 바인딩하여 실행하는 방식입니다. 이를 통해 입력 값이 SQL 쿼리에 직접 삽입되지 않아 공격자가 악의적인 코드를 삽입하는 것을 방지할 수 있습니다.
예를 들어, PHP에서 Prepared Statements를 사용하는 예제는 다음과 같습니다.
$stmt = $pdo->prepare("SELECT username FROM users WHERE id = :id");
$stmt->bindParam(':id', $input_id);
$stmt->execute();
5.3 ORM 프레임워크 활용
ORM(객체-관계 매핑) 프레임워크를 활용하면 데이터베이스와 상호 작용할 때 SQL 쿼리를 직접 작성하지 않아도 됩니다. ORM은 객체 지향 프로그래밍 언어와 데이터베이스 간의 매핑을 자동으로 처리하여 SQL Injection 공격을 예방할 수 있습니다.
예를 들어, Django ORM을 사용하는 Python 코드는 다음과 같습니다.
from myapp.models import User
users = User.objects.raw('SELECT * FROM myapp_user WHERE username = %s', [input_username])
ORM 프레임워크를 사용하면 SQL Injection 공격에 대한 보안성을 높일 수 있으며, 데이터베이스 조작을 간편하게 수행할 수 있습니다.
위의 방어 방법들을 통해 SQL Injection 공격으로부터 웹 애플리케이션을 보호할 수 있습니다. 하지만 이외에도 다양한 방법들이 있으니, 항상 보안 최신 동향을 주시하며 웹 애플리케이션의 보안을 강화하는 것이 중요합니다.
6. 고급 SQL Injection 기법
SQL Injection 공격은 다양한 고급 기법을 사용하여 보다 정교하고 감지하기 어려운 공격을 수행할 수 있습니다. 아래에서는 Time-based Blind Injection, Second-Order Injection, 그리고 Out-of-Band Injection에 대해 더 자세히 알아보겠습니다.
6.1 Time-based Blind Injection
Time-based Blind Injection은 결과를 기다리는 동안 시간 지연을 이용하여 데이터베이스의 정보를 추측하는 공격입니다. 공격자는 조건이 참일 때 지연되는 쿼리를 삽입하여 데이터베이스의 정보를 확인합니다.
예를 들어, 아래와 같은 쿼리가 있다고 가정해봅시다.
SELECT product_name FROM products WHERE product_id = '입력값';
공격자는 아래와 같은 값을 입력하여 Time-based Blind Injection을 시도할 수 있습니다.
입력값: ' AND IF(1=1, SLEEP(5), 0)--
이 경우, 조건 1=1이 참이므로 SLEEP 함수에 의해 5초 동안 지연이 발생합니다. 공격자는 이를 통해 데이터베이스의 정보를 추측할 수 있습니다.
6.2 Second-Order Injection
Second-Order Injection은 공격자가 초기에는 삽입한 악의적인 코드가 실행되지 않으며, 나중에 다른 곳에서 실행될 때 공격이 발생하는 기법입니다. 이는 입력 값이나 사용자 상호 작용에 따라 실행 시점이 변경되는 경우에 자주 발생합니다.
예를 들어, 회원가입 페이지에서 사용되는 쿼리가 있다고 가정해봅시다.
INSERT INTO users (username, password) VALUES ('입력값', '비밀번호');
공격자는 회원가입 시에 악의적인 코드를 삽입하여 Second-Order Injection을 시도할 수 있습니다.
입력값: admin'); DELETE FROM users;--
이 경우, 초기에는 악의적인 코드가 실행되지 않으며, 나중에 데이터베이스에서 사용자 정보를 삭제하는 코드가 실행될 때 공격이 발생합니다.
6.3 Out-of-Band Injection
Out-of-Band Injection은 다른 통신 채널을 통해 결과를 수집하는 공격입니다. 예를 들어, DNS 조회나 HTTP 요청을 통해 데이터베이스의 정보를 노출시키는 방법입니다.
예를 들어, 아래와 같은 쿼리가 있다고 가정해봅시다.
SELECT username FROM users WHERE user_id = '입력값';
공격자는 아래와 같은 값을 입력하여 Out-of-Band Injection을 시도할 수 있습니다.
입력값: ' UNION SELECT username, password FROM users; --
이 경우, 데이터베이스에서 정보를 가져와 DNS 조회나 HTTP 요청을 통해 공격자의 서버로 전송됩니다.
위의 고급 SQL Injection 기법을 활용하여 정교한 공격을 수행하는 방법을 살펴보았습니다. 이러한 기법들은 공격자가 보다 감지하기 어렵게 공격을 시도할 수 있으므로, 웹 애플리케이션의 보안 강화가 더욱 중요합니다.
6.4 Time-delayed Blind Injection
Time-delayed Blind Injection은 데이터베이스의 응답 지연을 통해 공격자가 조건을 파악하는 고급 기법입니다. 공격자는 조건을 만족시킬 때 데이터베이스 응답이 지연됨을 확인하여 조건의 참/거짓 여부를 유추합니다.
이를 통해 데이터베이스의 정보를 추측하고 노출시킬 수 있습니다.
입력값: ' OR IF(1=1, SLEEP(10), 0);--
6.5 Boolean-based Blind Injection
Boolean-based Blind Injection은 데이터베이스의 논리식 참/거짓 여부를 통해 정보를 추측하는 고급 기법입니다. 공격자는 논리식을 조작하여 다른 응답을 유발하고, 이를 통해 데이터베이스의 내용을 파악합니다.
입력값: ' OR IF(1=1, 'true', 'false');--
6.6 Piggybacked Queries
Piggybacked Queries는 한 번의 SQL 쿼리 실행으로 여러 작업을 수행하는 고급 기법입니다. 공격자는 쿼리의 마지막 부분에 추가 작업을 넣어서 실행시킬 수 있습니다. 이를 통해 데이터베이스에 악의적인 동작을 수행하거나 데이터를 조작할 수 있습니다.
입력값: ' OR 1=1; DELETE FROM users WHERE user_id = 5;--
6.7 Subquery Injection
Subquery Injection은 서브쿼리를 삽입하여 데이터베이스의 다른 테이블을 참조하는 고급 기법입니다. 공격자는 서브쿼리를 이용하여 조건을 만족하는 값을 찾아내고, 데이터베이스의 정보를 노출시킬 수 있습니다.
입력값: ' OR 1=1; SELECT username FROM users WHERE user_id = (SELECT user_id FROM admins LIMIT 1);--
6.8 Time-based Blind Injection with Batched Requests
Time-based Blind Injection with Batched Requests는 다수의 쿼리를 한 번에 실행하여 데이터베이스의 지연을 이용하는 고급 기법입니다. 공격자는 한 번의 요청으로 여러 결과를 얻어내며, 데이터베이스의 정보를 유추합니다.
입력값: ' OR IF(1=1, SLEEP(5), 0); SELECT * FROM products WHERE category = 'Electronics';--
6.9 Union-based Blind Injection with Error-based Fallback
Union-based Blind Injection with Error-based Fallback은 Union 쿼리를 활용하여 데이터베이스의 정보를 추출하는 고급 기법입니다. 공격자는 Union 쿼리로 다른 테이블의 정보를 가져오고, 에러 메시지를 통해 데이터베이스의 구조와 내용을 유추합니다.
아이디 입력값: ' UNION SELECT username, email FROM users WHERE 'a'='a' AND 1=1;--
위에서 소개한 고급 SQL Injection 기법들은 실제로 시나리오를 통해 직접 실습해보며, 공격의 원리와 방어에 대한 이해를 높이는 데 도움이 될 것입니다. 이러한 공격을 방지하기 위해서는 웹 애플리케이션의 보안 강화와 적절한 입력 값 검증 등의 보안 조치가 필요합니다.
7. 실제 사례 분석
7.1 Equifax 사건
개요: Equifax는 미국의 크레딧 보고서 기관으로, 개인 신용 정보를 수집하고 관리하는 중요한 회사입니다. 2017년 5월부터 7월까지, 해커들이 Equifax의 웹 응용 프로그램에 SQL Injection 취약점을 이용하여 약 1억 4300만 명의 개인 정보를 탈취했습니다.
과정:
- 해커들은 웹 애플리케이션의 취약점을 발견하고 SQL Injection을 통해 데이터베이스에 침입합니다.
- 침입한 해커들은 데이터베이스에서 개인 정보를 추출하여 암호화되지 않은 상태로 탈취합니다.
- 해커들은 탈취한 데이터를 판매하거나 악용합니다.
- 사건이 발각되고 Equifax는 탈취된 정보가 포함된 알림을 고객에게 발송하며, 보안 조치를 취합니다.
대응 및 교훈: Equifax 사건은 취약한 웹 애플리케이션과 부족한 보안 대책이 개인 정보 유출에 어떤 영향을 미칠 수 있는지 보여주는 사례입니다. 웹 애플리케이션의 보안 강화와 적절한 보안 모니터링이 중요하며, 개인 정보의 암호화와 권한 관리 등의 보안 조치를 강화해야 합니다.
7.2 Yahoo 데이터 노출 사건
개요: Yahoo는 2013년과 2014년에 발생한 두 차례의 대규모 해킹으로 인해 약 30억 명 이상의 사용자 정보가 탈취되었습니다. 이 공격은 SQL Injection과 다른 공격 기법들의 조합으로 이루어져 있었습니다.
과정:
- 해커들은 Yahoo의 웹 응용 프로그램에 SQL Injection을 이용하여 액세스합니다.
- 해커들은 데이터베이스에서 사용자 정보를 탈취하고, 해시 함수를 통해 암호화되지 않은 비밀번호를 획득합니다.
- 이후 다양한 기술과 기법을 활용하여 사용자 정보를 유출합니다.
대응 및 교훈: Yahoo 사건은 다층 보안 대책의 중요성을 강조하는 사례입니다. SQL Injection을 비롯한 다양한 공격 기법들의 조합으로 인해 대규모 데이터 유출 사태가 발생할 수 있음을 보여줍니다. 웹 애플리케이션의 취약성을 차단하고 보안 인프라를 강화하는 것이 중요하며, 사용자 정보의 암호화와 보안 감사 로그 등을 활용하여 대비해야 합니다.
위 두 사례는 실제로 발생한 대규모 보안 사고의 일부를 보여주는 것으로, 이러한 사례를 통해 보안 강화와 적절한 대응 방안의 중요성을 이해할 수 있습니다.
8. 모의해킹 시나리오와 대응
모의해킹은 애플리케이션 및 시스템의 취약성을 확인하고 보안 대응 능력을 강화하기 위해 시뮬레이션하는 과정입니다. SQL Injection에 대한 모의해킹 시나리오를 통해 실제 공격과 유사한 상황에서 어떻게 대응할 수 있는지 살펴보겠습니다.
대응 방안 및 예제:
- 시나리오: 웹 애플리케이션의 취약한 로그인 폼
- 공격자는 웹 애플리케이션의 로그인 폼에 SQL Injection을 시도합니다.
- 입력 필드에 아래와 같은 코드를 입력합니다:
' OR '1'='1'--
- 공격자는 로그인에 성공하여 권한 없는 계정으로 접근합니다.
대응:
- 입력 값 검증과 정제를 통해 사용자 입력에 대한 필터링을 진행합니다.
- Prepared Statements를 사용하여 입력된 값과 쿼리를 분리합니다.
- 시나리오: 웹 애플리케이션의 게시판
- 공격자는 게시판의 댓글 입력란에 SQL Injection을 시도합니다.
- 입력 필드에 아래와 같은 코드를 입력합니다:
1'; DROP TABLE posts;--
- 공격자는 게시판 데이터베이스의 테이블을 삭제하려 시도합니다.
대응:
- 입력 값 검증과 정제를 통해 사용자 입력에 대한 필터링을 진행합니다.
- 웹 방화벽을 통해 금지된 문자나 쿼리를 탐지하여 차단합니다.
- 시나리오: URL 파라미터를 통한 공격
- 공격자는 웹 애플리케이션의 URL 파라미터에 SQL Injection을 시도합니다.
- URL에 아래와 같은 코드를 포함합니다:
https://example.com/search?q=1' OR '1'='1'--
- 공격자는 데이터베이스의 모든 정보를 조회하려 시도합니다.
대응:
- 입력 값 검증과 정제를 통해 URL 파라미터에 대한 필터링을 진행합니다.
- 웹 애플리케이션 방화벽(WAF)을 사용하여 악성 요청을 차단합니다.
이러한 예제들을 통해 모의해킹 시나리오에서 SQL Injection을 대비하는 방법을 살펴보았습니다. 입력 값 검증, Prepared Statements 사용, 웹 방화벽 등의 보안 대응 방안을 통해 SQL Injection 공격을 방지하고 대응할 수 있습니다.
9. 안전한 코딩 습관과 보안 교육의 중요성
안전한 코딩 습관과 보안 교육은 개발자들에게 보안을 고려한 소프트웨어 개발 방법을 습득시키는 과정입니다. SQL Injection과 관련하여 안전한 코딩 습관을 배우고 실제 예제를 통해 적용해보겠습니다.
대응 방안 및 예제:
- 입력 값 검증과 정제 습관
- 개발자는 사용자 입력을 받을 때 반드시 입력 값의 유효성을 검증하고 정제해야 합니다.
- 예를 들어, 로그인 폼에서 사용자가 입력한 아이디와 패스워드에 대해 다음과 같은 코드를 추가합니다.
def sanitize_input(input_string):
# 입력 값에서 악성 코드 제거
sanitized_input = input_string.replace("'", "").replace(";", "")
return sanitized_input
username = sanitize_input(user_input_username)
password = sanitize_input(user_input_password)
query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "';"
- Prepared Statements 습관
- 개발자는 데이터베이스 쿼리에 사용자 입력을 문자열로 직접 삽입하지 않고, Prepared Statements를 사용해야 합니다.
- 예를 들어, 사용자가 입력한 값을 Prepared Statements로 처리하는 코드는 다음과 같습니다.
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM users WHERE username = ? AND password = ?");
pstmt.setString(1, userInputUsername);
pstmt.setString(2, userInputPassword);
ResultSet rs = pstmt.executeQuery();
- 보안 교육의 중요성 강조
- 팀 내에서 보안 교육을 지속적으로 진행하여 개발자들에게 새로운 보안 취약성과 대응 방법을 학습시키는 것이 중요합니다.
- SQL Injection을 포함한 다양한 공격 기법에 대한 교육을 제공하고, 실제 사례와 예제를 활용하여 학습을 강화합니다.
안전한 코딩 습관과 보안 교육을 통해 개발자들은 애플리케이션 개발 초기부터 보안을 고려한 설계와 개발을 할 수 있습니다. 입력 값 검증, Prepared Statements 사용 등의 습관을 통해 SQL Injection과 같은 보안 취약성을 예방하고 대비하는 능력을 키우는 것이 중요합니다.
10. 더 나아가기: 보안 커리어 팁과 자원 소개
보안 분야에서 성장하고 전문가로서의 경력을 쌓기 위해 필요한 팁과 유용한 자원들을 소개합니다. 실제 현장에서 적용 가능한 전문가 관점의 내용을 다루겠습니다.
보안 커리어 팁:
- 다양한 분야 탐색: 보안 분야는 넓고 다양한 분야로 나뉘어집니다. 네트워크 보안, 웹 보안, 애플리케이션 보안 등 다양한 분야를 탐색하여 본인의 관심과 역량에 맞는 분야를 선택하고 전문화하는 것이 중요합니다.
- 자격증 취득: 보안 관련 자격증은 커리어를 발전시키는 데 큰 도움이 됩니다. CISSP, CEH, CompTIA Security+ 등의 자격증을 취득하여 전문성을 인증받을 수 있습니다.
- 프로젝트 경험 쌓기: 실제 프로젝트를 통해 보안 기술을 익히고 경험을 쌓는 것이 중요합니다. 개인 프로젝트나 참여 프로젝트를 통해 실무 능력을 키우세요.
유용한 자원 소개:
- 보안 커뮤니티 및 블로그: OWASP, SecurityFocus, KrebsOnSecurity 등의 온라인 보안 커뮤니티와 블로그에서 최신 보안 동향과 정보를 얻을 수 있습니다.
- MOOC 강의: 온라인 교육 플랫폼인 Coursera, edX, Udemy 등에서 보안 관련 강의를 수강하여 전문 지식을 습득하세요.
- CTF (Capture The Flag): CTF 대회에 참여하여 실제 해킹 시나리오를 해결하고 경험을 쌓을 수 있습니다. Hack The Box, TryHackMe 등의 플랫폼에서 CTF를 진행할 수 있습니다.
- 컨퍼런스 및 워크샵: DEFCON, Black Hat, RSA Conference 등의 보안 컨퍼런스와 워크샵에 참여하여 업계 전문가들과 교류하고 최신 기술 동향을 파악하세요.
- 자체 연구 및 랩: 개인적인 연구와 실험을 통해 새로운 보안 기술을 탐구하고 발전시킬 수 있습니다.
보안 커리어를 발전시키기 위해서는 학습과 경험이 끊임없이 필요합니다. 보안 커뮤니티와 다양한 자원을 활용하여 지식을 확장하고 실무 경험을 쌓아나가는 노력이 보안 전문가로서 성장하는 핵심입니다.
결론
이 글을 통해 SQL Injection 공격에 대한 심화적인 내용을 학습하셨습니다. 보다 안전한 웹 개발과 보안을 위해 지속적인 학습과 개선이 필요합니다.
여기까지 전문적인 SQL Injection 심화 과정에 대한 포스팅을 마치겠습니다. 추가 궁금한 사항이나 자세한 내용은 링크를 통해 확인해보시기 바랍니다. 감사합니다.
주의: 위에서 제시한 예제는 교육 및 이해를 위한 목적으로 제공되었습니다. 이러한 공격 기법을 실제 운영중인 시스템에서 테스트하거나 시도하는 것은 불법이며, 법적 처벌을 받을 수 있습니다. 반드시 법적 규정을 준수하고, 적법한 테스트 환경에서만 이러한 기법을 학습하고 실습해야 합니다.
실제 시스템에서의 공격 시도는 타인의 프라이버시와 보안을 침해하며, 중대한 법적 문제를 초래할 수 있습니다. 어떠한 행동도 합법적인 경로와 법률을 준수해야만 합니다.
[Reference]
1. SQL Injection – GeeksforGeeks
[관련글]
1. SQL Injection 취약점(1) : 방어와 대응 방법 | Tech Hyeonker
2. SQL Injection 취약점(2) : 실습으로 배우는 웹 보안 강화 방법 | Tech Hyeonker