后端代码审计——PHP基础
文章目录
PHP基础
PHP定义:一种服务器端的HTML脚本/编程语言,是一种简单的、面向对象的、解释型的、健壮的、安全的、性能非常之高的、独立于架构的、可移植的、动态的脚本语言。是一种广泛用于 Open Source(开放源代码)的尤其适合Web开发并可以嵌入HTML的多用途脚本语言。它的语法接近C,Java和Perl,而且容易学习。该语言让Web开发人员 快速的书写动态生成的网页。
1. php格式
// PHP 代码?>
例如:
// PHP 的开始标记,表示从此标记开始,进入PHP 模式。 phpinfo();// PHP 代码?>// PHP 的结束标记,表示从开始标记到结束标记,之间的内容是PHP 模式 // 之后的内容依然被PHP 解释引擎认为是纯文本字符串。
- phpinfo是一个函数(功能),这个函数会显示一个当前电脑(服务器)的详细的PHP信息。
- 电脑需要我们人为的告诉他代码写完了。用分号(;)来告诉他代码写完了。因此只要写完一段代码,就需要在后面加分号。
- 而前后两行的回车空行,是为了让代码更加好看,避免叠在一起,看着不舒服。其实中间有多少个回车空行都没有关系的。PHP的语法解释器(PHP最核心部分)不会处理这些空行的。
安全问题:如果是⼀个在线的⽹站能够看到phpinfo ⻚⾯,说明存在敏感信息泄露漏洞,这个漏洞需要体现在后⾯的渗透测试报告中。
2. php变量
变量是⽤于临时存储值的容器,通过变量名能够访问到变量值,变量包含四个部分内容:
-
变量名
-
变量值
-
数据类型
-
内存空间
PHP 脚本语言是⼀种弱数据类型语言,变量或常量的数据类型由程序的上下⽂决定,给⼀个变量赋予什么样的值,就是什么数据类型。
2.1 变量声明与初始化
变量命名
$ + 变量名
变量名是严格区分⼤⼩写的。以下变量是完全不同的:
$name;$Name;$NAME;
例如:
$iphone7 = 5880; $iphone7plus = 6088; echo $iphone6 + $iphone7plus; //echo是在PHP里面最常用的一个输出、显示功能的命令?>
2.2 php变量特点
- 必须要以
$
开始 ,如变量x
必须要写成$x
。 - 变量的首字母不能以数字开始。
- 变量的名字区分大小写。
- 变量不要用特殊符号、中文,_不算特殊符号。
- 变量命名要有意义(别写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 = <<<XIUMy 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和 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% 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