sourcecode

'==' 또는 '==='을 사용하여 문자열과 'strcmp()'을 비교합니다.

copyscript 2022. 12. 6. 22:07
반응형

'==' 또는 '==='을 사용하여 문자열과 'strcmp()'을 비교합니다.

PHP인 것 .===연산자는 대소문자를 구분합니다. '우리'를 사용해야 하는 가 있나요?strcmp()

다음과 같은 일을 해도 안전합니까?

if ($password === $password2) { ... }

사용하는 이유는

str1이 str2보다 작으면 < 0, str1이 str2보다 크면 0, 같은 경우는 0을 반환합니다.

===되는 것은 「」입니다.true ★★★★★★★★★★★★★★★★★」false을 사용하다

.==를 참조해 주세요. ===

$something = 0;
echo ('password123' == $something) ? 'true' : 'false';

위의 코드를 실행하기만 하면 이유를 알 수 있습니다.

$something = 0;
echo ('password123' === $something) ? 'true' : 'false';

이제 좀 나아졌네요.

마세요==PHP の php php php php php php php 。그것은 당신이 기대한 대로 되지 않을 겁니다.문자열을 문자열과 비교하는 경우에도 PHP는 암묵적으로 문자열을 플로트에 캐스팅하고 수치적으로 나타나면 수치 비교를 수행합니다.

를 들어, 「」입니다.'1e3' == '1000'true가 됩니다. 하면 됩니다.===★★★★★★ 。

... 이 PHP 버그 리포트에 따르면 0wn도 받을 수 있습니다.

<?php
    $pass = isset($_GET['pass']) ? $_GET['pass'] : '';
    // Query /?pass[]= will authorize user
    //strcmp and strcasecmp both are prone to this hack
    if ( strcasecmp( $pass, '123456' ) == 0 ){
      echo 'You successfully logged in.';
    }
 ?>

이치노는 ★★★★★★★★★★★★★★★★★★★★★★★★.===@postfuturist ★★★★★★★★★★★★★★★★★★★★」

문자열을 비교할 때는 연산자(엄격한 비교)를 사용해야 합니다. ==연산자(비교).

모든 답변 요약:

  • ==문자열 비교에는 좋지 않은 아이디어입니다.
    많은 경우, 「놀라운」의 결과를 얻을 수 있습니다.믿지 마세요.

  • ===좋습니다.최고의 퍼포먼스를 선사하겠습니다.

  • strcmp()일반적으로 정렬 작업에 사용할 "signed" 문자열을 결정해야 할 경우 를 사용해야 합니다.

「」를 사용합니다.==위험할 수도 있어요.

두 데이터 유형이 다를 경우 변수를 다른 데이터 유형으로 캐스팅합니다.

예:

  • echo (1 == '1') ? 'true' : 'false';
  • echo (1 == true) ? 'true' : 'false';

것처럼 이 두 인데, 그 '다르다', '다', '다', '다', '다'가 됩니다.true이것은, 코드의 예상과는 다를 수 있습니다.

「」를 사용합니다.===,, 스, 테, 테, 테, 테, 단, 단, 단, 단, ,, shows, ,, shows, ,, shows, ,, ,, ,, ,, ,, ,, shows, shows, than, than, than, than, , shows, shows, shows, showsstrcmp()를 구분하지 않는 strcasecmp().

빠른 구글 검색으로 이 속도를 비교할 수 있습니다.http://snipplr.com/view/758/

strcmp() ★★★★★★★★★★★★★★★★★」=== 다 만,===훨씬 더 빠릅니다.

샘플 코드: 속도 테스트: strcmp vs ===

strcmp는 실행 중인 환경에 따라 다른 값을 반환합니다(Linux/Windows).

이유는 버그리포트에 나타나 있듯이 버그가 있기 때문입니다.- Bug #53999strcmp()는 항상 -1, 0, 또는 1을 반환하는 것은 아닙니다.

사용할 수 있습니다.strcmp()사전 편찬으로 문자열을 주문/배포하고 싶은 경우.평등을 확인하려는 경우==괜찮아요.

또한 이 기능은 정렬에 도움이 됩니다.정렬에 대해 더 명확하게 하기 위해.strcmp()는 string1이 string2보다 먼저 정렬하는 경우 0보다 작은 값을 반환하고 string2가 string1보다 앞에 정렬하는 경우 0보다 큰 값을 반환합니다.예를들면

$first_string = "aabo";
$second_string = "aaao";
echo $n = strcmp($first_string, $second_string);

함수는 aaao가 aabo 에 정렬되어 있기 때문에 0보다 큰 값을 반환합니다.

if ($password === $password2) { ... }패스워드 또는 패스워드 해시를 비교할 때 입력 중 하나가 사용자 제어되는 경우 안전하지 않습니다.
이 경우 공격자가 실행 시간 차이에서 실제 암호 해시를 도출할 수 있도록 타이밍 오라클을 생성합니다.
사용하다if (hash_equals($password, $password2)) { ... }대신 hash_module이 "syslog attack safe string comparison"을 실행하기 때문입니다.

PHP에서는 알파벳 정렬 대신 문자의 ASCII 값을 사용하여 비교합니다.

소문자는 대문자보다 ASCII 값이 높습니다.이러한 비교는 아이덴티티 연산자 ===를 사용하는 것이 좋습니다.strcmp()는 바이너리 세이프 스트링을 비교하기 위한 함수입니다.이 명령어는 2개의 스트링을 인수로 사용하여 str1이 str2보다 작으면 < 0, str1이 str2보다 크면 > 0, 같으면 0을 반환합니다.strcasecmp()라는 이름의 대소문자를 구분하지 않는 버전도 있습니다.이 버전은 처음에 문자열을 소문자로 변환한 후 비교합니다.

언급URL : https://stackoverflow.com/questions/3333353/string-comparison-using-or-vs-strcmp

반응형