我的编程空间,编程开发者的网络收藏夹
学习永远不晚

后端代码审计——PHP基础

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

后端代码审计——PHP基础

文章目录

PHP基础

PHP定义:一种服务器端的HTML脚本/编程语言,是一种简单的、面向对象的、解释型的、健壮的、安全的、性能非常之高的、独立于架构的、可移植的、动态的脚本语言。是一种广泛用于 Open Source(开放源代码)的尤其适合Web开发并可以嵌入HTML的多用途脚本语言。它的语法接近C,Java和Perl,而且容易学习。该语言让Web开发人员 快速的书写动态生成的网页。

1. php格式

    // PHP 代码?>

例如:

// PHP 的开始标记,表示从此标记开始,进入PHP 模式。    phpinfo();// PHP 代码?>// PHP 的结束标记,表示从开始标记到结束标记,之间的内容是PHP 模式 // 之后的内容依然被PHP 解释引擎认为是纯文本字符串。   
  1. phpinfo是一个函数(功能),这个函数会显示一个当前电脑(服务器)的详细的PHP信息。
  2. 电脑需要我们人为的告诉他代码写完了。用分号(;)来告诉他代码写完了。因此只要写完一段代码,就需要在后面加分号。
  3. 而前后两行的回车空行,是为了让代码更加好看,避免叠在一起,看着不舒服。其实中间有多少个回车空行都没有关系的。PHP的语法解释器(PHP最核心部分)不会处理这些空行的。

安全问题:如果是⼀个在线的⽹站能够看到phpinfo ⻚⾯,说明存在敏感信息泄露漏洞,这个漏洞需要体现在后⾯的渗透测试报告中。

2. php变量

变量是⽤于临时存储值的容器,通过变量名能够访问到变量值,变量包含四个部分内容:

  • 变量名

  • 变量值

  • 数据类型

  • 内存空间

PHP 脚本语言是⼀种弱数据类型语言,变量或常量的数据类型由程序的上下⽂决定,给⼀个变量赋予什么样的值,就是什么数据类型。

2.1 变量声明与初始化

变量命名

$ + 变量名

变量名是严格区分⼤⼩写的。以下变量是完全不同的:

$name;$Name;$NAME;

例如:

    $iphone7 = 5880;    $iphone7plus = 6088;    echo $iphone6 + $iphone7plus;  //echo是在PHP里面最常用的一个输出、显示功能的命令?>

2.2 php变量特点

  1. 必须要以$开始 ,如变量x必须要写成$x
  2. 变量的首字母不能以数字开始。
  3. 变量的名字区分大小写。
  4. 变量不要用特殊符号、中文,_不算特殊符号。
  5. 变量命名要有意义(别写xxx,aaa,ccc)这种变量名。

2.3 变量命名方式

驼峰命名法

$firstName;$LastName;$first_name;$Last_name;

PHP中有一些标识符是系统定义的,也称为关键字,是PHP语言的组成部分,因此不建议使用它们中的任何一个作为变量名,包括函数名,类名等。

$echo;

2.4 变量释放

**unset()**函数释放指定变量

    $a = 123;    echo $a;    unset($a);?>

2.5 可变变量

可变变量,一个变量的名字可以动态的设置和使用。$是php的特性,也是产生php中变量覆盖漏洞的原因之一。

    //定义了一个变量叫$username,将$username这个变量的值设为字符串的wuhu    $username = "wuhu";    //定义了一个变量叫作$biao 将他的值设置为鼠标    $wuhu = "芜湖";    //$$username就是可变变量,在已声明的变量$username前又加上了一个变量符    echo $$username;    // $($username) -> $wuhu?>

2.6 变量类型

PHP 支持以下几种数据类型:

  • String(字符串)
  • Integer(整型)
  • Float(浮点型)
  • Boolean(布尔型)
  • Array(数组)
  • Object(对象)
  • NULL(空值)
  • Resource(资源类型)
$name="wuhu"; // string$sex=true;// bool$age=24; // int$score=59.9;// floatvar_dump($name);// 输出变量的类型和长度?>
2.6.1 bool

布尔类型,这个是最简单的类型,布尔型表达了true 或false,即真或假。

// bool.php$a = true;$b = false;var_dump($b);

进⾏if 判断的时候,如果表达式不是bool 类型的值,会有类型转换,其他类型的值转换成布尔类型的值。⼤多数的值是被认为是true,少部分以下值被认为是false。

bool(false)int(0)float(0)string(0)""string(1)"0"array(0){}NULL
2.6.2 int

整型,存储整数。

$age = 24;var_dump($age);
2.6.3 float

浮点型,也称double,指包含⼩数的数。

