php教程 php手册 PHP教程:php内置函数intval()

PHP教程:php内置函数intval()

Jun 21, 2016 am 08:56 AM
base intval quot strval

一、描述

intval函数有个特性:"直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换",在某些应用程序里由于对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;

当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字符串根据参数base来转换成长整型数,参数base范围从2至36,或0.参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。

流程为:

strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(\0)结束转换,并将结果返回。

那么当intval用在if等的判断里面,将会导致这个判断实去意义,从而导致安全漏洞.

三、测试代码

  //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;

四、实际应用

WordPress

编辑整理



본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

기본 DEX 수도꼭지: 비행장 VS 곡선 기본 DEX 수도꼭지: 비행장 VS 곡선 Mar 26, 2024 pm 04:31 PM

Velodrome 모델은 veCRV에서 영감을 얻었으며 유동성 공급자(LP), 토큰 보유자 및 유동성이 필요한 프로젝트를 포함하여 DEX의 세 가지 주요 참여자 간에 탁월한 일관성을 달성하는 것을 목표로 합니다. 그러나 DeFi 공간의 많은 플레이어는 여전히 근본적인 이유를 완전히 이해하지 못하고 있습니다. 이 글을 깊이 있게 읽으면, 이 딜레마에서 벗어나 그 근본 원인을 파악할 수 있을 것입니다. 오늘은 DeFi 분야의 실제 성공 사례인 Velodrome/Aerodrome에 대해 논의하겠습니다. 이 기사에서는 두 모델을 비교하고 Velodrome이 veCRV 모델을 어떻게 개선하고 이러한 작은 차이가 어떤 중요한 영향을 미치는지 설명합니다. 먼저 말씀드리자면

golang에서 정규식을 사용하여 입력이 합법적인 base64 문자열인지 확인하세요. golang에서 정규식을 사용하여 입력이 합법적인 base64 문자열인지 확인하세요. Jun 24, 2023 am 10:01 AM

Golang 프로그래밍에서는 입력이 합법적인 base64 문자열인지 확인하기 위해 정규식을 사용하는 것이 상대적으로 일반적인 요구 사항입니다. 개발자의 경우 정규식을 사용하여 사용자 입력이 올바른지 빠르고 정확하게 확인할 수 있습니다. 이 기사에서는 Golang에서 정규식을 사용하여 입력이 합법적인 base64 문자열인지 확인하는 방법을 소개합니다. 기본 구문으로 시작하기 Golang에서 정규식을 사용하려면 "regexp" 라이브러리를 사용해야 합니다. 이 라이브러리는 "컴파일" 및 "

Java에서 Base64 함수를 사용하여 인코딩 및 디코딩하는 방법 Java에서 Base64 함수를 사용하여 인코딩 및 디코딩하는 방법 Jun 26, 2023 pm 02:24 PM

Java 프로그래밍에서는 전송을 위해 바이너리 데이터를 텍스트 형식으로 변환해야 하는 경우가 많으며 Base64 인코딩이 일반적으로 사용되는 변환 방법입니다. Base64는 3바이트의 데이터를 4바이트의 텍스트 데이터로 변환합니다. 텍스트 데이터는 인쇄 가능한 문자만 포함하므로 이메일 및 HTTP 요청 메시지와 같은 프로토콜로 전송할 수 있습니다. Java는 Base64 인코딩 및 디코딩 API를 제공하므로 데이터를 쉽게 변환할 수 있습니다. 이 기사에서는 Java에서의 사용 방법을 소개합니다.

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

PHP를 사용하여 Base64 형식의 이미지를 Qiniu Cloud Storage에 업로드하고 썸네일을 생성하는 방법은 무엇입니까? PHP를 사용하여 Base64 형식의 이미지를 Qiniu Cloud Storage에 업로드하고 썸네일을 생성하는 방법은 무엇입니까? Sep 05, 2023 am 08:48 AM

PHP를 사용하여 Base64 형식의 이미지를 Qiniu Cloud Storage에 업로드하고 썸네일을 생성하는 방법은 무엇입니까? 서론: 인터넷의 발달과 함께 이미지의 활용이 점점 더 광범위해지고 있으며, 이미지 처리는 일반적인 요구 사항이 되었습니다. Qiniu Cloud Storage는 편리한 이미지 저장 및 처리 서비스를 제공합니다. 이 기사에서는 PHP를 사용하여 Base64 형식의 이미지를 Qiniu Cloud Storage에 업로드하고 썸네일을 생성하는 방법을 소개합니다. 1단계: 필요한 종속성 설치 시작하기 전에 PHP와 Composer가 시스템에 설치되어 있는지 확인해야 합니다(

Base Dawgz($DAWGZ) 멀티체인 토큰이 오늘 분산형 거래소에 출시되었습니다. Base Dawgz($DAWGZ) 멀티체인 토큰이 오늘 분산형 거래소에 출시되었습니다. Sep 06, 2024 am 06:34 AM

Base의 첫 번째 멀티체인 토큰인 Base Dawgz($DAWGZ)가 오늘 분산형 거래소에 출시되었습니다. $DAWGZ는 CET 18시에 DEX에 데뷔했으며 첫 번째로

PHP를 사용하여 Qiniu Cloud Storage에서 Base64 형식의 이미지를 다운로드하고 디코딩하는 방법은 무엇입니까? PHP를 사용하여 Qiniu Cloud Storage에서 Base64 형식의 이미지를 다운로드하고 디코딩하는 방법은 무엇입니까? Sep 05, 2023 pm 03:22 PM

PHP를 사용하여 Qiniu Cloud Storage에서 Base64 형식의 이미지를 다운로드하고 디코딩하는 방법은 무엇입니까? 현대 인터넷 애플리케이션에서는 이미지 리소스의 저장과 처리가 매우 중요합니다. Qiniu Cloud Storage는 안정적인 클라우드 스토리지 플랫폼으로서 사용자에게 풍부한 이미지 처리 기능을 제공합니다. 이 문서에서는 PHP를 사용하여 Qiniu Cloud Storage에서 Base64 형식의 이미지를 다운로드하고 디코딩하는 방법을 소개합니다. 1. Qiniu Cloud Storage 계정 생성 및 API 키 획득 먼저 Qiniu Cloud Storage 공식 웹사이트에 계정을 등록하고 저장 공간을 성공적으로 생성해야 합니다. 성공적으로 생성 중

Jul 25, 2023 am 11:25 AM

PHP 함수 "strval"을 사용하여 변수를 문자열 유형으로 변환합니다. PHP에서는 변수를 문자열 유형으로 변환해야 하는 경우가 종종 있습니다. PHP는 이 함수를 쉽게 구현할 수 있는 내장 함수 "strval"을 제공합니다. strval 함수의 기능은 주어진 값을 문자열 유형으로 변환하는 것입니다. 매개변수를 승인하고 해당 매개변수의 문자열 표현을 반환합니다. 매개변수 자체가 문자열이면 문자열이 직접 반환되고, 그렇지 않으면 매개변수 유형에 따라 해당 변환이 수행됩니다. 아래에

See all articles