PHP에서 == 연산자를 사용한 사용자 에이전트 문자열 문자열 비교

WBOY
풀어 주다: 2016-07-29 08:35:16
원래의
1026명이 탐색했습니다.

최근 Greg Beaver의 블로그에 게시된 == 연산자와 PHP의 문자열을 비교하는 새로운 기사에서는 문자열을 PHP의 == 연산자와 비교할 때 주목할 만한 문제를 언급했습니다.
어떤 경우에는 PHP가 숫자 데이터(예: 숫자를 포함하는 문자열 등)를 숫자 처리로 변환하는데, == 연산자가 그 중 하나입니다. == 연산자를 사용하여 두 문자열을 느슨하게 비교할 때, PHP는 비교를 위해 과 같은 숫자 문자열을 숫자 값으로 변환합니다.
<span><code><span><span><br><span><?php</SPAN><BR><SPAN>var_dump</SPAN></SPAN><SPAN>(</SPAN><SPAN>'01' </SPAN><SPAN>== </SPAN><SPAN>1</SPAN><SPAN>);<BR></SPAN><SPAN><SPAN><SPAN>?></span><br></span></span>var_dump(' 01' SPAN>== 1);
?>

위 코드의 출력 결과는 bool(true)이므로 문자열을 비교할 때는 다음을 사용하는 것이 좋습니다. === 연산자를 사용하여 문자열을 엄격하게 확인하거나 strcmp()와 같은 함수를 사용하여 가능한 문제를 피하십시오. PHP 매뉴얼의 "PHP 유형 비교표"에도 이에 대해 자세히 설명되어 있습니다.
<span><span><?php<BR>var_dump</SPAN><SPAN>(</SPAN><SPAN>in_array</SPAN><SPAN>(</SPAN><SPAN>'01'</SPAN><SPAN>, array(</SPAN><SPAN>'1'</SPAN><SPAN>)));<BR></SPAN><SPAN><SPAN>?></span><br></span> 또한 일반적으로 사용되는 in_array() 함수에도 약한 유형 문제가 있습니다. 다음 코드를 참조하세요.
<span><span><?php <BR>var_dump</SPAN><SPAN>(</SPAN><SPAN>in_array</SPAN><SPAN>(</SPAN><SPAN>'01'</SPAN><SPAN>, 배열(</ SPAN ><SPAN>'1'</SPAN><SPAN>))));<br></SPAN><SPAN><SPAN>?></span></span> 위 코드의 출력 결과는 다음과 같습니다. bool(true)
이 기능을 보안 검사에 사용해 본 PHP 프로그래머라면 이 사실을 알고 있을 것입니다. 어떤 보안 문제가 발생하나요? 다행히
<span><span><?php <BR>var_dump</SPAN><SPAN>(</SPAN><SPAN>in_array</SPAN><SPAN>(</SPAN><SPAN>'01'</SPAN><SPAN>, array(</SPAN><SPAN>'1'</SPAN><SPAN>), </SPAN><SPAN>true</SPAN><SPAN>)); <BR></SPAN><SPAN><SPAN>?></span><br></span>in_array() 함수는 세 번째 매개변수를 제공합니다. 이를 true로 설정하면 다음과 같이
in_array() 함수의 필수 유형 검사 메커니즘을 켤 수 있습니다. 코드:
<span><span><?php <FONT face=Verdana size=2>var_dump</SPAN><SPAN>(</SPAN><SPAN>in_array</SPAN><SPAN>(< /SPAN> <SPAN>'01'</SPAN><SPAN>, 배열(</SPAN><SPAN>'1'</SPAN><SPAN>), </SPAN><SPAN>true</SPAN> <SPAN> )); </FONT></SPAN><SPAN><SPAN>?></span><p></p></span>

출력 결과는 다음과 같습니다.

bool( false)

PHP는 약한 유형의 언어이므로, 즉 PHP에서는 데이터 유형의 개념이 약합니다. 따라서 프로그래밍할 때 데이터 유형을 너무 많이 무시하면(이는 대부분의 PHP 프로그래머의 일반적인 문제이기도 함) 일부 문제가 발생하고 심지어 보안 취약점도 발생합니다. 마지막으로, 짜증나는 속담처럼 외부 데이터를 엄격하게 확인하고 필터링하세요. 위 내용은 User-Agent 문자열의 내용을 포함하여 == 연산자를 사용하여 문자열 비교를 위해 PHP에서 User-Agent 문자열을 사용하는 방법을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