4.php开发-个人博客项目登录验证cookiesession验证码安全​

目录

知识点

本节大纲思路

——这里以我自己的为例——

cookie验证——————>

login1.php-登录后台界面

login_check.php-检查,作为包含文件

add_news.php-后台界面

php编码

如何创建 Cookie?--setcookie()

语法

实例 1

php header跳转

演示案例-cookie验证脆弱问题

session验证——————>

session/login.php-管理员登录界面

session/index.php-后台界面

验证码——————>

万能密码

验证码


知识点

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

2-后台验证-cookie&session

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

本节大纲思路


——这里以我自己的为例——

cookie验证——————>

login1.php-登录后台界面

——根目录下

————这里注意输入密码的时候一般就进行了MD5加密,——不管怎么样,提交的数据要与数据库中的一样!!!

——这里我就先不加密了(密码)

<form action="" method="POST">
​帐号:<input type="text" name="user">密码:<input type="password" name="pass"><input type="submit" value="提交">
​
</form>
<?php
//header("Content-Type:text/html;charset=utf-8");
header("Content-type: text/html; charset=utf-8");
include('config/conn.php');
​
$username=$_POST['user'];
$password=($_POST['pass']);//注意MD5加密—————与数据库里的一样就行!!!
//echo $password;
$sql="select * from admins where username='$username' and password='$password'";
//echo $sql;
$result=mysql_query($sql,$conn);
if (mysql_num_rows($result)){echo '成功';header('Location: admin/add_news.php');setcookie('user',$username);
}
else{//echo '失败登录';
}
?>

——cookie设置的时候,在数据包里会携带账号密码;不然直接访问没有携带。

login_check.php-检查,作为包含文件

——放config下,检验用户的身份(为admin还是普通用户)

后台页面——先验证登录,才进行代码操作(防止直接访问)

