입력하신 문자열은 전형적인 SQL 인젝션 페이로드입니다:
- 원문: -1' OR 2+843-843-1=0+0+0+1 --
분해 및 동작:
- 처음의 -1' 는 기존 쿼리에서 문자열 리터럴 또는 값의 닫힘을 유도하려는 시도입니다(예: WHERE id = '-1'... 식에서 따옴표를 닫음).
- OR 2+843-843-1=0+0+0+1 은 논리식으로, 좌변 2+843-843-1는 1이 되고(845-843-1 = 1), 우변 0+0+0+1도 1이므로 전체 식은 참(true)입니다.
- -- 는 SQL에서 주석 시작을 의미하므로 뒤따르는 원래 쿼리의 나머지 부분을 무시하게 만듭니다.
결과적으로 원래 쿼리가 예를 들어
SELECT * FROM users WHERE username = 'someuser' AND password = '입력값';
와 같았다면, 인젝션 뒤에는
SELECT * FROM users WHERE username = 'someuser' AND password = '-1' OR 1 --';
와 같이 되어 OR 1 때문에 WHERE 절이 항상 참이 되어 인증 우회나 데이터 노출이 발생할 수 있습니다.
위험 및 대응책(요약):
- 위험: 인증 우회, 데이터 유출, 데이터 변경/삭제, 관리자 권한 탈취 등 심각한 보안 사고로 이어짐.
- 대응:
- Prepared statement / parameterized query 사용(가장 권장).
- 입력 값의 화이트리스트 검증(허용되는 형식/문자만 통과).
- 적절한 이스케이프 처리(가능하면 자동화된 라이브러리 사용).
- 최소 권한 원칙(데이터베이스 계정에 필요한 권한만 부여).
- 웹 애플리케이션 방화벽(WAF) 및 정기적인 보안 테스트(예: 펜테스트, 코드 리뷰).
요약: 제공하신 문자열은 WHERE 절을 항상 참으로 만들어 보안 우회가 가능한 SQL 인젝션 시도이며, 이를 막기 위해서는 파라미터화된 쿼리와 입력 검증 등 보안 조치를 반드시 적용해야 합니다.