$score = 99.9;var_dump($score);
2.6.4 string

字符串是有序的⼀系列字符。字符串可以使⽤单引号、双引号、定界符三种⽅法来定义。

单引号定义字符串

  • 单引号定义的字符串中不能包含单引号,如果包含,需要转义 \'
  • 单引号中的变量不会被识别。
// string.php$name = 'XIU';$msg = 'Welcome, ';echo $msg.$name; // . 运算符在PHP中代表字符串拼接。

双引号定义字符串

  • 双引号中可以包含单引号,双引号中包含双引号,需要转义 \"

  • PHP 会解析双引号之间的变量,最好⽤ {} 将变量名括起来。

// string.php$username = "XIU";$message = "Welcome, {$username}";echo $message;

定界符定义字符串

当需要定义输出⼤段字符串时,并且该字符串中有超多特殊字符,包括单引号,双引号等等。

定界符定义的字符串中的单双引号,还有⼤部分特殊字符不需要进⾏转义。

定界符开始标识符 <<< + 标志 ,标志建议⼤写字⺟,并且具备⼀定的语义。

定界符结束标示符 标志 + ; ,结束标识符之后,只能有换⾏回⻋。

标志的命名规则,字母、数字、下划线,并且不能以数字开始。

定界符中的 $ 同样会识别成变量,变量名要⽤ {} 括起来。

// string.php$name = "XIU";$msg = <<<XIU

My Name is {$name}!

XIU;
echo $msg;

2.7 php常量

常量是⼀个简单值的标示符,如其名称所暗示的。在PHP 脚本执行期间⼀个常量⼀旦被定义,就不能被改变或者取消定义,常量的作用域是全局,常量包含bool,int,float,string 类型的数据。

常量值被定义后,在脚本的其他任何地方都不能被改变。

    define("USERNAME","WUHU");    // USERNAME='WUHU';    // unset("USERNAME");    echo USERNAME;?>

2.8 预定义常量

PHP已经定义好了,可以直接使用的常量,一般代表特殊的含义。常量是预定义常量中比较特殊的一类。

常量名常量值
FILE当前的文件名,完整的路径。
LINE当前行号
FUNCTION当前的函数名
CLASS当前的类名
METHOD当前对象的方法名
PHP_OS操作系统类型
PHP_VERSION当前PHP的版本
DIRECTORY_SEPARATOR目录的分隔符

2.9 换行

    $a = 123;    $b = 321;    echo $a;echo "
"
; echo $b;?>

2.10 注释

单行注释

phpinfo();  // 该函数会显示PHP 配置信息# 该函数会显示PHP 配置信息

多行注释

phpinfo();

3. 运算符

3.1 算数运算符

例子名称结果
-$a取反$a的负值
a + a+ a+b加法 a 和 a和 ab的和
a − a- ab减法 a 和 a和 ab的差
a ∗ a* ab乘法 a 和 a和 ab的积
a / a/ a/b除法 a 除以 a除以 a除以b的商
a a% ab取模,取余 a 除以 a除以 a除以b的余数
++$a前加 a 的值加一,然后返回 a的值加一,然后返回 a的值加一,然后返回a
$a++后加返回 a ,然后将 a,然后将 a,然后将a的值加一
–$a前减 a 的值减一,然后返回 a的值减一,然后返回 a的值减一,然后返回a
$a–后减返回 a ,然后将 a,然后将 a,然后将a的值减一
<meta charset = "utf-8"><h1>算术运算符</h1><?php    $a = 10;    $b = 3;    // echo -$a;    // echo $a + $b;    // echo $a - $b;    // echo $a * $b;    // echo $a / $b;    // echo $a % $b;    // echo ++ $a;    // echo $a ++;    // echo -- $a;echo $a--;

3.2 字符串运算符

字符串运算符完成的主要工作,就是字符串拼接。
在JS语言中,字符串拼接用+,运算符 . 的作用是访问对象中的居性或者方法。

PHP中,使用**.进行字符串拼接**。PHP中**.也叫连接运算符**。

    $name="XIU";    $str= "Hello,".$name;echo $str;?>

3.3 赋值运算符

左边的操作数必须是变量,右边可以是一个表达式,也可以是一个值,一个变量等等。
作用:将右边表达式的值阻给左边变量。

二元运算符
=
+=
-=
*=
/=
%=
.=

赋值运算符

3.4 比较运算符

对操作数(按照比较运算符的安求规则)进行比较后,得到返回值(boolean)。
如果比较出的结果满足比较运算符的要求那么结果就是rue(真,成立,满足),否则就是lse(假,不成立,不满
足)。