<?php
$user=$_COOKIE['user'];
if($user != ''){        //单个验证,cookie可以修改,伪造,进行攻击。echo '这里就是后台文章添加的页面';}else{echo '你妹的,不能进入';}
?>

add_news.php-后台界面

———放admin目录下,admin登录时验证(包含了验证文件)

<?php
header("Content-Type:text/html;charset=utf-8");
//先验证登录,再进行代码操作。
//1-cookie验证
//2-session验证
​
//cookie验证
include("../config/login_check.php");
?>


php编码

php 编码 ---解决乱码问题

php utf-8编码:(php页面为url) header("Content-type: text/html; charset=utf-8");php gbk编码: header("Content-type: text/html; charset=gb2312");php big5编码 (繁体): header("Content-type: text/html; charset=big5");

如何创建 Cookie?--setcookie()

PHP Cookie | 菜鸟教程

setcookie() 函数用于设置 cookie。

注释:setcookie() 函数必须位于 <html> 标签之前。

语法

setcookie(name, value, expire, path, domain);

实例 1

在下面的例子中,我们将创建名为 "user" 的 cookie,并为它赋值 "runoob"。我们也规定了此 cookie 在一小时后过期:

<?php
setcookie("user", "runoob", time()+3600);
?>
​
<html>
.....

注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码。(为防止 URL 编码,请使用 setrawcookie() 取而代之。)

php header跳转

php的header函数_php header-CSDN博客

header('Location: RM新时代-首页'); //跳转到一个新的地址

演示案例-cookie验证脆弱问题

(熊海cms)

抓包后在cookie上面修改

——登录后,发现地址栏出现了传参,————所以我们给他修改一下——r=index————直接跳转到登录成功的界面。

————显然不行,可能cookie没有通过,

——抓包之后——看cookie

源代码:

——————呵呵,这里直接修改一下cookie就行了

——进入后台。

白盒嘿嘿嘿~

黑盒测试就在cookie上面不断伪造就行了........

————注意cookie的存活时间,他是储存到浏览器里面的。

cookie盗取:

人家登录状态,伪造一下,xss利用盗取cookie。

无痕浏览不会储存...


session验证——————>

(打电话一样,一方挂了就没了,变了。)一旦PHPSESSID断了,就没了,

会话劫持。————人家正在浏览器浏览,没有断,才能干到。

——登录一次就产生一次,储存在服务器。

xxxSESSIONID --->session验证,和cookie没联系了;专注session!

session/login.php-管理员登录界面

<form action="" method="POST">帐号:<input type="text" name="user">密码:<input type="password" name="pass"><input type="submit" value="提交">
</form><?php
header("Content-Type:text/html;charset=utf-8");
include('../config/conn.php');
$username=$_POST['user'];
$password=$_POST['pass'];//注意密码加密
$sql="select * from admins where username='$username' and password='$password'";
$result=mysql_query($sql,$conn);
while($row=mysql_fetch_array($result)){//成功登录后session_start();//产生创建一个会话。$_SESSION['user'] = $row['username'];//将查询结果的值进行赋值。header('Location: index.php');//跳转url,----------这里要特定指向,形成前后关联啊。--------------
}
?>

session/index.php-后台界面

<?php
​
header("Content-Type:text/html;charset=utf-8");
session_start();
$username=$_SESSION['user'];
​
if($username=='admin'){echo '欢迎登陆管理员首页!';
}else{echo "session,您不是管理员";
}
?>


验证码——————>

万能密码

万能密码大全-CSDN博客

' ' OR 1=1#

注释符(过滤掉后边的) ---> #

or 或者 ,两边只要有一个真就行。

验证码

code.php ---生成验证码

<?php
session_start();//必须位于脚本的最顶端
$image=imagecreatetruecolor(100, 30);//imagecreatetruecolor函数建一个真彩色图像
//生成彩色像素
$bgcolor=imagecolorallocate($image, 255, 255, 255);//白色背景     imagecolorallocate函数为一幅图像分配颜色
$textcolor=imagecolorallocate($image,0,0,255);//蓝色文本
//填充函数,xy确定坐标,color颜色执行区域填充颜色
imagefill($image, 0, 0, $bgcolor);
$captch_code="";//初始空值
​
//该循环,循环取数
for($i=0;$i<4;$i++){$fontsize=6;$x=($i*25)+rand(5,10);$y=rand(5,10);//位置随机//  $fontcontent=$i>2?chr(rand(97,122)):chr(rand(65,90));//是小写,否则是大写$data='abcdefghijkmnpqrstuvwxyz3456789';$fontcontent=substr($data,rand(0,strlen($data)-1),1);$fontcolor=imagecolorallocate($image,rand(0,100),rand(0,100),rand(0,100));//随机的rgb()值可以自己定
​imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); //水平地画一行字符串$captch_code.=$fontcontent;
}
$_SESSION['authcode']=$captch_code;//将变量保存再session的authcode变量中
​
​
//该循环,循环画背景干扰的点
for($m=0;$m<=600;$m++){
​$x2=rand(1,99);$y2=rand(1,99);$pointcolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));imagesetpixel($image,$x2,$y2,$pointcolor);// 水平地画一串像素点
}
​
//该循环,循环画干扰直线
for ($i=0;$i<=10;$i++){$x1=rand(0,99);$y1=rand(0,99);$x2=rand(0,99);$y2=rand(0,99);$linecolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));imageline($image,$x1,$y1,$x2,$y2,$linecolor);//画一条线段
​
}
header('content-type:image/png');
imagepng($image);
//销毁
imagedestroy($image);
?>

f.php ---引用了验证码code.php

