(int)$input_pw == $pw 부분이 잘 이해가 안 됩니다.

pw 는 sha1("1")이기 때문에
356a192b7913b04c54574d18c28d46e6395428ab
이 값을 고정적으로 가지는데요.
int로 형변환을 한 input_pw가 어떻게 앞에 356이 있다는 이유만으로 pw와 같다가 성립을 할 수 있게 되는 건지 모르겠습니다.

실제로 제가 replit에서 php 를 실행시켰을 땐 해당 결과값이 false로 나오거든요.
image.png

#web
작성자 정보
답변 2

안녕하세요!
질문에 대해 답변을 드리자면 문제서버에서 사용하는 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 가 됩니다.

https://www.php.net/manual/en/migration80.incompatible.php

replit에서 phpinfo() 를 통해 php 버전을 확인해보면 8.2.0 인 것을 볼 수 있습니다.
image.png

2024.07.15. 17:39


https://php.365ok.co.kr/migration80.incompatible.php 여기에 나와있습니다.
이전에는 true였는데 8.0x에서부터 false가 되었다고 하네요.

그래서 이 문제에서는 356으로 시작한다는 것만으로 input_pw == pw 가 성립하네요.

2024.07.21. 16:43
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기