文件包含
包含就是执行,脚本执行
file_include.php 代码
<?php
include('1.txt');
?>
txt 文件代码
<?php phpinfo();?> //暴出PHP版本
第二种
文件上传类
-
代码自主写
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
<form action="" method="post" enctype="multipart/form-data">
<p><input type="file" name="upload"></p>
<p><input type="submit" value="上传"></p>
</form>
</body>
</html>
<?php
$name=$_FILES['upload']['name'];
$type=$_FILES['upload']['type'];
$size=$_FILES['upload']['size'];
$error=$_FILES['upload']['error'];
$tmpname=$_FILES['upload']['tmp_name'];
echo $name."<br>";//点为PHP字符串输出的连接符
echo $type."<br>";
echo $size."<br>";
echo $error."<br>";
echo $tmpname."<br>";
if ($type=='image/jpg'){
if(!move_uploaded_file($tmpname,'upload/'.$name)){
echo "文件上传失败";
}
else{
echo "文件上传成功!";
echo '/upload/'.$name;
}
}
else{
echo "文件类型不正确!";
}
?>
上传文件$_FILES 数组的知识点:
$_FILES['myFile']['name'] 客户端文件的原名称
$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。
$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)
UPLOAD_ERR_OK
值:0; 没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE
值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上传。
UPLOAD_ERR_NO_FILE
值:4; 没有文件被上传。
值:5; 上传文件大小为0.
-
编辑器引用
在浏览器中下载ueditor编辑器,利用代码插入到网页当中
-
引用开发框架实现
thinkphp
文件下载
-
http://http://www.xiaodi.com/soft/软件.zip
-
http://www.xiaodi.com/soft/dowm.php?filename=软件.zip
文件读取函数
<?php
//自定义文件文件夹读取函数
function getfilename(){
$dir=getcwd(); //获取当前脚本路径
$file=scandir($dir.'/soft'); //扫描路径+/soft
foreach ($file as $value){ //数组遍历//
if($value != '.' && $value != '..') {
$arr[] = $value;
echo $value.'<br>';
}
}
}
$_server[ ]函数知识点
$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]//浏览器语言
$_SERVER[‘REMOTE_ADDR’] //当前用户 IP 。
$_SERVER[‘REMOTE_HOST’] //当前用户主机名
$_SERVER[‘REQUEST_URI’] //URL
$_SERVER[‘REMOTE_PORT’] //端口。
$_SERVER[‘SERVER_NAME’] //服务器主机的名称。
$_SERVER[‘PHP_SELF’]//正在执行脚本的文件名
$_SERVER[‘argv’] //传递给该脚本的参数。
$_SERVER[‘argc’] //传递给程序的命令行参数的个数。
$_SERVER[‘GATEWAY_INTERFACE’]//CGI 规范的版本。
$_SERVER[‘SERVER_SOFTWARE’] //服务器标识的字串
$_SERVER[‘SERVER_PROTOCOL’] //请求页面时通信协议的名称和版本
$_SERVER[‘REQUEST_METHOD’]//访问页面时的请求方法
$_SERVER[‘QUERY_STRING’] //查询(query)的字符串。
$_SERVER[‘DOCUMENT_ROOT’] //当前运行脚本所在的文档根目录
$_SERVER[‘HTTP_ACCEPT’] //当前请求的 Accept: 头部的内容。
$_SERVER[‘HTTP_ACCEPT_CHARSET’] //当前请求的 Accept-Charset: 头部的内容。
$_SERVER[‘HTTP_ACCEPT_ENCODING’] //当前请求的 Accept-Encoding: 头部的内容
$_SERVER[‘HTTP_CONNECTION’] //当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER[‘HTTP_HOST’] //当前请求的 Host: 头部的内容。
$_SERVER[‘HTTP_REFERER’] //链接到当前页面的前一页面的 URL 地址。
$_SERVER[‘HTTP_USER_AGENT’] //当前请求的 User_Agent: 头部的内容。
$_SERVER[‘HTTPS’]//如果通过https访问,则被设为一个非空的值(on),否则返回off
$_SERVER[‘SCRIPT_FILENAME’] #当前执行脚本的绝对路径名。
$_SERVER[‘SERVER_ADMIN’] #管理员信息
$_SERVER[‘SERVER_PORT’] #服务器所使用的端口
$_SERVER[‘SERVER_SIGNATURE’] #包含服务器版本和虚拟主机名的字符串。
$_SERVER[‘PATH_TRANSLATED’] #当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER[‘SCRIPT_NAME’] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER[‘PHP_AUTH_USER’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER[‘PHP_AUTH_PW’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER[‘AUTH_TYPE’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型
直连下载(安全)限制下载文件类型
//自定义文件直连下载
function filenameurl($name){
$url='http://'.$_SERVER['HTTP_HOST'].'/blog/soft/'.$name;
header("location:$url"); //文件重定向 自动打开链接
}
传参下载(不安全) 文件可以任意下载
文件删除
文件删除
//自定义文件删除函数
function filedel($name){
@unlink($name);
文件夹删除
//自定义文件夹删除函数
function filedeldir($dir){
@rmdir($dir);
}
文件读取
文件读取
<h1>读取操作</h1>
<form action="" method="post">
<input type="text" name="r">
<input type="submit" value="读取">
</form>
<?php @$name=$_POST['r'];fileread($name);?>
//自定义文件读取函数
function fileread($name){
$f=fopen($name,"r");
$code=fread($f,filesize($name));
echo $code;
fclose($f);
}
文件增加写入
<h1>写入操作</h1>
<form action="" method="post">
文件:<input type="text" name="w">
内容:<input type="text" name="txt">
<input type="submit" value="写入">
</form>
<?php @$name=$_POST['w'];@$txt=$_POST['txt'];filewrite($name,$txt);?>
//自定义文件写入函数
function filewrite($name,$txt){
$f=fopen($name,"a+");
fwrite($f,$txt);
fclose($f);
}
r | 打开文件为只读。文件指针在文件的开头开始。 |
w | 打开文件为只写。删除文件的内容或创建一个新的文件,如果它不存在。文件指针在文件的开头开始。 |
a | 打开文件为只写。文件中的现有数据会被保留。文件指针在文件结尾开始。创建新的文件,如果文件不存在。 |
x | 创建新文件为只写。返回 FALSE 和错误,如果文件已存在。 |
r+ | 打开文件为读/写、文件指针在文件开头开始。 |
w+ | 打开文件为读/写。删除文件内容或创建新文件,如果它不存在。文件指针在文件开头开始。 |
a+ | 打开文件为读/写。文件中已有的数据会被保留。文件指针在文件结尾开始。创建新文件,如果它不存在。 |
x+ | 创建新文件为读/写。返回 FALSE 和错误,如果文件已存在。 |
PHP连接mysql
<?php
$conn=mysql_connect('localhost','root','root');//连接数据库
mysql_select_db('syguestbook',$conn); //基于数据库连接,连接数据库中的syguesbook表
?>
<?php
include('/config/conn.php');
$s=$_GET['id'];
$sql="select * from sy_guestbook where id=$s";
$result=mysql_query($sql,$conn); //执行$sql语句
echo '你搜索的'."'$s'".'结果如下:';
while($row=mysql_fetch_array($result)){
echo '<br><br><hr>';
echo $row['id'].'<br>';
echo $row['gName'].'<br>';
echo $row['gLogo'].'<br>';
}
文件搜索
<?php
include('/config/conn.php');
$s=$_POST['search'];
$sql="select * from sy_guestbook where id like '%$s%'"; //%通配符
$result=mysql_query($sql,$conn);
echo '你搜索的'."'$s'".'结果如下:';
while($row=mysql_fetch_array($result)){
echo '<br><br><hr>';
echo $row['id'].'<br>';
echo $row['gName'].'<br>';
echo $row['gLogo'].'<br>';
}
弹窗漏洞
alert()--警告框
confirm()--确认框
prompt()--提示框
<script>alert("大飞")</script>
PHP代码审计
$_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址。
$_SERVER["REMOTE_ADDR"] 来取得客户端的 IP地址
由此可以想到,服务器的本地ip地址127.0.0.1
改为127.0.0.1
COOKIE:
身份验证 存储到客户端浏览器内
危险:cookie修改、伪造、盗取
实验
发现包含验证cookie的文件
user为空,重新登录,那就user不为空,自动跳转inde文件
通过篡改cookie实现登录后台
SESSION:
session_start(); 创建一个session会话
身份验证 存储到服务端服务器内
危险:会话劫持