ctf web方向与php学习记录5之eval()初见

由于bugku的本地包含无法打开,故找了其他人解题的过程以供学习。ctf web方向与php学习记录5之eval()初见_第1张图片

https://www.cnblogs.com/0yst3r-2046/p/11062755.html
在本次学习中我将我学习的相关的原理和知识分享给大家,如下。
一,初见eval,智商开始下线
eval()函数中的eval是evaluate的简称,这个函数的作用就是把一段字符串当作PHP语句来执行,一般情况下不建议使用容易被黑客利用。
(1)定义和用法
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是是完整,合法的PHP语句,且eval函数的参数的字符串末尾一定要有分号,在最后还要另加一个分号。
如果没有在代码字符串中调用 return 语句,则返回 NULL。
如果代码中存在解析错误,则 eval() 函数返回 false。
(2)语法
void eval(phpcode<即string code_str>);
phpcode ——必需。规定要计算的 PHP 代码。
无返回值。
(3)提示和注释
1返回语句会立即终止对字符串的计算。
2注意单引号,双引号和反斜杠的运用。如果参数中带有变量时,并且变量有赋值操作的话,变量前的$符号钱一定要有\来转义。如果没有赋值操作可以不需要。
举例:

$a=100;//$a=100是一个常量,不存在赋值一说。
eval("echo\$a;");
//因为没有赋值操作,所以可以不用\来转义$.等同于以下代码:
$a=100;
eval("echo $a;")

3注意在命令式字符串(包括分号)两边必须要有双引号或者根据需要用单引号,如果参数只有一个变量则可以不用。否则报错。
命令式字符串是指:字符串中包括echo、print之类的命令的时候。
4单引号里的变量名就不会被转义,双引号里的变量名会被转义。
举例

eval("$a=55;");
eval('$a=55;');

5转义字符(,"",‘’)的使用详见收藏夹“转义字符”
举例:

<?php
$string = "beautiful";
$time = "winter";
 
$str = 'This is a $string $time morning!';
echo $str. "
"
; eval("\$str = \"$str\";"); echo $str; ?>

输出:
This is a $string $time morning!
This is a beautiful winter morning!

二,get与post重见
HTML表单(form)有两种提交方式GET和POST,采用哪种方式提交表单数据由form元素的method属性值决定。这两种方式在数据传输过程中分别对应HTTP协议的GET和POST方法。
GET:对于GET方式提交的数据,可以由php中的$_GET数组进行接收。
$start= $_GET[“start”];
在这里插入图片描述

POST:对于POST方式提交的数据,可以由php中的$_POST数组进行接收。
同上使用方法。
ctf web方向与php学习记录5之eval()初见_第2张图片

你可能感兴趣的:(php)