PHP&小迪学习笔记

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=mysqlfetchobject(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&param2=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函数
<?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>";
echo $type."<br>";
echo $size."<br>";
echo $error."<br>";
echo $tmpname."<br>";
move_uploaded_file() 函数

语法

move_uploaded_file(file,newloc)

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

文件上传

if(!move_uploaded_file($tmpname,'upload/'.$name)){
    echo '文件移动失败';
}
else{
    echo '文件上传成功';
    echo '/upload/'.$name;
}


image-20231226112447213
编辑器编写代码(ueditor)
thinkphp框架
  在分析漏洞时,要考虑他的源码是框架或者编辑器写入的,还是自己编写的
文件下载
直接下载

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

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

文件下载加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."<br>";
        }
    }
}
//直接下载函数
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中预定义的全局变量,它包含了有关服务器和当前脚本的信息。 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'];

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

控制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
  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值