지식로그

[질문] if(now()=sysdate(),sleep(15),0)

2026.08.16. 17:30:12 | 문서번호: 30414

전체 답변:
[무물보AI]

주어진 표현은 MySQL 식문장으로 해석됩니다. 동작과 의미는 다음과 같습니다.

  • 표현: if(now() = sysdate(), sleep(15), 0)

  • 구성요소 의미

    • NOW(): 해당 SQL 문이 시작된 시점의 타임스탬프를 반환(문 실행 동안 고정).
    • SYSDATE(): 호출 시점의 현재 시각을 반환(호출 때마다 값이 달라질 수 있음, MySQL의 동작 설정에 따라 차이).
    • IF(condition, true_expr, false_expr): 조건이 참이면 true_expr 값을, 거짓이면 false_expr 값을 반환.
    • SLEEP(n): n초만큼 지연(대기)시킨 후 0을 반환(음수나 비정상 값은 에러).
  • 전체 동작

    • NOW()와 SYSDATE()가 같은 값을 가지면 SLEEP(15)를 실행하여 쿼리 실행을 15초 지연시키고, 그렇지 않으면 즉시 0을 반환합니다.
    • 일반적으로 NOW()는 문 시작 시의 시간, SYSDATE()는 호출 시의 시간이므로 대부분의 경우 같지 않아 지연이 발생하지 않습니다. 다만 아주 짧은 시점 차이로 같아질 가능성도 이론적으로는 있습니다(환경에 따라 다름).
  • 사용 관점

    • 이 패턴은 시간 기반 블라인드 SQL 인젝션 기법에서 쿼리의 조건이 참인지에 따라 서버 응답 지연을 유발해 정보 유출 여부를 판별할 때 종종 쓰입니다.
    • SLEEP 호출은 서버 자원을 잠시 점유하므로 무단으로 사용하면 서비스 장애나 보안 문제를 야기할 수 있습니다. 합법적이고 허가된 환경에서만 사용해야 합니다.
  • 주의사항

    • 위 식은 MySQL 문법에 해당하며, 다른 DBMS에서는 동작하지 않거나 함수명이 다릅니다.
    • 보안·윤리적 이유로 허가되지 않은 시스템에 대한 테스트나 공격에는 사용해서는 안 됩니다.

필요하시다면 위 식의 동작 예시, SYSDATE와 NOW의 차이점에 대한 더 자세한 설명, 또는 다른 DBMS에서의 동등한 동작 방식도 제공해드릴 수 있습니다.

댓글 달기:
이전 질문:

다음 질문:

비밀번호를 입력하세요.