(int)$input_pw == $pw 부분이 잘 이해가 안 됩니다.
pw 는 sha1("1")이기 때문에
356a192b7913b04c54574d18c28d46e6395428ab
이 값을 고정적으로 가지는데요.
int로 형변환을 한 input_pw가 어떻게 앞에 356이 있다는 이유만으로 pw와 같다가 성립을 할 수 있게 되는 건지 모르겠습니다.
실제로 제가 replit에서 php 를 실행시켰을 땐 해당 결과값이 false로 나오거든요.
#web
작성자 정보
답변
2
J0ngBae
Crazy 8
안녕하세요!
질문에 대해 답변을 드리자면 문제서버에서 사용하는 php 버전과 replit에서 사용하는 php 버전이 달라서 그런 것 같습니다.
아래의 문서를 참고하면 php 8.0.x 대에서는 숫자형을 문자열로 캐스팅하고 문자열을 비교하는 형식으로 작동하기 때문에
php 8.0.x 에서는 numeric과 not-numeric 에 대한 비교 결과는 거짓이 됩니다.
예를 들어 php 7.x.x 대 버전에서는 42 == "42foo"
의 결과는 true
지만 php 8.0.x 대 버전에서는 false
가 됩니다.
replit에서 phpinfo()
를 통해 php 버전을 확인해보면 8.2.0 인 것을 볼 수 있습니다.
최동환
세계수
https://php.365ok.co.kr/migration80.incompatible.php 여기에 나와있습니다.
이전에는 true였는데 8.0x에서부터 false가 되었다고 하네요.
그래서 이 문제에서는 356으로 시작한다는 것만으로 input_pw == pw 가 성립하네요.