例子说明
a = = a== a==b等于
a = = = a=== a===b全等
a ! = a!= a!=b不等
a < > a<> a<>b不等
a ! = = a!== a!==b不全等
a < a< a<b小于
a > a> a>b大于
a < = a<= a<=b小于等于
a > = a>= a>=b大于等于

比较运算符

$b; $c = $a !== $b; $c = $a > $b; $c = $a >= $b; $c = $a < $b; $c = $a <= $b; var_dump($c);?>

PHP 中规定:

  • 使⽤echo 输出布尔类型值的时候 echo true ; 它在⻚⾯中会输出1。

  • echo false ; 它会在⻚⾯中什么都不输出。

建议使用var_dump() 来输出更明了的结果。

3.5 逻辑运算符

逻辑运算符例子解释运算符法则
and &&$a and $b $a && $b逻辑"与"运算
or ||$a or $b $a|| $b逻辑"或"运算
xor$a xor $b逻辑"异或"运算相同为假,不同为真。
!!$a逻辑"⾮"运算

逻辑运算符

3.6 ?:

$a = 10;$b = 20;$max = $a > $b ? $a : $b;echo $max;

3.7 反引号

⾃动适配系统命令,调⽤系统命令。

// ``.php$cmd = "whoami";$cmd = "ipconfig";$cmd = "net user";echo "
".`$cmd`;

解析:

  • "
    ": 这是一个 HTML 标签,表示预格式化文本。在浏览器中渲染时,该标签会保留文本中的空格、换行符和其他空白字符。
  • .:表示拼接字符串。
  • `` (反引号):这是 PHP 中执行系统命令的语法。反引号会将其中的命令执行,并将其输出作为字符串返回给 PHP。
  • $cmd:这是一个变量,包含要执行的命令的字符串。该命令可以是任何系统命令或可执行文件。

执行该 PHP 代码片段后,$cmd 中的命令会被执行,并将其输出内容包装在

 标签中。然后,将整个字符串作为 HTML 页面的一部分输出,使得输出在浏览器中以预格式化文本的形式呈现。

3.8 @

屏蔽表达式可能发生的错误。

echo @$username;

解析:

  • @:这是 PHP 中的错误控制运算符。它用于抑制可能发生的错误或警告消息,使得在出现错误时不会中断程序的执行。
  • 使用 @ 错误控制运算符可以防止在 $username 未定义的情况下产生警告或错误消息。如果不使用 @ 运算符,当 $username 未定义时,PHP 会生成一个警告消息。通过使用 @ 运算符,可以阻止该警告消息的显示。

4. PHP流量控制

4.1 顺序执行

自上而下的执行即可,这也是PHP 语句的默认执行过程。对这个执行过程没有控制。

echo "This is first echo";echo "
"
;echo "This is second echo";echo "
"
;echo "This is third echo";

4.2 分支执行

分支执行可以根据表达式的值是否为True 来选择执行某些代码,PHP 的分支执行主要通过if 和switch 来实现。

4.2.1 if

结构

if(){//判断条件,如果判断条件的返回值为True,则执行语句块1,否则执行语句块2//语句块1}else{//语句块2}

单向条件:

// if.php$score = 59.9;if($score >= 60 ){echo "congratulations";}

双向条件:

// if.php$score = 99.9;if($score >= 60 ){echo "congratulations";}else{echo "Sorry, you may need help!";}
4.2.2 switch

功能与if 语句类似,当需要多向分支结构时,并且判断条件是具体的某个值,此时大多使用switch 结构。

$day = 7;switch($day){    case 1:        echo "Monday";        break;    case 2 :        echo "Tuesday";        break;    case 3 :    echo "Wednesday";    break;    case 4 :    echo "Thursday";    break;    case 5:    echo "Friday";    break;    case 6:    echo "Saturday!";    break;    case 7:    echo "Sunday!";    break;    default:    echo "Error!";}?>

注意:

  • 表达式的值最好是整形或者字符串,

  • 不要忘记break 语句,⽤来跳出switch 语句。每个case 语句后⾯都加上break。

  • 如果某个case 语句后⾯并没有接语句块,那么就说明这个语句块的内容是同下。

  • case 后⾯的语句块是不需要 {} 括起来的。

4.3 判断条件

在编写if 语句时,要求判断条件是⼀个布尔类型的值。但是实际应⽤中,是⽆法保障这⼀点。如果判断条件是⾮布尔类型的值,就需要强制转换成布尔类型的值。

// if.php$flag = 0;$flag = 0.0;$flag = "";$flag = "0";$flag = array();$flag = NULL;$flag = "XIU";$flag = true;$flag = 24;$flag = 59.9;if($flag){echo var_dump($flag)." means Ture";}else{echo var_dump($flag)." means False";}

4.4 循环执行

计算机最擅⻓的功能之⼀就是按照规定的条件,重复执⾏某些操作,这是程序设计中最能发挥计算机特⻓的程序结构。

4.4.1 while

结构

while(表达式){//当表达式的值为真的时候,执行循环体。//循环体}

当表达式的值为true,就执⾏下⾯的循环体。当循环体执⾏结束之后,继续判断表达式的值是true 还是false,如果还是true,那么就继续执⾏循环体。直到,这个表达式的值为false,那么这个while 语句就执⾏结束了。

例⼦:输出1 到100 数字。

// while.php$a = 1;while ($a <= 100) {echo $a."
"
;$a ++;}
4.4.2 do while
// do-while.php$a = 1;do{echo $a."
"
;$a ++;}while ($a <= 10);
4.4.3 for

