PHP开发

PHP开发个人博客项目-数据库操作-数据库接受开发环境PHP操作MySQLPHP 中GET、POST、REQUEST用法

个人博客项目-文件操作类-编辑器-上传下载删除读写知识点文件上传HTML上传表单(上传文件)PHP_FILES函数move_uploaded_file() 函数编辑器编写代码(ueditor)thinkphp框架

文件下载直接下载传参下载总结

文件删除文件夹删除文件读取文件写入

个人博客项目&输入&输出&留言板&访问IP知识点

个人博客项目&登陆验证&Cookie&Session&验证码安全知识点登陆模块流程cookie验证万能密码

个人博客项目&JS-Ajax&前端逻辑&购物&上传知识点1.文件上传 - 类型 - 过滤2.状态回显- 登陆 - 状态码

PHP开发

个人博客项目-数据库操作-数据库接受

开发环境

DW + PHPStorm + PhpStudy + Navicat Premium

DW : HTML&JS&CSS开发(Dreamweaver)

PHPStorm : 专业PHP开发IDE

PhpStudy :Apache MYSQL环境

Navicat Premium: 全能数据库管理工具

HTML横向导航 超链接设置

PHP操作MySQL

1.连接数据库

mysqli_connect()函数 填写连接数据库的账号密码

$conn=mysqli_connect('127.0.0.1','root','root');//连接数据库,返回连接的对象

2.选择数据库

mysqli_select_db()函数,第一个参数是你之前的连接返回的对象,第二个参数是你的数据库

mysqli_select_db($conn,'ceshi');//选择数据库

3.设置字符集

mysqli_set_charset()函数

mysqli_set_charset($conn,'utf-8'); //设置字符集

4.执行查询语句

直接给一个查询语句字符串

这个是定义SQL语句

$sql='select * from test'; //查询语句

mysqli_query()

执行SQL语句

$result=mysqli_query($conn,$sql); //在$conn这个数据库执行$sql查询语句

5.关闭数据库

使用完以后一定要关闭数据库

mysqli_close($conn); //关闭数据库