<!DOCTYPE html>
<html lang="en">
<head><!-- 简单的表单提交代码 --><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>简单验证码的实现</title>
</head>
<body>
<form method="post" action="">帐号:<input type="text" name="user">密码:<input type="password" name="pass"><p>验证码图片:<img src="code.php" onClick="this.src='code.php?nocache='+Math.random()" style="cursor:hand" alt="点击换一张"/>点击图片可更换验证码</p><p>请输入图片中的内容:<input type="text" name="authcode" value=""/></p><p><input type="submit" width="20px" height=19px value="提交"></input></p>
</form></body>
</html><?php
include('config/conn.php');
header("Content-type: text/html; charset=utf-8");
// session 存值并匹配用户输入值
if (isset($_REQUEST['authcode'])) {session_start();if (strtolower($_REQUEST['authcode'])==$_SESSION['authcode']) {//strtolower转化为小写的函数echo"输入正确!";$username=$_POST['user'];$password=md5($_POST['pass']);$sql="select * from sy_adminuser where username='$username' and password='$password'";$result=mysql_query($sql,$conn);if(mysql_num_rows($result)){$row=mysql_fetch_array($result);echo '成功!';session_start();$_SESSION['user']=$row['username'];//讲查询结果的数据进行赋值header("Location: admin/add_news.php");}else{echo '失败!';//header("Location: login.php");}# code...}else{echo"输入错误!";}exit();
}
?>

——验证码正确才能进入循环——再看账号密码

防爆破攻击 ------每一次登录验证码都要变!!!

抓包,看看验证码是否为一次性~

验证码识别———

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(学习日记)2024.01.23:结构体、位操作和枚举类型

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

《WebKit 技术内幕》学习之八(1):硬件加速机制

《WebKit 技术内幕》之八&#xff08;1&#xff09;&#xff1a;硬件加速机制 1 硬件加速基础 1.1 概念 这里说的硬件加速技术是指使用GPU的硬件能力来帮助渲染网页&#xff0c;因为GPU的作用主要是用来绘制3D图形并且性能特别好&#xff0c;这是它的专长所在&#xff0c;它…

成熟的内外网数据交换方案,如何实现跨网传输?

网络迅速发展&#xff0c;我们可以从网络上查找到各式各样的信息&#xff0c;但是同时网络安全问题也随之严重。近几年&#xff0c;各种有关网络安全的新闻不断被报道&#xff0c;数据泄露给很多企业带来了严重打击&#xff0c;不仅是经济损失&#xff0c;严重者还会对企业的声…

Go 基本数据

第 2 章 基本数据类型 Go 的数值类型包括了不同大小的整数 、浮点数 、复数&#xff1b; 各种数值类型分别有自己的大小&#xff0c;对正负号支持也各不相同&#xff1b; 1. 整数&#xff08;OK&#xff09; 整数类型&#xff08;整型&#xff09;整数类型Go 语言同时支持 有…

Servlet 与 MVC

主要内容 Servlet 重点 MVC 重点 Filter 重点 章节目标 掌握 Servlet 的作用 掌握 Servlet 的生命周期 掌握 JSP 的本质 掌握 MVC 的设计思想 掌握 Filter 的作用及使用场景 第一节 Servlet 1. Servlet 概念 Servlet 是在服务器上运行的能够对客户端请求进行处理&a…

Parallels Desktop 18 for Mac(pd虚拟机) 激活版

Parallels Desktop 18是一款功能强大的虚拟机软件&#xff0c;可以在Mac操作系统上同时运行多种操作系统&#xff0c;包括Windows、Linux、Android等。该软件提供了多种高级功能&#xff0c;如支持DirectX 11游戏、3D图形和OpenGL应用程序&#xff0c;以及运行Windows和Mac应用…

Mysql数据库DQL查询语言之表连接(联合查询)

表连接 关系字段&#xff1a;两表中有关联关系的字段 \关系字段&#xff1a;两表之间存在关系的字段 什么是表连接&#xff1f; 当我们的查询结果需要从多张表中获取时&#xff0c;此时应该让表之间建立连接&#xff0c;同时获取数据 内连接 特点&#xff1a;同时对连接双方做…

[BUUCTF]-PWN:babyfengshui_33c3_2016解析

又是一道堆题&#xff0c;先看保护 关键信息是32位&#xff0c;没开pie 直接看ida 大致是alloc创建堆块&#xff0c;free释放堆块&#xff0c;show查看堆块内容&#xff0c;fill填充堆块内容 其他的都没啥关键的要讲&#xff0c;但alloc那里非常需要解析一下 解释如上图 再具…

做外贸指定货代,想不到的麻烦

最近在外贸群里看到小伙伴们对指定货代的吐槽以及自己遇到的糟心事&#xff0c;写下来&#xff0c;也为我们今后遇到客户指定货代的时候提个醒。 小伙伴A说&#xff0c;因为客户设计的包装有问题&#xff0c;被海关查验&#xff0c;然后客户的指定货代要求小伙伴支付高于货值的…

向量库与嵌入模型

简介 非结构化数据 世界上大约超过百分之八十的数据都是非结构化数据&#xff0c;例如&#xff1a;图像、音视频、自然语言等&#xff0c;这些模型不遵循预定义的模式或组织方式&#xff0c;可以使用各种人工智能 (AI) 和机器学习 (ML) 模型转换为向量。 嵌入向量&#xff0…

用ChatGPT教学、科研!大学与OpenAI合作

亚利桑那州立大学&#xff08;简称“ASU”&#xff09;在官网宣布与OpenAI达成技术合作。从2024年2月份开始&#xff0c;为所有学生提供ChatGPT企业版访问权限&#xff0c;主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品&#xff0c;AS…

01.Elasticsearch应用(一)

Elasticsearch应用&#xff08;一&#xff09; 1.什么是ELK ELK是一个免费开源的日志分析架构技术栈总称&#xff0c;包含三大基础组件&#xff0c;分别是Elasticsearch、Logstash、Kibana。但实际上ELK不仅仅适用于日志分析&#xff0c;它还可以支持其它任何数据搜索、分析和…

nodejs学习计划--(六)包管理工具

包管理工具 1. 介绍 包是什么 『包』英文单词是 package &#xff0c;代表了一组特定功能的源码集合包管理工具 管理『包』的应用软件&#xff0c;可以对「包」进行 下载安装 &#xff0c; 更新 &#xff0c; 删除 &#xff0c; 上传 等操作 借助包管理工具&#xff0c;可以快…

【若依】前后端分离框架部署

1.拉取若依项目代码 进入若依 基于SpringBootVue前后端分离的Java快速开发框架&#xff0c;并通过相应协议拉取到本地IDE 2.前端部署 2.1.下载nodejs 进入nodejs官网下载所需版本&#xff0c; 完成后在命令行运行npm -v可查询版本 2.2.配置依赖 在若依ui目录下运行 np…

oracle古法unwrap手艺(oracle存储过程解码)

先说骚话 首先oracle官方是不支持解包的&#xff0c;见Doc ID 376303.1 但是需求来了。我就寄希望于民间大神的工具。很顺利&#xff0c;找到了几个&#xff0c;甚至还有网页版&#xff0c;以为是个easy money。 但是&#xff0c;我点背&#xff0c;总是能遇到精彩的情况。数…

Android开发--状态栏布局隐藏的方法

1.问题如下&#xff0c;安卓布局很不协调 2.先将ActionBar设置为NoActionBar 先打开styles.xml 3.使用工具类 package com.afison.newfault.utils;import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.graph…

【Elasticsearch篇】详解使用RestClient操作索引库的相关操作

文章目录 &#x1f354;什么是Elasticsearch&#x1f33a;什么是RestClient&#x1f386;代码操作⭐初始化RestClient⭐使用RestClient操作索引库⭐使用RestClient删除索引库⭐使用RestClient判断索引库是否存在 &#x1f354;什么是Elasticsearch Elasticsearch是一个开源的分…

SpringBoot 统计更多Api接口SQL相关日志信息

统计(查询,更新,批量更新)SQL执行次数及用时并输出log import com.zhangziwa.practisesvr.utils.log.LogContext; import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.plugin.Intercepts…

什么是通配监听端口? 什么是通配监听IP?

什么是通配监听端口? 监听端口&#xff1a; 指的是服务器或服务开启的特定TCP或UDP端口号&#xff0c;等待客户端连接或发送数据。TCP/IP协议下每个端口只能由一个服务独占监听&#xff0c;一个服务或应用会指定监听特定的一个或多个端口来接收客户端的连接请求。 例如 Web…

RocketMQ-Windows版本安装

RocketMQ-Windows版本安装 1.环境准备 JDK和maven需要先安装好&#xff0c;我这里使用的JDK1.8版本 Maven 3.8.6版本。需要注意的是&#xff0c;这里配置java时需要指定JAVA_HOME环境变量 RokectMQ才能正常启动。 2.下载RocketMQ 官网下载: https://rocketmq.apache.org/z…