语法格式

for(;;){//计数器;判断条件;自增或自减//循环体}

例⼦:输出1 到1000 数字。

// for.phpfor ($i=0; $i < 1000 ; $i++) {echo $i."
"
;}

4.5 特殊流程

4.5.1 break

break ⽤于switch,for,while,do…while,foreach 等的中断。后⾯可以接上⼀个数字来表⽰跳出⼏层循环。默认不加就是跳出当前循环语句。

// break.phpfor ($i=1; $i <= 100; $i++) {if ($i % 17 == 0) {break;}echo $i."
"
;}echo "PHP is DONE!";
4.5.2 continue

continue 只能⽤在循环语句,轮空本次循环,并不是结束整个循环语句。

// continue.phpfor ($i=1; $i <= 100; $i++) {if ($i % 17 == 0) {continue;}echo $i."
"
;}echo "PHP is DONE!";
4.5.3 exit

exit 表⽰结束当前整个PHP 脚本的执⾏。同die() 语句。

// exit.phpfor ($i=1; $i <= 100; $i++) {if ($i % 17 == 0) {// exit;// exit("PHP is OVER");// die("PHP is OVER");die();}echo $i."
"
;}echo "PHP is DONE!";

$i.“
”;
}

### 4.5 特殊流程 #### 4.5.1 breakbreak ⽤于switch,for,while,do...while,foreach 等的中断。后⾯可以接上⼀个数字来表⽰跳出⼏层循环。默认不加就是跳出当前循环语句。```php// break.phpfor ($i=1; $i <= 100; $i++) {if ($i % 17 == 0) {break;}echo $i."
";}echo "PHP is DONE!";
4.5.2 continue

continue 只能⽤在循环语句,轮空本次循环,并不是结束整个循环语句。

// continue.phpfor ($i=1; $i <= 100; $i++) {if ($i % 17 == 0) {continue;}echo $i."
"
;}echo "PHP is DONE!";
4.5.3 exit

exit 表⽰结束当前整个PHP 脚本的执⾏。同die() 语句。

// exit.phpfor ($i=1; $i <= 100; $i++) {if ($i % 17 == 0) {// exit;// exit("PHP is OVER");// die("PHP is OVER");die();}echo $i."
"
;}echo "PHP is DONE!";

来源地址:https://blog.csdn.net/weixin_58783105/article/details/132347334

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

后端代码审计——PHP基础

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

phpbugs代码审计基础详解

代码审计不会,学习知识需要积累一下基础,因此来搭建php_bugs进行相关学习,题解如下,希望能对在学习代码审计的同学们有所帮助
2022-11-16
2023-10-20
2023-09-01

怎样学习PHP代码审计

怎样学习PHP代码审计,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。以Emlog 6.0 beta版本为引,一篇关于PHP语言CMS的代码审计文章,详细记录代
2023-06-17

PHP代码审计:专家指导,提升代码质量

代码审计是提高代码质量和安全性不可忽视的重要步骤。本文将深入解析PHP代码审计,帮助掌握构建安全可靠的代码所需的关键技巧。
PHP代码审计:专家指导,提升代码质量
2024-02-09

PHP代码审计:快速发现并修复代码漏洞

PHP代码审计是一种系统的方法,用于检查代码中的漏洞和安全问题。通过代码审计,可以快速发现并修复潜在的代码漏洞,从而提高代码安全性。
PHP代码审计:快速发现并修复代码漏洞
2024-02-09

PHP 代码审计的艺术:代码质量的守卫者

PHP 代码审计,作为代码质量的卫士,旨在识别源代码中潜在的缺陷和不良设计,提升代码质量和可靠性。本文将带您领略代码审计的精妙之处,让您成为代码质量的守护者。
PHP 代码审计的艺术:代码质量的守卫者
2024-02-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录