Whlie(

o

b

j

=

m

y

s

q

l

f

e

t

c

h

o

b

j

e

c

t

(

obj = mysql_fetch_object(

obj=mysqlf​etcho​bject(result)){

​ echo $row[‘id’];

​ echo $row[‘content’];

}

Php里面可以插入HTML代码,HTML里面可以插入PHP代码

PHP中有变量就用双引号,双引号不会解析变量

为了避免麻烦,出现了数据库配置文件。

源码泄露会导致数据库配置文件泄露,就表示账号密码被泄露。数据泄露,管理员账号泄露。

用include来包含

比如:

include("/config/conn.php");

PHP 中GET、POST、REQUEST用法

GET方法:GET方法用于从URL中获取参数。通过GET方法发送的参数会附加在URL后面,形成类似于example.com/page.php?param1=value1¶m2=value2的形式。在PHP中,通过$_GET超全局变量可以获取这些参数的值。例如,如果想获取名为id的参数的值,可以使用$_GET['id']来获取。

$i = $_get[id];

echo $i;

POST方法

POST方法:POST方法用于通过HTTP请求体发送参数。与GET方法不同,POST方法将参数放在请求体中,而不是URL上。

在PHP中,可以通过$_POST超全局变量来获取通过POST方法发送的参数的值。例如,如果想获取名为param1的参数的值,可以使用$_POST['param1']来获取。

REQUEST方法

REQUEST方法:REQUEST是一个包含了GET、POST和COOKIE参数的超全局变量。它可以用于获取通过GET和POST方法发送的参数,以及通过COOKIE设置的参数。在PHP中,可以通过$_REQUEST超全局变量来获取这些参数的值。例如,如果想获取名为param1的参数的值,可以使用$_REQUEST['param1']来获取。

需要注意的是,使用GET方法传递的参数会显示在URL上,因此不适合传递敏感信息。而POST方法将参数放在请求体中,更适合传递敏感信息。选择使用哪种方法取决于具体的需求和安全性考虑。

项目一:个人博客

文章阅读 sql注入

会员中心

模板引入

留言板 xss

后台

登陆验证 csrf 弱密码 无验证码 验证绕过

文章添加 配置修改

个人博客项目-文件操作类-编辑器-上传下载删除读写

知识点

1、文件操作类代码编写 2、文件上传&下载&删除3、文件内容&读取&写入 4、第三方编辑器引用实例

文件操作&上传&下载&删除&读取&写入

文件上传类

1.自写代码验证上传 //验证核心在代码

2.引用外部编辑器实现 //验证核心在编辑器

3.引用开发框架实现 //验证核心在框架

文件上传类:-任意文件上传

1、代码自主写

HTML上传表单

2、编辑器引用 (编辑器编写代码)

#文件下载类:-任意文件下载

1、直连URL访问

2、传参头部修改

#文件删除类-任意文件删除

1、文件删除

2、文件夹删除

文件内容操作类-任意文件读取&写入

1文件读取

2、文件写入

文件上传

HTML上传表单(上传文件)

先构造一个html的上传页面

文件上传

action:是提交给谁处理,写upload.php的话就交由upload.php处理,为空就是自己处理

PHP_FILES函数

//获取文件的名字

$name=$_FILES['upload']['name'];

//获取文件的类型

$type=$_FILES['upload']['type'];

//获取文件的大小

$size=$_FILES['upload']['size'];

//获取上传文件的错误代码

$error=$_FILES['upload']['error'];

//获取上传文件的临时文件名

$tmpname=$_FILES['upload']['tmp_name'];

echo $name."
";

echo $type."
";

echo $size."
";

echo $error."
";

echo $tmpname."
";

move_uploaded_file() 函数

语法

move_uploaded_file(file,newloc)

file必须。规定要移动的文件newloc必需,规定文件的新位置

文件上传

if(!move_uploaded_file($tmpname,'upload/'.$name)){

echo '文件移动失败';

}

else{

echo '文件上传成功';

echo '/upload/'.$name;

}

编辑器编写代码(ueditor)

thinkphp框架

在分析漏洞时,要考虑他的源码是框架或者编辑器写入的,还是自己编写的

文件下载

直接下载

http://www.xiaodi8.com/soft/ 软件.zip

getchwd() 函数返回当前工作目录

scandir() 函数返回指定目录中的文件和目录的数组

文件下载加php数组取值

//获取可以下载的文件列表

function getfilename(){ //定义一个函数,将文件名拿出来

$filepath=getcwd(); //获取到当前路径

//var_dump($filepath);

$filename=scandir($filepath.'/soft/'); //把当前路径下的soft文件夹下的东西都显示出来

//var_dump($filename);

foreach($filename as $key =>$value){

if(is_array($value)){

getValue($value);

}

else{

echo $value."
";

}

}

}

//直接下载函数

function geturldown(){

$url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

echo $url;

}

?>

传参下载

http://www.xiaodi8.com/soft/down.php?filename=软件.zip

总结

直连下载更安全

传参下载后面的参数可以更改,能直接获取源码

文件删除

文件夹删除

文件读取

function fileread($name){

$myfile = fopen($name, mode: "r");

echo fread($myfile,filesize($name));

fclose($myfile);

}

文件写入

function filewrite($name,$txt){

$myfile = fopen($name,mode: "w+");

fwrite($myfile,$txt);

fclose($myfile);

个人博客项目&输入&输出&留言板&访问IP

知识点

1.PHP全局变量 &_SERVER

PHP 有 9 个超全局变量

$_SERVER、$_GET、$_POST、$_REQUEST、$_COOKIE、$_SESSION、$_FILES、$_ENV、$GLOBALS

S

E

R

V

E

R

是一个在

P

H

P

中预定义的全局变量,它包含了有关服务器和当前脚本的信息。

_SERVER是一个在PHP中预定义的全局变量,它包含了有关服务器和当前脚本的信息。

S​ERVER是一个在PHP中预定义的全局变量,它包含了有关服务器和当前脚本的信息。_SERVER数组中的每个元素都是服务器环境的一个参数,如请求的方法、请求的URI、客户端IP地址等。

以下是$_SERVER数组中一些常用的元素及其含义:

$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]:浏览器语言$_SERVER[‘REMOTE_ADDR’]:客户端IP地址$_SERVER[‘PHP_SELF’]:正在执行脚本的文件名$_SERVER[‘argv’]:传递给该脚本的参数$_SERVER[‘argc’]:传递给该脚本的参数个数$_SERVER[‘HTTP_USER_AGENT’] :返回用户使用的浏览器信息$SERVER[‘SERVER_NAME’] 当前运行脚本所在服务器主机的名称$SERVER[‘REQUEST_METHOD’] 访问页面时的请求方法。例如:GET、HEAD,POST

你可以使用$_SERVER数组来获取这些信息,例如:

$language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];

$ip = $_SERVER['REMOTE_ADDR'];

$file = $_SERVER['PHP_SELF'];

$arguments = $_SERVER['argv'];

$argumentCount = $_SERVER['argc'];

这样就可以获取到相应的信息了。

控制user-agent,利用JS语句实现弹窗。

HTTP-REFERER伪造来源

u

a

=

ua=

ua=_SERVER[‘HTTP_REFERER’]

​ 查看代码有没有检测来源,如果没有,容易引发CSRF攻击。

伪造IP

2.MYSQL-插入语法INSERT

3.输入输出-XSS&反射&存储

接受值,对值进行输出,评论区,留言区,私信都有可能存在。

4.安全问题-XSS跨站&CSRF等

个人博客项目&登陆验证&Cookie&Session&验证码安全

知识点

1.后台验证-登陆用户逻辑安全

2.后台验证-COOKIE&SESSION

3.后台验证-验证码&万能密码等

登陆模块流程

1.发送登陆请求 账号 密码

2.接受账号密码

3.判断账号密码的准确性

正确 成功登陆->跳转成功页面

错误 失败登陆-> 重新登陆

后台管理系统有多个文件页面,为了方便验证,一般会选用cookie或session进行验证。

cookie:身份验证 存储到客户端浏览器内(可能被盗取)

cookie安全:cookie修改 伪造 盗取

session:身份验证 存储到服务端服务器内,登陆一次,产生一次

session安全:会话劫持 (session劫持)

cookie验证

先验证登陆,才进行代码的操作

u

s

e

r

=

user=

user=_COOKIE[‘user’];

if($user != ‘’){

​ echo ‘这里就是后台’

}else{

​ echo ‘不能进入’

}

基础验证:只验证cookpie里面的user是不是为空,利用BP抓包,修改cookie,比如user=1.即可登陆。成功以后会设置登陆信息并记住天数。

setcookie

安全隐患:COOKIE伪造

万能密码

where username = '' or 1=1

' or 1=1#

数值型万能账号

a or true #

a or 1 #

a or 1=1 #

a or true – a

a or 1 – a

a or 1=1 – a

单引号字符型万能密码

a’ or true #

a’ or 1 #

a’ or 1=1 #

a’ or true --a

a’ or 1 – a

a’ or 1=1 – a

双引号字符型万能密码

a" or true #

a" or 1 #

a" or 1=1 #

a" or true – a

a" or 1 – a

a" or 1=1 – a

万能账号的使用

账号输入: a or true #

密码随便输入,比如:123456

admin #

admin – a

单引号字符串型万能密码

admin’ #

admin’ – a

双引号字符串型万能密码

admin” #

dmin" – a

万能密码的使用

用户名输入: admin’ #

密码随便输入,比如: 123456

个人博客项目&JS-Ajax&前端逻辑&购物&上传

知识点

1.JS前端验证-文件上传

2.JS-Ajax传递-登录-状态

3.JS-AJax传递-购物-参数

1.文件上传 - 类型 - 过滤

对文件上传的后缀名进行验证,符合要求的才能上传

这个功能的实现可以由Php或JS去实现

两种去验证的区别:

PHP验证的代码看不到 只能黑盒测试

JS验证的代码可以看到 白盒测试

如果用JS写前端上传代码,就可以直接绕过。

让JS代码失效

1.火狐禁用JS (自行搜索教程),可以用此方法来上传过滤的文件后缀。

2.状态回显- 登陆 - 状态码

通过AJax传递数据进行用户登陆验证

AJax是什么?交互性

Ajax 不是一种新的[编程语言],而是一种用于创建更好更快以及更强的Web应用程序的技术。Ajax 在浏览器与 Web 服务器之间使用异步数据传输HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面

JS AJax

流浪其请求-返回-读取返回数据-JS AJax代码进行解析(代码判断)->结果

inforcode = 1 成功

如果页面是用ajax写的,但是看不到,包含在了文件夹里面

PHP

请求-返回->返回结果 (服务器不理会)

Do intercept -> Response to this request

相关阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。