ホームページ > php教程 > php手册 > PHP チュートリアル: PHP 組み込み関数 intval()

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

WBOY
リリース: 2016-06-21 08:56:39
オリジナル
1460 人が閲覧しました
1. 説明

intval 関数には次の特性があります。「数値または正または負の符号に遭遇するまで変換は開始されず、その後、数値以外の文字列または文字列の末尾に遭遇したときに変換が開始されます (

2. 分析

テーブル> intval 関数は文字列パラメータを受け取ると、convert_to_long_base() を呼び出して処理し、次に Z_LVAL_P(op) = strtol(strval, NULL, Base); を呼び出して strtol 関数を通じてパラメータを処理します。 関数のプロトタイプは次のとおりです: この関数は、パラメーターのbaseに従って、パラメーターのnptr文字列を長整数に変換します。パラメーターのbaseの範囲は2から36、または0です。パラメーターのbaseは、baseの値が10の場合、使用されるbaseメソッドを表します。 10 が使用され、基本値が 16 の場合は 16 進数が使用されます。 プロセスは次のとおりです: strtol() はパラメータ nptr 文字列をスキャンし、先行するスペース文字をスキップします。数値または正負の記号が検出され、その後数値以外の文字列または文字列の末尾が検出されるまで変換は開始されません。 その後、if などの判定に intval を使用すると、判定が無意味になり、セキュリティ上の脆弱性が生じます。 3. テストコード

PHP_FUNCTION(intval)

  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;

  case 2:

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

  WRONG_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, base);

  }

  Zend/zend_operators.c->>convert_to_long_base()

  ……

  case IS_STRING:

  strval = Z_STRVAL_P(op);

  Z_LVAL_P(op) = strtol(strval, NULL, base);

  STR_FREE(strval);

  break;

{

zval **num, **arg_base;

int ベース;

スイッチ (ZEND_NUM_ARGS()) {

long int strtol(const char *nptr,char **endptr,int base);
ケース 1:

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

WRONG_PARAM_COUNT; }

ベース = 10;

休憩;

ケース 2: if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {

WRONG_PARAM_COUNT;

  //intval.php

  $var="20070601";

  if (intval($var))

  echo "it's safe";

  echo '$var='.$var;

  echo "

  ";

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

  if (intval($var1))

  echo "it's safe too";

  echo '$var1='.$var1;

}

convert_to_long_ex(arg_base);

ベース = Z_LVAL_PP(arg_base);

WordPress <= 2.0.6 wp-trackback.php Zend_Hash_Del_Key_Or_Index / sql injection exploit
休憩; デフォルト: WRONG_PARAM_COUNT; } RETVAL_ZVAL(*num, 1, 0); convert_to_long_base(return_value,base); } Zend/zend_operators.c->gt;>convert_to_long_base() …… ケース IS_STRING: strval = Z_STRVAL_P(op); Z_LVAL_P(op) = strtol(strval, NULL, Base); STR_FREE(strval); 休憩;
テーブル> 4. 実際の応用

編集中



//intval.php $var="20070601"; if (intval($var)) echo "安全です"; echo '$var='.$var; エコー " "; $var1="1 Union select 1,1,1 from admin"; if (intval($var1)) echo "それも安全です"; echo '$var1='.$var1;
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート