4

sql injection

아이디를 admin
비밀번호를 " or "1=1
이렇게 했을 경우 왜 Hello Guest가 뜨나요?

2 answers
2
    rv = cur.fetchall()
    cur.close()
    return (rv[0] if rv else None) if one else rv

위와 같이 여러 결과를 받았을때 하나만 보여주기 때문입니다.

2

연산자의 우선순위 때문입니다
and 가 or 보다 먼저 계산되기 때문에 'Hello Guest’가 출력되는 건데

Select (column) from (table) where id=“admin” and pw=“” or “1=1”;
이라는 구문에서 굵게처리된 부분이 먼저 연산 됩니다.
하지만 admin의 password는 공백이 아니기 때문에 거짓 값이 나오게 되고
이때 이 False 값과 "1=1"이 or 연산되어 '참’값으로 계산됩니다.
때문에 질문자님과 같이 입력할 경우
Select (column) from (table);
위 구문 같은 결과를 출력하게 되어 guest 계정으로 로그인 되는겁니다 :)