安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用后台模块SessionCookieToken身份验证唯一性

文章目录

  • 开发环境
  • 数据导入-mysql架构&库表列
  • 数据库操作-mysqli函数&增删改查
  • 数据接收输出-html混编&超全局变量
  • 第三方插件引用-js传参&函数对象调用
  • 身份验证-Cookie使用
  • 身份验证-Session使用
  • 唯一性判断-Token使用
  • 具体安全知识点:
    • Cookie和Session都是用来在Web应用程序中跟踪用户状态的机制
    • 在Web应用程序中,使用token和不使用token的主要差异在于身份验证和安全性

开发环境

DW + PHPStorm + PhpStudy + Navicat Premium
DW : HTML&JS&CSS开发
PHPStorm : 专业PHP开发IDE
PhpStudy :Apache MYSQL环境
Navicat Premium: 全能数据库管理工具

在这里插入图片描述

数据导入-mysql架构&库表列

1、数据库名,数据库表名,数据库列名
2、数据库数据,格式类型,长度,键等

数据库操作-mysqli函数&增删改查

PHP函数:连接,选择,执行,结果,关闭等
参考:https://www.runoob.com/php/php-ref-mysqli.html
常用:

mysqli_connect() 打开一个到MySQL的新的连接。
mysqli_select_db() 更改连接的默认数据库。
mysqli_query() 执行某个针对数据库的查询。
mysqli_fetch_row() 从结果集中取得一行,并作为枚举数组返回。
mysqli_close() 关闭先前打开的数据库连接。

MYSQL增删改查:

查:select * from 表名 where 列名=‘条件’;
增:insert into 表名(列名1, 列名2) value(‘列1值1’, ‘列2值2’);
删:delete from 表名 where 列名 = ‘条件’;
改:update 表名 set 列名 = 数据 where 列名 = ‘条件’;

基础的PHP语句

<form id="form1" name="form1" method="post" action="">用户名:<input type="text" name="username" maxlength="2000"><br>内容:<textarea id="content" rows="10" cols="70" name="content" style="border:1px solid #E5E5E5;"></textarea><script type="text/javascript">UE.getEditor("content");//实例化编辑器传参,id为将要被替换的容器。</script><input type="submit" name="submit" id="submit" 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 "<script>alert('留言成功!')</script>";}}
}function show_gbook($con,$del){$sql1="select * from gbook";$data=mysqli_query($con,$sql1);while ($row=mysqli_fetch_row($data)) {echo '<hr>';echo '用户名:'.$row[0].'<br>';echo '内容:'.$row[1].'<br>';echo 'IP地址:'.$row[2].'<br>';echo 'UA浏览器:'.$row[3].'<br>';if($del=='del'){echo "<a href='gbook-admin.php?del=$row[0]'>删除</a>";}}
}

效果如下
在这里插入图片描述

数据接收输出-html混编&超全局变量

1、html混编:使HTML(JS)在PHP语言中运行

<?php
echo '<script>alert('x');</script>'
?>

2、超全局变量:
参考:
https://www.w3school.com.cn/php/php_superglobals.asp
https://www.php.net/manual/zh/language.variables.superglobals.php

$GLOBALS:这种全局变量用于在 PHP 脚本中的任意位置访问全局变量
$_SERVER:这种超全局变量保存关于报头、路径和脚本位置的信息。
$_REQUEST$_REQUEST 用于收集 HTML 表单提交的数据。
$_POST:广泛用于收集提交method="post"HTML表单后的表单数据。
$_GET:收集URL中的发送的数据。也可用于收集提交HTML表单数据(method="get") $_FILES:文件上传且处理包含通过HTTP POST方法上传给当前脚本的文件内容。
$_ENV:是一个包含服务器端环境变量的数组。
$_COOKIE:是一个关联数组,包含通过cookie传递给当前脚本的内容。
$_SESSION:是一个关联数组,包含当前脚本中的所有session内容。

第三方插件引用-js传参&函数对象调用

引用:
函数对象调用:

