代码审计之PHP基础铺垫

简介: 代码审计之PHP基础铺垫

1、标记

<?php 和 ?> 是PHP标记中的一种(标准标记),专门用来包含PHP代码;

echo用于输出一个或多个字符串;

结束标记前的最后一条语句可以省略分号。

除了标准标记,还有短标记,ASP式标记,Script标记

短标记和ASP式标记都是需要先开启才能使用;

ASP式标记和Script标记我们一般不推荐使用,了解即可。

注意:

若脚本含有XML语句,应避免使用短标记,因为“<?”是XML解析器的一个处理指令,会造成混淆。

2、注释

PHP支持3种:

C++风格的单行注释 “//”

C风格的多行注释 “/*......*/”

Shell风格的注释 “#”

3、输出语句

常用的有:echo,print,var_dump(),print_r()

<?php
echo 1+2,'Q';
print 'you';
echo '<br/>'; //<br/>是HTML标签,表示换行
print_r('hello');
echo '<br/>';
var_dump(2,3);
var_dump('Myon');
?>

echo 和 print 用法相同,但前者可以多个输出(多个数据间用逗号分隔),后者只能输出一个值;


print_r()是PHP的内置函数,可以输出任意类型的数据;


var_dump()不仅可以打印一个或多个任意类型数据,还可以获取数据的类型和元素个数。


下面是运行结果:

4、关键字

PHP中保留了很多关键字

例如,class关键字用于定义一个类;

const关键字用于定义常量;

function关键字用于定义一个函数。

5、常量的定义与使用

可以通过define()函数或者const关键字实现

<?php
define('PAI',3.14);
define('R',5,true);
echo PAI,"\n"; //echo输出多个数据时用逗号分隔,至于为什么换行符用双引号引而不是单引号后面解释
echo R,"\n";
echo r,"\n";
const R = 6;
const D =2*R;
echo D;
?>

运行结果:

define()函数第一个参数表示常量名称,第二个参数表示常量值;

第三个参数是可选的,用于指定常量名是否对大小写敏感,可设置为true或false,


默认是false,即会对大小写敏感。


我们上面将 ‘R’ 设置为true,则对大小写不敏感,后面输出r也是可以的,结果一样。


const关键字定义常量时,只需在后面跟上常量名称,用“=”进行赋值即可。

6、预定义常量

除自定义常量外,PHP中还提供了很多预定义常量:

常量名 功能
__FILE__ 默认常量,PHP程序文件名
__LINE__ 默认常量,PHP程序行数
PHP_VERSION 内建常量,PHP程序的版本
PHP_OS 内建常量,执行PHP解析器的操作系统名称
TRUE 该常量是一个真值(true)
FALSE 该常量是一个假值(false)
NULL 一个null值
E_ERROR 该常量指到最近的错误处
E_WARNING 该常量指到最近的警告处
E_PARSE 该常量指到解析语法有潜在问题处
E_NOTICE 该常量为发生不寻常处的提示但不一定是错误处

看例子 :

<?php
echo __FILE__; //当前文件路径
echo '<br>';  //换行
echo PHP_VERSION;  //当前PHP版本
echo "\n";  //换行
echo PHP_OS;  //当前操作系统
echo PHP_EOL;  //换行
echo __LINE__;  //程序中的当前行号
?

看例子 :

<?php
echo __FILE__; //当前文件路径
echo '<br>';  //换行
echo PHP_VERSION;  //当前PHP版本
echo "\n";  //换行
echo PHP_OS;  //当前操作系统
echo PHP_EOL;  //换行
echo __LINE__;  //程序中的当前行号
?>

运行结果:

使用预定义常量可以很方便的获取到当前文件的路劲、PHP版本、操作系统等信息

顺便我们也介绍了PHP中三种常见的换行方式:

echo '<br>';

echo "\n";

echo PHP_EOL;

7、变量的赋值(传参赋值与引用赋值)

默认是传值赋值,即将“=”右边的数据赋值给左边的变量

<?php
$n1 = 10; //定义变量$n1并赋值为10
$n2 = $n1;  //定义变量$n2,并将$n1的值赋给$n2
$n1 = 100;  //修改$n1的值为100
echo $n1; 
echo "\n";
echo $n2;
?>

运行结果:

可以看到,后面修改变量$n1的值但是并没有改变变量$n2的值

而引用赋值就是在要赋值的变量前添加“&”符号

我们对上述代码稍作修改

<?php
$n1 = 10;
$n2 = &$n1;  //添加&,变为引用赋值
$n1 = 100;
echo $n1;
echo "\n";
echo $n2;
?>

可以看到修改$n1的值,$n2的值也随之改变

引用赋值就相当于给变量起了一个别名(和C++很像)

