news 2026/10/8 22:52:10

Day22 XD安全学习笔记-PHP 应用留言板功能超全局变量数据库操作第三方插件引用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day22 XD安全学习笔记-PHP 应用留言板功能超全局变量数据库操作第三方插件引用

祝贺各位成功进入安全开发阶段!网络安全避免不了掌握一些必要的开发知识,为后续代码审计和了解漏洞原理打下基础。这阶段的第一天就让我踩了不少坑,差点找不到开发工具资源放弃了。由于时间紧张,之后笔记会偏向贴出的代码注释加上对逻辑的理解和大概的复现指南。食用建议跟着一起敲代码。

这天的内容要求创建数据库和表,写连接数据库的php脚本,前端表单提交,留言模块前台留言的添加、显示功能和后台留言显示、添加和删除功能。

一.开发前准备

1.开发工具获取

phpstudy可以参考下面贴出的教程。Phpstom小迪给的激活码链接用不了了,可以直接去网店搜相关工具的激活码。navicat用社区版的就可以了,就是要用QQ邮箱来注册一个ID,有两个一样的下载按钮,直接点左边第一个。DW里面放了很多前端的模板,可以在网页直接搜的,比如菜鸟教程。

Phpstudy下载地址:www.xp.cn/phpstudy

Phpstudy配置教程:

blog.csdn.net/wleiloaf/article/details/121662832

Phpstom下载地址:www.jetbrains.com.cn/phpstorm/download/other/#releases-2022

Navicat下载地址:www.navicat.com.cn/download/navicat-premium-lite

2.工具配置

1.Phpstom

解释器选择phpstduy的:

phpStudy_64\phpstudy_pro\phpstudy_pro\Extensions\php\php7.3.4nts\php.exe

点这个可以切换php版本

在小皮的www根目录下创建demo01文件夹,新建项目就选这个

2.Navicat

启动服务并连接本地数据库

启动服务

数据库账号密码

打开navicat,点击左上角连接-->选择MySQL数据库-->填入账号密码就可以连接了

二.代码

1.代码结构:

.htaccess和nginx.htaccess是自己生成的

2.代码

(1)config.php
<?php $dbip='localhost';//数据库IP地址,数据库在本地就是localhost $dbuser='root';//数据库用户名 $dbpass='123456';//数据库密码 $dbname='demo01';//数据库名 $conn=mysqli_connect($dbip,$dbuser,$dbpass,$dbname);//mysqli_connect是php连接MySQL数据库的函数,输入以上四个值就能掉哟个函数连接,把这个连接传给变量$conn,方便给其他数据库操作调用
(2)gbook.php
<script src="/ueditor/ueditor.config.js"></script> <script src="/ueditor/ueditor.all.js"></script> //引入UEditor 的 JS 文件 <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> //写一个前端表单,提交用户名和留言内容。name作为标识和后端的传输,浏览器输入用户名和留言内容提交,后端php分别用username和content接收传输数据。如果用户名改成user,后端就要用user接收。 //id作为前端的标识,输入留言内容的文本框id用content标识.想要给这个文本框引入编辑器就要在文本编辑器引入文本框的id,因为前端不认识什么文本框,只认识id。 //method是提交方法,前端用post方法提交,后端就要用post方法接收。类似地,前端用get方法提交,后端就用get方法接收。其他的都是一些样式,设计这块长宽高、颜色和最大长度等样式。 <?php include 'config.php';//文件包含,因为config.php和gbook.php在同一个目录下面,所以直接填文件名就好了,包含就相当于是导入包,config的变量和函数在这里都可以直接用。 function add_gbook($conn){ //写一个新增留言的函数,传入数据库连接变量。 $u = @$_POST['username']; //因为前端是post方法提交,所以这里用post方法接收,也就是$_POST['name标识'];。前面的@是用来抑制报错的。 if (isset($u)) { //先判断用户名是否为空,不为空则继续执行 $c = @$_POST['content']; $i = @$_SERVER['REMOTE_ADDR']; $ua = @$_SERVER[HTTP_USER_AGENT]; //同样传入留言内容和访问的浏览器IP地址和UA头,后面两个是自动获取的,不用提交 $sql = "insert into gbook(username,content,ipaddr,uagent) value('$u','$c','$i','$ua');"; //写入MySQL插入数据的sql语句,在表gbook中插入用户名、留言内容、IP地址和ua头。表名和列名用‘包起来或者干脆不写,要注意是反单引号。最后有两个分号,第一个是sql语句的,第二个是php的。 if (mysqli_query($conn, $sql)) { //用php的MySQL查询函数传入数据库连接和查询语句,结果不为假则继续往下执行 echo "<script>alert('留言成功!')</script>"; //打印前端弹窗语句<script>alert('留言成功!')</script>到前端,被嵌入前端页面执行,从而弹窗 } } } function show_gbook($conn,$del){ //写显示所有留言的函数,传入数据库连接和删除操作判断变量 $sql1="select * from gbook;"; //查询gbook表中所有数据 $data=mysqli_query($conn,$sql1); //将查询的数据传给变量$data while ($row=mysqli_fetch_row($data)) { //mysqli_fetch_row函数是从查询结果中取出一行数据,用while读取所有数据 echo '<hr>'; //用一条线隔开 echo '用户名:'.$row[0].'<br>'; //.用来连接字符,$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>"; //如果传入函数的变量为$del是'del',则生成删除那一行数据的链接,点击就会访问http://127.0.0.1/admin/gbook_admin.php?del=用户名,用户名为当前那一行的第一列数据,也就是用户名。 } } } add_gbook($conn); //调用新增留言的函数,在前端提交内容,这个函数就会对内容进行处理 show_gbook($conn,'x'); //调用显示所有留言的函数,del参数为x不等于del,则不生成删除操作的链接
(3)gbook_admin.php
<?php include '../config.php'; include '../gbook.php'; show_gbook($conn,'del'); //del参数等于del,则生成删除操作的链接 $delstr=@$_GET['del']; //如果点击了链接就会访问http://127.0.0.1/admin/gbook_admin.php?del=用户名,链接里面有del。因为链接传参是get方式,所以用get方式接收。将传入的用户名传给变量$delstr if(isset($delstr)){ //如果变量不为空则继续往下执行 $sql2="delete from gbook where username = '$delstr';"; //删除表gbook中用户名为$delstr中的数据sql查询语法 if(mysqli_query($conn,$sql2)){ echo "<script>alert('删除成功!')</script>"; } }

