网站设计就业培训,做网站的市场前景,做电脑桌面网站,wordpress搬家问题安全开发 PHP
基础 增#xff1a;insert into 表名(列名 1, 列名 2) value(‘列 1 值 1’, ‘列 2 值 2’); 删#xff1a;delete from 表名 where 列名 ‘条件’; 改#xff1a;update 表名 set 列名 数据 where 列名 ‘条件’; 查#xff1a;select * from 表名 wher…安全开发 PHP
基础 增insert into 表名(列名 1, 列名 2) value(‘列 1 值 1’, ‘列 2 值 2’); 删delete from 表名 where 列名 ‘条件’; 改update 表名 set 列名 数据 where 列名 ‘条件’; 查select * from 表名 where 列名‘条件’; mysqli_connect() 打开一个到 MySQL 的新的连接。 mysqli_select_db() 更改连接的默认数据库。 mysqli_query() 执行某个针对数据库的查询。 mysqli_fetch_row() 从结果集中取得一行并作为枚举数组返回。 mysqli_close() 关闭先前打开的数据库连接。 参考https://www.runoob.com/php/php-ref-mysqli.html
全局变量参考https://www.w3school.com.cn/php/php_superglobals.asp#google_vignette
$_SERVER[‘PHP_SELF’]返回当前执行脚本的文件名。$_SERVER[‘GATEWAY_INTERFACE’]返回服务器使用的 CGI 规范的版本。$_SERVER[‘SERVER_ADDR’]返回当前运行脚本所在的服务器的 IP 地址。$_SERVER[‘SERVER_NAME’]返回当前运行脚本所在的服务器的主机名比如 www.w3school.com.cn。$_SERVER[‘SERVER_SOFTWARE’]返回服务器标识字符串比如 Apache/2.2.24。$_SERVER[‘SERVER_PROTOCOL’]返回请求页面时通信协议的名称和版本例如“HTTP/1.0”。$_SERVER[‘REQUEST_METHOD’]返回访问页面使用的请求方法例如 POST。$_SERVER[‘REQUEST_TIME’]返回请求开始时的时间戳例如 1577687494。$_SERVER[‘QUERY_STRING’]返回查询字符串如果是通过查询字符串访问此页面。$_SERVER[‘HTTP_ACCEPT’]返回来自当前请求的请求头。$_SERVER[‘HTTP_ACCEPT_CHARSET’]返回来自当前请求的 Accept_Charset 头 例如 utf-8,ISO-8859-1$_SERVER[‘HTTP_HOST’]返回来自当前请求的 Host 头。$_SERVER[‘HTTP_REFERER’]返回当前页面的完整 URL不可靠因为不是所有用户代理都支持。$_SERVER[‘HTTPS’]是否通过安全 HTTP 协议查询脚本。$_SERVER[‘REMOTE_ADDR’]返回浏览当前页面的用户的 IP 地址。$_SERVER[‘REMOTE_HOST’]返回浏览当前页面的用户的主机名。$_SERVER[‘REMOTE_PORT’]返回用户机器上连接到 Web 服务器所使用的端口号。$_SERVER[‘SCRIPT_FILENAME’]返回当前执行脚本的绝对路径。$_SERVER[‘SERVER_ADMIN’]该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。$_SERVER[‘SERVER_PORT’]Web 服务器使用的端口。默认值为 “80”。$_SERVER[‘SERVER_SIGNATURE’]返回服务器版本和虚拟主机名。$_SERVER[‘PATH_TRANSLATED’]当前脚本所在文件系统非文档根目录的基本路径。$_SERVER[‘SCRIPT_NAME’]返回当前脚本的路径。$_SERVER[‘SCRIPT_URI’]返回当前页面的 URI。
身份验证-Cookie 使用
1、客户端向服务器发送 HTTP 请求。
2、服务器检查请求头中是否包含 cookie 信息。
3、如果请求头中包含 cookie 信息则服务器使用该 cookie 来识别客户端否则服务 器将生成一个新的 cookie。
4、服务器在响应头中设置 cookie 信息并将其发送回客户端。
5、客户端接收响应并将 cookie 保存在本地。
6、当客户端发送下一次 HTTP 请求时它会将 cookie 信息附加到请求头中。
7、服务器收到请求并检查 cookie 的有效性。
8、如果 cookie 有效则服务器响应请求。否则服务器可能会要求客户端重新登录。
setcookie(): 设置一个 cookie 并发送到客户端浏览器。
unset(): 用于删除指定的 cookie。
身份验证-Session 使用
1、客户端向服务器发送 HTTP 请求。
2、服务器为客户端生成一个唯一的 session ID并将其存储在服务器端的存储器中 如文件、数据库等。
3、服务器将生成的 session ID 作为一个 cookie 发送给客户端。
4、客户端将 session ID 保存为一个 cookie通常是在本地浏览器中存储。
5、当客户端在发送下一次 HTTP 请求时它会将该 cookie 信息附加到请求头中以便 服务器可以通过该 session ID 来识别客户端。
6、服务器使用 session ID 来检索存储在服务器端存储器中的与该客户端相关的 session 数据从而在客户端和服务器之间共享数据。
session_start(): 启动会话用于开始或恢复一个已经存在的会话。
$_SESSION: 用于存储和访问当前会话中的所有变量。
session_destroy(): 销毁当前会话中的所有数据。
session_unset(): 释放当前会话中的所有变量。
Session 存储路径PHP.INI 中 session.save_path 设置路径
唯一性判断-Token 使用
1、生成 Token 并将其存储在 Session
2、生成 Token 并将其绑定在 Cookie 触发
3、尝试登录表单中带入 Token 验证逻辑
示例
gbook.php
script src/ueditor/ueditor.config.js/*引入配置文件*//script
script src/ueditor/ueditor.all.js/*引入源码文件*//scriptform idform1 nameform1 methodpost action用户名input typetext nameusername maxlength2000br内容textarea idcontent rows10 cols70 namecontent styleborder:1px solid #E5E5E5;/textareascript typetext/javascriptUE.getEditor(content);//实例化编辑器传参,id为将要被替换的容器。/scriptinput typesubmit namesubmit idsubmit value提交/form?php
include config.php;function add_gbook($con){$u $_POST[username];if (isset($u)) {$c $_POST[content];$i $_SERVER[REMOTE_ADDR];$ua $_SERVER[HTTP_USER_AGENT];$sql insert into gbook(username, content,ipaddr,uagent) value($u, $c,$i,$ua);;if (mysqli_query($con, $sql)) {echo scriptalert(留言成功)/script;}}
}function show_gbook($con,$del){$sql1select * from gbook;$datamysqli_query($con,$sql1);while ($rowmysqli_fetch_row($data)) {echo hr;echo 用户名.$row[0].br;echo 内容.$row[1].br;echo IP地址.$row[2].br;echo UA浏览器.$row[3].br;if($deldel){echo a hrefgbook-admin.php?del$row[0]删除/a;}}
}add_gbook($con);
show_gbook($con,x);//if (!$con)
//{
// die(连接错误: . mysqli_connect_error());
//}else{
// $u$_POST[username];
// if(isset($u)){
// $c$_POST[content];
// $i$_SERVER[REMOTE_ADDR];
// $ua$_SERVER[HTTP_USER_AGENT];
// $sqlinsert into gbook(username, content,ipaddr,uagent) value($u, $c,$i,$ua);;
// if(mysqli_query($con,$sql)){
// echo scriptalert(留言成功)/script;
// $sql1select * from gbook;
// $datamysqli_query($con,$sql1);
// while ($rowmysqli_fetch_row($data))
// {
// echo hr;
// echo 用户名.$row[0].br;
// echo 内容.$row[1].br;
// echo IP地址.$row[2].br;
// echo UA浏览器.$row[3].br;
// }
//
// }else{
// echo scriptalert(留言失败)/script;
// }
//
// }
//
//}?demo01
?php
$dbiplocalhost;
$dbuserroot;
$dbpass123456;
$dbnamedemo01;
$conmysqli_connect($dbip,$dbuser,$dbpass,$dbname);gbook-admin.php
?php
include ../config.php;
include ../gbook.php;show_gbook($con,del);$delstr$_GET[del];
if(isset($delstr)){$sql2delete from gbook where username $delstr;;if(mysqli_query($con,$sql2)){echo scriptalert(删除成功!)/script;}
}
文件管理模块-上传-过滤机制
$_FILESPHP 中一个预定义的超全局变量用于在上传文件时从客户端接收文件并将其保存到服务器上。它是一个包含上传文件信息的数组包括文件名、类型、大小、临时文件名等信息。
$_FILES[表单值][name] 获取上传文件原始名称
$_FILES[表单值][type] 获取上传文件 MIME 类型
$_FILES[表单值][size] 获取上传文件字节单位大小
$_FILES[表单值][tmp_name] 获取上传的临时副本文件名
$_FILES[表单值][error] 获取上传时发生的错误代码
move_uploaded_file() 将上传的文件移动到指定位置的函数 is_dir() 函数用于检查指定的路径是否是一个目录 opendir() 函数用于打开指定的目录返回句柄用来读取目录中的文件和子目录 readdir() 函数用于从打开的目录句柄中读取目录中的文件和子目录 open_basedirPHP.INI 中的设置用来控制脚本程序访问目录 文件包含
include() 在错误发生后脚本继续执行
require() 在错误发生后脚本停止执行
include_once() 如果已经包含则不再执行
require_once() 如果已经包含则不再执行
示例
?php$name$_FILES[f][name];
$type$_FILES[f][type];
$size$_FILES[f][size];
$tmp_name$_FILES[f][tmp_name];
$error$_FILES[f][error];//echo $name.br;
//echo $type.br;
//echo $size.br;
//echo $tmp_name.br;
//echo $error.br;
//if(move_uploaded_file($tmp_name,upload/.$name)){
// echo 文件上传成功!;
//}//上传文件后缀过滤 黑名单机制
//$black_extarray(php,asp,jsp,aspx);
xxx.jpg xxx.png
//$fenge explode(.,$name);
//$exts end($fenge);
//if(in_array($exts,$black_ext)){
// echo 非法后缀文件.$exts;
//}else{
// move_uploaded_file($tmp_name,upload/.$name);
// echo scriptalert(上传成功)/script;
//}//上传文件后缀过滤 白名单机制
//$allow_extarray(png,jpg,gif,jpeg);
xxx.jpg xxx.png
//$fenge explode(.,$name);
//$exts end($fenge);
//if(!in_array($exts,$allow_ext)){
// echo 非法后缀文件.$exts;
//}else{
// move_uploaded_file($tmp_name,upload/.$name);
// echo scriptalert(上传成功)/script;
//}//MIME文件类型过滤
$allow_typearray(image/png,image/jpg,image/jpeg,image/gif);
if(!in_array($type,$allow_type)){echo 非法后缀文件;
}else{move_uploaded_file($tmp_name,upload/.$name);echo scriptalert(上传成功)/script;}
?filemange.php
?php
ini_set(open_basedir,__DIR__);
$path$_GET[path] ?? ./;
$action isset($_GET[a])?$_GET[a]:;
$path isset($_GET[path])?$_GET[path]:.;
if(is_file($path))
{//获得文件名$file basename($path);//获得路径$path dirname($path);
}
//判断不是目录
elseif(!is_dir($path))
{echo 我只会吃瓜;
}
function getlist($path){$hdopendir($path);while(($file_namereaddir($hd) )! false){if($file_name ! . $file_name ! ..){$file_path $path/$file_name;$file_type filetype($file_path);}$list[$file_type][] array( //$file_type dir 和 file $list[dir] 和 $list[file]file_name$file_name, //文件名存储键值file_namefile_path$file_path, //文件路径存储键值file_pathfile_sizeround(filesize($file_path)/1024), //通过换算文件大小存储键值file_pathfile_timedate(Y/m/d H:i:s,filemtime($file_path)), //获取文件时间并存储键值file_path);}closedir($hd);return $list;
}$listgetlist($path);//接受方法 判断是怎么操作
//echo $action;
switch ($action){case del:unlink($file);//$cmddel $file;//system($cmd);//echo $cmd;break;case down:header(Content-Type: application/octet-stream);header(Content-Disposition: attachment; filename\ . $file . \);header(Content-Length: . filesize($file));readfile($file);break;case edit:$contentfile_get_contents($file);echo form nameform1 methodpost action;echo 文件名.$file.br;echo 文件内容br;echo textarea namecode styleresize:none; rows100 cols100.$content./textareabr;echo input typesubmit namesubmit idsubmit value提交;echo /form;break;
}//检测编辑后提交的事件 进入文件重新写入
if(isset($_POST[code])){$ffopen($path/$file,w);fwrite($f,$_POST[code]);fclose($f);
}?table width100% stylefont-size: 10px;text-align: center;trth图标/thth名称/thth日期/thth大小/thth路径/thth操作/th/tr?php foreach ($list[dir] as $v): ?trtdimg src./img/list.png width20 height20/tdtd?php echo $v[file_name]?/tdtd?php echo $v[file_time]?/tdtd-/tdtd?php echo $v[file_path]?/tdtda href?path?php echo $v[file_path]?打开/a/td/tr?php endforeach;??php foreach ($list[file] as $v): ?trtdimg src./img/file.png width20 height20/tdtd?php echo $v[file_name]?/tdtd?php echo $v[file_time]?/tdtd?php echo $v[file_size]?/tdtd?php echo $v[file_path]?/tdtda href?aeditpath?php echo $v[file_path]?编辑/aa href?adownpath?php echo $v[file_path]?下载/aa href?adelpath?php echo $v[file_path]?删除/a/td/tr?php endforeach;?/table