PHP 的 strcmp()...

出自「PHP的strcmp函数引发的安全问题」。

拿 PHP 5.5 來測,這兩個都沒什麼問題:

php > var_dump(strcmp('a', 'a'));
int(0)
php > var_dump(strcmp('a', 'b'));
int(-1)

接下來測這個:

php > var_dump(strcmp('a', array()));
PHP Warning:  strcmp() expects parameter 2 to be string, array given in php shell code on line 1
NULL

沃槽...

這代表這個寫法是有問題的:

if (!strcmp($v, $v_input)) {
    // If same...
}

如果先不管 warning,還是要用 strcmp 的話,可能得寫成:

if (0 === strcmp($v, $v_input)) {
    // If same...
}

不過用原生的操作元應該是比較好的解法?

if ($v === $v_input) {
    // If same...
}

這真是太迷人了... -_-

This entry was posted in Computer, Murmuring, Programming, Security and tagged , , . Bookmark the permalink.

One Response to PHP 的 strcmp()...

  1. Scar Wu says:

    我習慣使用原生語法 === 比較多,除了比對內容還可以順便比對型態。

Leave a Reply

Your email address will not be published. Required fields are marked *