ホームページ  >  記事  >  バックエンド開発  >  PHP 組み込み関数 intval()_PHP チュートリアル

PHP 組み込み関数 intval()_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 14:53:011063ブラウズ

1. 説明

intval 関数には、「数値または正または負の符号が出現するまで変換は開始されず、非数値または文字列の末尾 (/0) が出現すると変換が終了する」という特性があります。 )." 一部のアプリケーションでは、 intval 関数の特性の理解が不十分であり、誤った使用により一部のセキュリティ判断が回避され、セキュリティの脆弱性が生じる可能性があります。

2. 分析

PHP_FUNCTION (intval)

{

zval **num, **arg_base ;

int Base;

switch (ZEND_NUM_ARGS()) {

case 1:

if (zend_get_parameters_ex(1, &num) == FAILURE) {

WRONG_PARAM_COUNT;

}

base = 10;

Break;

ケース 2:

if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {

WRON G_PARAM_COUNT;

}

convert_to_long_ex (arg_base);

base = Z_LVAL_PP(arg_base);

break ;

default:

WRONG_PARAM_COUNT;

}

RETVAL_ZVAL(*num, 1, 0);

convert_ to_long_base(return_value, ベース);

}

Zend/zen d_operators.c->>convert_to_long_base(

intval 関数は文字列パラメーターを受け取ると、convert_to_long_base() を呼び出して処理し、その後 Z_LVAL_P(op) = strtol( strval、NULL、base); strtol 関数を通じてパラメータを処理します。

関数のプロトタイプは次のとおりです:

long int strtol(const char *nptr,char **endptr,int Base);

この関数は、パラメータ nptr 文字列を長整数に変換します。パラメータの基数に数値を入力すると、パラメータの基数の範囲は 2 ~ 36、または 0 になります。パラメータの基数は、使用される基数の方法を表します。基数の値が 10 の場合は 10 進数が使用され、基数の値が 16 の場合は 16 進数が使用されます。 。

そのプロセスは次のとおりです:

strtol() はパラメーター nptr 文字列をスキャンし、先行するスペース文字をスキップし、数字または正負の記号に遭遇するまで変換を開始しません。その後、数字以外の文字列または文字列の末尾に遭遇するまで変換を開始しません。 string (/0 ) は変換を終了し、結果を返します。

その後、ifなどの判定でintvalを使用すると判定が無意味になり、セキュリティ上の脆弱性が発生します 3. テストコード
//intval.php

$var= "20070601";

if (intval($var))

echo "安全です";

echo '$var='.$var;

echo "

"; $var1="1 Union select 1,1,1 from admin";

if (intval($var1))

echo "それも安全です";

echo '$var1='.$var1;

IV. 実践的な応用

WordPress <= 2.0.6 wp-trackback.php Zend_Hash_Del_Key_Or_Index / SQL インジェクションエクスプロイト

http://www.bkjia.com/PHPjc/371450.html

www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/371450.html技術記事
1. intval 関数の説明には、「数値または正または負の符号が出現するまで変換は開始されず、数値以外または文字列の末尾 (/0) が出現すると変換が終了する」という特性があります。一部のアプリケーションでは、..

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。