var obj = {value : 0,increment : function (inc) {   this.value += typeof inc === 'number' ? inc :1;//设置inc且为数字时 value=inc 反之 value=1}
}
obj.increment();
console.log(obj.value);  //1
obj.increment(2);
console.log(obj.value);  //2

身份验证-Cookie使用

在这里插入图片描述
生成cookie的原理图过程:见图

1、客户端向服务器发送HTTP请求。
2、服务器检查请求头中是否包含cookie信息。
3、如果请求头中包含cookie信息,则服务器使用该cookie来识别客户端,否则服务器将生成一个新的cookie。
4、服务器在响应头中设置cookie信息并将其发送回客户端。
5、客户端接收响应并将cookie保存在本地。
6、当客户端发送下一次HTTP请求时,它会将cookie信息附加到请求头中。
7、服务器收到请求并检查cookie的有效性。
8、如果cookie有效,则服务器响应请求。否则,服务器可能会要求客户端重新登录。

PHP中:
setcookie(): 设置一个cookie并发送到客户端浏览器。
unset(): 用于删除指定的cookie。

在这里插入图片描述
当然这里的认证功能也是不安全的,存在sql注入以及cookie伪造等问题……
预编译写法:

$stmt = $con->prepare("SELECT * FROM admin WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $user, $pass);
$stmt->execute();
$result = $stmt->get_result();

身份验证-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验证逻辑
4、思考Token安全特性

Token保证每次请求的唯一性,表单每次刷新都会重新生成token,增加暴力破解成本
在这里插入图片描述

具体安全知识点:

Cookie和Session都是用来在Web应用程序中跟踪用户状态的机制

1、存储位置不同:
Cookie是存储在客户端(浏览器)上的,而Session是存储在服务器端的。
2、安全性不同:
Cookie存储在客户端上,可能会被黑客利用窃取信息,而Session存储在服务器上,更加安全。
3、存储容量不同:
Cookie的存储容量有限,一般为4KB,而Session的存储容量理论上没有限制,取决于服务器的硬件和配置。
4、生命周期不同:
Cookie可以设置过期时间,即便关闭浏览器或者重新打开电脑,Cookie仍然存在,直到过期或者被删除。而Session一般默认在浏览器关闭后就会过期。
5、访问方式不同:
Cookie可以通过JavaScript访问,而Session只能在服务器端进行访问。
6、使用场景不同:
Cookie一般用于存储小型的数据,如用户的用户名和密码等信息。而Session一般用于存储大型的数据,如购物车、登录状态等信息。
总之,Cookie和Session都有各自的优缺点,选择使用哪一种方式,取决于具体的应用场景和需求。一般来说,如果需要存储敏感信息或者数据较大,建议使用Session;如果只需要存储少量的数据,并且需要在客户端进行访问,可以选择使用Cookie。

在Web应用程序中,使用token和不使用token的主要差异在于身份验证和安全性

1.身份验证:采用token机制的Web应用程序,用户在登录成功后会收到一个token,这个token可以在每次请求时发送给服务器进行身份验证。而不采用token机制的Web应用程序,一般会使用session机制来保存用户登录状态,服务器会在用户登录成功后创建一个session,之后的每个请求都需要在HTTP头中附带这个session ID,以便服务器能够验证用户身份。
2、安全性:采用token机制的Web应用程序,在服务器上不会存储用户的登录状态,只需要存储token即可。因此,即使token被盗取,黑客也无法获得用户的密码或者其他敏感信息。而不采用token机制的Web应用程序,一般会在服务器上存储用户的登录状态,因此如果服务器被黑客攻击,黑客可能会获得用户的敏感信息。
3、跨域访问:采用token机制的Web应用程序,在跨域访问时,可以使用HTTP头中的Authorization字段来传递token信息,方便实现跨域访问。而不采用token机制的Web应用程序,在跨域访问时,需使用cookie或session来传递用户身份信息,比较麻烦。
总之,采用token机制可以提高Web应用程序的安全性,并且方便实现跨域访问。不过,使用token机制也需要开发者自己来实现身份验证和token的生成和验证,相对来说比较复杂。而不采用token机制,使用session机制则相对简单,但是安全性相对较低。因此,具体采用哪种机制,需要根据实际情况进行权衡和选择。

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

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

相关文章

ansible 批量设置主机名

修改之前的主机名 # hostname -i ::1 127.0.0.1 编写hosts文件 在任意位置编写hosts文件 # cat hosts [test] ailog4x10.221.206.227 hostnamepaas-10-221-206-227 ansible_python_interpreter/usr/bin/python3 ansible_ssh_host10.221.206.227 ansible_ssh_port22 ansible…

复习java基础

复习一天有点忘了的知识&#xff1a; 结构化编程 结构化程式设计(英语:Structured programming)是1960年代开始发展起来的一种编程典范。它采用子程序、程式码区块、for循环以及while循环等结构来取代传统的goto。 指导思想 自顶向下、逐步求精、模块化 编程过程 流程图是…

Django配置数据库ORM基础字段选项增删改查F对象Q对象聚合查询原生数据库操作SQL注入

前置条件 MySQL已安装安装pip3 install mysqlclient. #是对C语言操作MySQL数据库的一个简单封装支持Python3安装不上mysqlclient的话&#xff0c;pip3 install pymysql #纯Python实现的一个驱动. 用pymysql的话需要伪装成mysqlclient&#xff08;因为Django源代码要求mysqlcli…

VUE学习六之绑定样式及条件属性

绑定样式及条件属性 绑定样式条件属性 绑定样式 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>绑定样式</title><style>.basic{width: 400px;height: 100px;border: 1px solid black;}.happy{border: 4px…

Appium 安卓环境的配置

目录 前言&#xff1a; 环境准备 写个脚本玩玩 前言&#xff1a; 在使用Appium进行安卓自动化测试之前&#xff0c;需要配置相应的安卓环境。 环境准备 为了避免走弯路&#xff0c;我们先要确保三点&#xff1a; Android SDK API > 17 (Additional features require …

【Python爬虫与数据分析】进阶语法

目录 一、异常捕获 二、迭代器 三、拆包、聚合、映射 四、filter() 函数 五、匿名函数 六、闭包 七、装饰器 一、异常捕获 异常捕获可增强程序的健壮性&#xff0c;即程序在遇到遇到异常的时候并不会做中断处理&#xff0c;而是会将异常抛出&#xff0c;由程序员来分析…

Kafka 入门到起飞 - 核心概念(术语解释)

在kafka之旅&#xff0c;我们会大量讨论Kafka中的术语&#xff0c;那么就让我们先来了解一下这些核心概念 消息(Message)&#xff1a; kafka的数据单元称为消息&#xff0c;相当于DB里的一行数据或一条记录 消息由字节数组组成 批次&#xff1a; 生产者组一批数据再向kafka推送…

C++编程(四) —— OOP

文章目录 前言一、this指针二、构造和析构三、深拷贝浅拷贝浅拷贝深拷贝 编程实践 前言 什么是OOP思想&#xff1f; OOP语言的四大特征&#xff1a; 抽象&#xff0c;封装/隐藏&#xff0c;继承&#xff0c;多态 一、this指针 this指针》类》很多对象 一套成员方法是如何处…

网络层数据链路层协议—网络

文章目录 1.网络层协议—IP协议1.1协议字段 2.数据链路层协议2.1以太网2.2以太网帧2.3mtu2.4ARP协议 1.网络层协议—IP协议 1.1协议字段 &#xff08;1&#xff09;16位标识&#xff1a;mtu规定了需要数据报分片的大小&#xff0c;16位标识来标识原始数据 &#xff08;2&…

键盘控制鼠标移动

记录一下&#xff0c; windows用autohotkeys crtl 方向键 / 空格 &#xff1a;移动鼠标 / 鼠标左击 crtl shift 方向键 / 空格&#xff1a; 快速移动鼠标 / 鼠标右击 ^up::MouseMove,0,-75,0,r ^up::MouseMove,0,-15,0,r ^down::MouseMove,0,75,0,r ^down::MouseMove,0,…

深入学习 Redis - 深挖经典数据类型之 string

目录 前言 一、string 类型 1.1、操作命令 set / get &#xff08;设置 / 获取&#xff09; mset / mget&#xff08;批量 > 设置 / 获取&#xff09; setnx / setex / psetex &#xff08;设置时指定不同方式&#xff09; incr / incrby / decr / decrby/ incrbyfloat…

船舶中压配电板应用弧光保护,可解决母排故障短路问题,对于提高船舶电站的安全性、稳定性,降低经济损失具有重要意义。-安科瑞黄安南

摘要&#xff1a;船舶中压配电板弧光故障导致的设备损坏和停电事故&#xff0c;不仅会造成较大的经济损失&#xff0c;而且严重影响船舶电站的安全稳定运行&#xff0c;威胁船舶电站操作人员的安全。弧光保护是基于电力系统开关柜发生弧光故障时而设计的一套母线保护系统&#…

如何让C++代码也弥漫着炎热的感觉

写一段非常炎热的C代码 当然&#xff0c;这里有一个简单的炎热的C代码示例&#xff0c;它演示了一个循环打印输出的程序&#xff1a; #include <iostream> #include <ctime>int main() {std::cout << "炎热的夏日&#xff0c;热力四溢&#xff01;&quo…

分布式存储系统(Ceph)基础

存储基础 存储设备 DAS&#xff1a;IDE、SATA、SCSI、SAS、USBNAS&#xff1a;NFS、CIFSSAN&#xff1a;SCSI、FC SAN、iSCSI 存储内容包括元数据和数据&#xff0c;名称节点&#xff08;NameNode&#xff09;存放元数据&#xff0c;数据节点&#xff08;DataNode&#xff09…

【布局优化】基于遗传算法的车间布局优化 车间设施布局优化【Matlab代码#50】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 车间布局优化2. 基于GA的布局优化模型3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节&#xff1a;资源获取】 1. 车间布局优化 车间设施布置的规划一直是工业工程领域不断研究和探索的内容&am…

JavaWeb(5)——HTML、CSS、JS 快速入门

一、JavaScript 对象 二、JavaScript BOM对象 和 DOM对象 关于BOM主要对 Window 和 location 进行说明&#xff1a; 三、JavaScript 事件监听 事件绑定 常见事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">…

libcurl库使用实例

libcurl libcurl是一个功能强大的跨平台网络传输库&#xff0c;支持多种协议&#xff0c;包括HTTP、FTP、SMTP等&#xff0c;同时提供了易于使用的API。 安装 ubuntu18.04平台安装 sudo apt-get install libcurl4-openssl-dev实例 这个示例使用libcurl库发送一个简单的HTTP …

数据结构——树

数据结构——树 树&#xff08;Tree&#xff09;是一种常见的数据结构&#xff0c;用于存储具有层级关系的数据。树由一组称为节点&#xff08;Node&#xff09;的元素组成&#xff0c;节点之间通过边连接。其中一个节点被称为根节点&#xff08;Root&#xff09;&#xff0c;根…

数据库的基本查询(二)

目录 一、简单查询二、高级查询2.1 分页2.3 结果集排序2.4 去重 三、条件查询3.1 算术运算符3.2 比较运算符3.3 逻辑运算符3.4 按位运算符3.5 WHERE子句的注意事项 一、简单查询 # 查询t_emp表的所有字段 SELECT * FROM t_emp;# 查询t_emp表的指定字段 SELECT ename, empno FR…

谷歌Bard:ChatGPT之外的第三选择

2023年年初&#xff0c;为了对应ChatGPT方面的压力&#xff0c;谷歌Bard仓促上线&#xff0c;此后便进入了低调前行。目前为止已经迭代了9个版本&#xff0c;也就是在近期的版本更新中支持了中文&#xff08;简体/繁体&#xff09;语言&#xff0c;对国内用户可以说又友好了一步…