前言
主要是通过开发者的角度去了解相应的安全问题。学习的目的就是了解一下早期留言框的安全问题。
开发环境
用到 vscode(需要配置php html 环境) 或者使用phpstorm DW
留言板的功能: 用户写入数据 到我们开发的网页 ------ 数据经过我们的php代码 进行相关数据库的交互 -------- 数据库内容回显 ------- php -------提示我们留言成功等信息
HWML 创建一个交互型表单
【DW 2021】Adobe Dreamweaver 2021 软件安装包及安装教程 dw
直接进入DW
数据库列的导入
我们要交互就得有相应的数据库 和 数据库表单
Navicat Premium 16
https://mp.weixin.qq.com/s/ZruHjvEU5gfn7iCJtD671w
PhpStudy Pro
https://www.xp.cn/
把上边两个配置好之后 使用navicat
数据库配置好之后 我们打开 VScode
html的环境配置就是直接 下载拓展就行
php需要先把小皮面版的 php开发环境 写到环境变量 path
然后再下载拓展 php sever
php与数据库的交互
要想和数据库交互就得 先链接上
这边要是想判断 连接成功没也可以写上
if(mysqli_connect($dbip,$dbuser,$dbpasswd,$dbname))
{ echo "<script>alert('连接成功')</script>" } //这边还有个知识就是代码的混编 因为php内是不允许任何前端其他语言的加入(但是html js 语言中都能加入 php) 所以想弹个窗就得混编到 输出语句里
else
{echo "<script>alert('连接失败')</script>"} // 这里有个单引号双引号的区别 就是有字符串的时候就得用双引号(原因就是单引号不易识别字符串) 这里汉字的话建议就是用 '' 用"" 容易报错
//或者利用msqli_connect_errno($con)
if (!$con))
{
echo "连接 MySQL 失败: " . mysqli_connect_error(); //返回错误数据
}
其实每次有数据库的交互都可以进行判断一下 有没有交互成功
连接上之后我们就得把写入的用户数据 传输到数据库
这个时候我们就可以定义一下参数 后续方便传参(指的是把用户数据以参数的形式进行传第的)
把ht的数据先化参数
$u=@$_POST['username']; //@是进行函数的规整 post就是我们上边说的methd=post 一post的方式进行数据传输
$c=@$_POST['content'];
定义完之后 我们的sql字段还写了ip 和ua 头这就 需要用特点的一下php语句进行操作了(获取IP 和ua头)
https://www.runoob.com/php/php-ref-mysqli.html
这个用到 $i=$_SEVER['REMOTE_ADDR'] //获取ip //这里涉及一个[] ()的使用一般php里()就是用来包含参数($xxx)等信息的 [ ]是包含char
$ua=$_SEVER['HTTP_USER_AGENT'] //获取 ua头
传完参数之后 我们就是可以进行交互了(交互是最后和数据表的)
mysqli_query($con,"SELECT * FROM gbook"); //看看数据表 和表内的字段是否存在
mysqli_query($con,"INSERT INTO gbook (username, content, IPaddress, uagent)
VALUES ('$u','$c','$i','$ua')"); //因为用户输入内容是插入到 数据库的
这个之后其实可以判断一下 数据内容是否插入成功
执行一下 再看一下数据库连接 就会有数据进入
数据内容回显
数据回显就是我们查询数据然后利用语句进行捕捉 然后把捕捉的 数据
这个就是先 $sql="select * from gbook" 定义数据库查询语句
这里可以看看上边mysqli_fetch_row的使用 $result=mysqli_query($con,$sql)先执行
while ($row=mysqli_fetch_row($result))
{
// printf ("%s : %s",$row[0],$row[1]);
echo "<br>";
echo '<hr>';
echo '用户名:'.$row[0].'<br>'; //$row[0]就是从结果中取出 下标为0 的元素 比如查询的内容为 111 222 333 那么roe[0] 就是111
echo '内容:'.$row[1].'<br>';
echo 'ip'.$row[2].'<br>';
echo 'ua头'.$row[3].'<br>';
}![dcb67e93de854d569a000de18cc7d295.png](https://i-blog.csdnimg.cn/direct/dcb67e93de854d569a000de18cc7d295.png)
运行一下看看是否回显 还有个技巧就是 如果我们执行错误了 可以把$result 输出出来看看内容
后台的设置 我们知道一般网页都是有个管理系统后台去快捷管理 其他php 但是因为快捷性管理就是涉及到了 函数的使用(function)
那就开始定义函数把定义起来吧 先定义一个添加函数
定义一个展示函数 我们把函数定义了之后是不会给我们执行的 这个需要我们的调用
这边我们为了区分后台 直接就是在后台设置一个专属高权限 删除数据的权限
怎么定义呢 我们可以先定义个删除键 再赋予删除键参数 进行数据库的delete功能
那有些小伙伴可能说 你妹的啊 不是 $del=='del'才能显示吗 你怎么不赋值啊
这个的话直接看
我们这里是不能给这个用户网页删除键的 这个就是为了区别 用户网页和管理页
那我们就试一试吧 换客户端 输入数据 数据进入了数据库
删除
插件的应用
这个就是插件 | 使用:
然后就是安全问题
1、就是我们用的这个插件的安全 :因为这个东西不是我们写的,所有这个可以去网上搜搜源码看看有没有什么漏洞
2、XSS 漏洞 <script>alert('xxs')</script> 注入一下但是 这个两个框都是有过滤的 (数据库过滤 和 插件过滤)
3、就是未授权访问 (因为我这个后台php是没有设置验证cookie的所以 我们可以直接登上)
总结就是以这个开发为例引出安全问题
版权归原作者 摸鱼也很难 所有, 如有侵权,请联系我们删除。