8、可变变量

为了方便在开发时动态地改变一个变量的名称


通过可变变量,可以将另一个变量的值作为该变量的名称


通过在变量前多加一个美元符号“$”来实现


(我最开始看这里是没理解的,我老是想给变量hello加上两个美元符号,其实它的意思是当我们定义好了一个可变变量,我们在用到它的时候可以用多加一个$的方式来调用这个变量,并不是在变量的值上面去多加美元符号)

来看一个简单的例子:

<?php
$a = 'hello';
$hello = 'Myon'; //将变量$a的值作为该变量的名称
echo $a,' ',$$a;
echo "\n";
echo $$a;
echo "\n";
echo $hello;
?>

运行结果:

我们可以看到 $$a 和 $hello的值是一样的

注意:

若变量$a的值是数字,则可变变量$$a就会出现非法变量名的情况

9、双引号和单引号的区别

双引号中的字符串会被解析,而单引号中的字符串则会原样输出。

<?php
$Num = 10;
echo "$Num =",$Num;
echo "\n";
echo '$Num =',$Num;
?>

10、heredoc结构和nowdoc结构

都以“<<<”开始,后跟标识符名称;

heredoc的标识符没有引号,而nowdoc的标识符必须使用单引号包裹;

结束时所引用的标识符名称与开始时相同。

<?php
$name = 'PHP';
$heredoc=<<<EOD
<ul>
  <li>$name 是世界上最好的语言!</li>
  <li>$name is the best programming language in the world !</li>
</ul>
EOD;
echo $heredoc;
$nowdoc = <<<'EOD'
<ul>
  <li>$name是世界上最好的语言!</li>
  <li>$name is the best programming language in the world!</li>
</ul>
EOD;
echo $nowdoc;

heredoc结构的字符串会解析其中的变量,nowdoc结构中的变量会被原样输出。

可以类比双引号和单引号

11、其他符号

“==”是比较运算符,用于比较左右两个值是否相等;

“.”是字符串连接符,用于连接两个字符串。

<?php
echo '123'.'ABC';
echo "\n";
var_dump(0==false);
?>

目录
相关文章
|
6月前
|
安全 小程序 PHP
PHP代码审计(七)Rips源代码审计系统使用教程
上一篇中提到的Seay源代码审计系统是由C#编写的winform程序,现在已经停止更新了,但是,还是比较好用的。 PHP代码审计还有另一个工具,也是一个神器Rips
218 0
|
6月前
|
安全 小程序 PHP
PHP代码审计(五)PHP代码审计方法与步骤
(1):获取到网站源码(这就是废话……) (2):将网站部署到你自己的环境中,能运行。 这里特殊说明一下我的习惯,我本地的环境与线上的环境基本上保持一致,这样在本地审计及线上部署的时候能发现更多的问题。不建议说是随便搭个环境能跑起来就行,这样不是很严谨。 (3):拿到源码之后,浏览大概的项目结构。
79 0
|
6月前
|
Shell PHP Windows
PHP代码审计(四)PHP文件操作函数(2)
改变文件所有者。如果成功则返回 TRUE,如果失败则返回 FALSE。 语法:chown(file,owner)
45 0
|
6月前
|
安全 Unix Shell
PHP代码审计(四)PHP文件操作函数(1)
改变文件所有者。如果成功则返回 TRUE,如果失败则返回 FALSE。 语法:chown(file,owner)
47 0
|
6月前
|
安全 小程序 PHP
PHP代码审计(六)Seay源代码审计系统使用教程
www.cnseay.com/ 当然,这个已经不能访问了。 软件的版本比较早,需要.NET framework3.5框架,我这里是软件启动的时候自动提醒安装,如果没有自动提醒,那么你需要手动安装.NET frameWork3.5框架,否则,程序应该是没有办法运行。
566 0
|
1月前
|
PHP
【攻防世界】easyphp(PHP代码审计)
【攻防世界】easyphp(PHP代码审计)
|
6月前
|
小程序 Shell PHP
PHP代码审计(四)PHP文件操作函数(3)
改变文件所有者。如果成功则返回 TRUE,如果失败则返回 FALSE。 语法:chown(file,owner)
29 0
|
6月前
|
SQL 小程序 Shell
PHP代码审计(三)php中代码执行&&命令执行函数
string system(string command,int &return_var) 可以用来执行系统命令并直接将相应的执行结果输出 system() 输出并返回最后一行shell结果。
60 0
|
6月前
|
安全 小程序 PHP
|
6月前
|
小程序 前端开发 Linux
PHP代码审计(一)常见ini配置
我这里大概看了一下常见的重要的php.ini配置。 具体详细配置请参照官方网站:
73 0