-
Loose comparison, Magic HashSecurity/Web보안 2020. 8. 4. 20:08
PHP에서의 느슨한 비교
PHP에서는 type juggling(스스로 type을 변환)이 작동한다.
<?php
$a = "123"; //a변수는 string type이다.
$a += 1; //a변수는 integer가 된다.
?>
엄격한 비교 (===)에서는 자료형과 값이 모두 같아야 TRUE를 반환한다.
하지만, 느슨한 비교 (==)에서는 값만 같아도 TRUE가 반환된다.
- Magic Hashes
비교 연산시 다른 값이 타입 저글링에 의해 같은 값으로 인식되게 하는 것
특수한 경우, '0e'로 시작하는 문자열일 때 가능
지수를 표현할 때는 5*10^2 를 5e2 라고 표기한다.
php에서 '0e'로 시작하는 문자열의 뒤가 모두 숫자일경우 ex) 0e1234, 0e823 ...
에는 php상에서 float 형태로 인식하게 된다.
$a="0e123"
$b="0e456"
$a == $b의 결과는 TRUE가 나오게된다.
두 변수가 string으로 지정이 되었지만, php는 타입저글링에 의해 float로 바꾼뒤 비교를 진행하고 둘다 0이라고 생각하여 TRUE가 반환되게 된다.
또한 연산후에도 타입캐스팅이 없었으므로, 각 변수는 string으로 유지된다.
rootable.tistory.com/entry/%EB%A7%A4%EC%A7%81%ED%95%B4%EC%8B%9CMagic-Hashes
'Security > Web보안' 카테고리의 다른 글
Webhacking.kr (0) 2021.01.09 Local File Inclusion (0) 2020.08.02 Directory indexing (0) 2020.08.01 Command injection (0) 2020.08.01