3.交作业

(1)前台页面

(2)前台留言操作

(3)后台页面

(4)后台删除操作

(5)后台留言操作

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 22:51:24

2026双智造基地官网正式上线,一站速览智造前沿动态

2026双智造基地官网正式上线&#xff0c;一站速览智造前沿动态当门窗行业还在拼单品性能时&#xff0c;头部玩家已经开始亮出“智造底牌”。2026年&#xff0c;金致尚品门窗双智造基地官网正式上线&#xff0c;这意味着什么&#xff1f;不仅是企业数字化形象的全面升级&#xf…

作者头像 李华
网站建设 2026/10/8 22:51:07

远程线程注入

基础概念 注入定义&#xff1a;在第三方进程不知情 / 未授权的前提下&#xff0c;把代码 / 模块写入目标进程虚拟地址空间并执行 安全领域&#xff1a;注入与反注入持续对抗 常见注入&#xff1a;远程线程注入、APC 注入、钩子注入、输入法注入、导入表注入远程线程注入核心思路…

作者头像 李华
网站建设 2026/10/8 22:51:00

e2e视口配置完全指南:多分辨率Web测试最佳实践

e2e视口配置完全指南&#xff1a;多分辨率Web测试最佳实践 【免费下载链接】e2e Next generation e2e testing framework for web and mobile apps. 项目地址: https://gitcode.com/GitHub_Trending/e2e6/e2e e2e 视口&#xff08;viewport&#xff09;配置是这套开源 A…

作者头像 李华
网站建设 2026/10/8 22:48:33

应用开放平台 应用市场上架备案相关流程

open.tencent.com 为贯彻落实《中华人民共和国反电信网络诈骗法》、《互联网信息服务管理办法》及《非经营性互联网信息服务备案管理办法》等法律法规要求&#xff0c;配合相关部门做好移动互联网信息服务管理&#xff0c;根据2023年8月4日工信部发布的《工业和信息化部关于开展…

作者头像 李华
网站建设 2026/10/8 22:42:25

剪映数字人长句口型不齐:先核原声和断句,再比较同一句修改结果

园艺课数字人讲一段较长说明&#xff0c;嘴部动作和声音明显不齐&#xff0c;可以先核文稿、原声与画面各自状态&#xff0c;再在当前支持范围内试断句或语速。调整文稿可能改善表达&#xff0c;但不能保证所有嘴部问题都随之修复&#xff0c;最终仍要看实际音画。剪映有数字人…

作者头像 李华
网站建设 2026/10/8 22:42:19

选题毫无头绪?资深教授推荐这几个AI论文软件

写论文总感觉无从下手&#xff1f;选题难、思路乱、资料找不全、格式又复杂——这些痛点几乎每个学生都经历过。其实&#xff0c;关键在于用对 AI 工具、走对写作流程&#xff0c;才能事半功倍。资深教授普遍推荐&#xff1a;千笔AI&#xff08;中文全流程首选&#xff09; 豆包…

作者头像 李华