跟老韩学安全:戳我以下!
目录
我们在学习php代码审计之前,需要对php有一定的基础认识,在不要求做框架的代码审计的情况下,我们可以要求自己学习到具有基本的代码阅读能力也是可以(当然如果对自己仅仅只有这个要求,可以说要求有点低。如果对自己严格要求,那么是不建议你只是这么要求你自己的)。
我们在学习php代码审计或开发的过程中,由于官方提供了规范且详细的帮助手册,在过程中如果遇到任何自己生疏的语法函数可以通过官方查询,比如官方(http://www.php.cn)在右上角提供的搜索功能:
PHP基础
PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言,PHP 脚本是在服务器上执行后端脚本语言。
PHP基础语法:
在开始学习php之前,我们需要了解php的一些规范,如php文件扩展名、php的文件内容中的语法规范,如:
<?php echo "helloworld!"; ?> |
我们的php脚本格式均是由<?php作为开头,以?>作为结尾,当然我们也可以省略掉结尾的?>,所以很多时候我们看到php脚本后面没有?>不用太惊讶,如:
<?php echo "helloworld!"; |
在php的配置文件(php.ini)中有一个short_open_tag的值,开启以后可以使用PHP的短标签:<? ?>,如:
<? echo "helloworld!"; ?> |
需要注意我们的每一行代码结尾需要以;进行结束。
PHP注释:
注释是不让后端语言解释的一种方式,我们可以简单理解为,代码是给机器看的,而注释是给程序员看的,也就是说我们写完一段代码后,这段代码中的代码是会被执行的而注释中的内容是不会被执行的,如:
<?php echo "helloworld!"; //这是一个单行注释 ?> |
以上这段代码// 后面的内容则不会被执行,只有在我们查看源代码的时候才可以看到这段内容;执行结果如下:
那么// 仅仅只能注释一行内容,如果我们需要注释多行内容的话我们可以使用/**/来进行注释,注释的内容则是在星号之间,如:
<?php /* 你好 我是一个注释 */ echo ?> |
那么在/**/之间的内容则是注释,则不会被程序执行,而我们的hello!则会被代码执行并进行输出。
除了以上两种注释,我们还有一种注释,那么他与多行注释一样,不一样的地方在于在每一行开头都会有一个星号,如:
<?php /* *你好 *我是一个注释 */ echo "hello!"; ?> |
PHP屏蔽错误:
在有的时候我们php代码没有写错的情况下会出现页面现错误提示的情况,如:
这里是由于我们代码中有个get的id参数进行传参,但是我们在请求中并没有给予id参数导致的错误,我们可以使用@ 符号使他去屏蔽函数信息产生的一些错误或警告等情况,如:
PHP变量:
变量我们可以理解为存储容器,或者通俗一点来讲,就是将一个东西放到另一个东西里面,比如我需要把数字1放到a数字中,当我们提取a的时候则会提取到1。比如:
<?php $a=1; //将1存储到$a中,这里需要注意我们不能把数字当作变量。 //$1=1; 这是一个错误的示范。 echo $a; //echo 输出 $a。 ?> |
如以上代码,$a的值就是1,echo是官方定义的输出函数,输出$a,那么这个时候1在$a中,取$a则等于取了1,效果如下:
PHP数据类型:
在php中不同的数据类型能做的事不同,并且在不同的数据类型中,我们的格式也不一样,所以我们需要了解php的数据类型及作用,具体数据类型分以下几种:
标量数据类型 int 整数型 string 字符串型 Float 浮点型 Boolean 布尔型 复合数据类型 array 数组 object 对象类型 特殊数据类型 Resource 资源 Null 空值 |
int(整数型):
整数型数据类型种,只能存放整数,如:1、2、3、4、5、6、7、8、9、0等整数数字或-1、-2、-3、-4等负数的整数类型。
实例代码如下:
<?php $a=1; var_dump($a); ?> |
这里我们使用var_dump函数打印除了$a变量的数据类型。
var_dump函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
String(字符型):
在字符型数据种,需要将内容输入到引号中,如"hello",在这里面我们不光可以输入字母符号,还可以输入数字及汉字,注意:数字在引号中,不再作为整数型数据,而是作为字符串型数据解释,如:
<?php $a="1"; var_dump($a); ?> |
这里我们使用的是双引号,当然也可以使用单引号,不过这里注意,单引号与双赢好是由区别的,双引号里面的字段会经过编译器解释,然后再当作HTML代码输出,而单引号里面的不进行解释,直接输出,举个例子:
<?php $a='hello,han'; echo $a; echo "</br>"; echo '$a'; echo "</br>"; echo "$a"; echo "</br>"; var_dump($a); ?> |