0


web开发安全 php+html+js && 初级留言框架 && 前端和数据库的联动 && 初级留言框的安全问题

前言

主要是通过开发者的角度去了解相应的安全问题。学习的目的就是了解一下早期留言框的安全问题。

开发环境

用到 vscode(需要配置php html 环境) 或者使用phpstorm DW

留言板的功能: 用户写入数据 到我们开发的网页 ------ 数据经过我们的php代码 进行相关数据库的交互 -------- 数据库内容回显 ------- php -------提示我们留言成功等信息

HWML 创建一个交互型表单

【DW 2021】Adobe Dreamweaver 2021 软件安装包及安装教程 dw

直接进入DW872b702c87c14073818d9085d77008a4.png

数据库列的导入

我们要交互就得有相应的数据库 和 数据库表单

Navicat Premium 16
https://mp.weixin.qq.com/s/ZruHjvEU5gfn7iCJtD671w

PhpStudy Pro
https://www.xp.cn/
把上边两个配置好之后 使用navicat1ca7982aff594813896d07517294547f.png

数据库配置好之后 我们打开 VScode

html的环境配置就是直接 下载拓展就行

php需要先把小皮面版的 php开发环境 写到环境变量 path

然后再下载拓展 php sever

php与数据库的交互

要想和数据库交互就得 先链接上

60772d1febc4405ab97efe2eb069ba41.png

这边要是想判断 连接成功没也可以写上

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();   //返回错误数据
} 

0b8f576d43f947d8b15b32df5bec97a6.png

其实每次有数据库的交互都可以进行判断一下 有没有交互成功

连接上之后我们就得把写入的用户数据 传输到数据库

这个时候我们就可以定义一下参数 后续方便传参(指的是把用户数据以参数的形式进行传第的)

6461721a18e941e68777a650aa1b4a66.png

把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')"); //因为用户输入内容是插入到 数据库的

这个之后其实可以判断一下 数据内容是否插入成功

执行一下 再看一下数据库连接 就会有数据进入 8f6ebddbf64b4186a8aa9603cca1314b.png

数据内容回显

数据回显就是我们查询数据然后利用语句进行捕捉 然后把捕捉的 数据

这个就是先 $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)

那就开始定义函数把定义起来吧 先定义一个添加函数2202327fc3f1401baad957a486cc6693.png

5f6b90bea0a74c40ab689826d2b47870.png

定义一个展示函数 我们把函数定义了之后是不会给我们执行的 这个需要我们的调用 5f70aab970c74da2a07d83f06707e59b.png

这边我们为了区分后台 直接就是在后台设置一个专属高权限 删除数据的权限

怎么定义呢 我们可以先定义个删除键 再赋予删除键参数 进行数据库的delete功能

ffefd52307664f90b98a887d97dcde5a.png

那有些小伙伴可能说 你妹的啊 不是 $del=='del'才能显示吗 你怎么不赋值啊

这个的话直接看7141f67c5fe144bca8aaaad73ab37c76.png

我们这里是不能给这个用户网页删除键的 这个就是为了区别 用户网页和管理页

54d496fa00a0475aaf3b9af19f5deed2.png

那我们就试一试吧 换客户端 输入数据 数据进入了数据库

0ad953d5709642aea71b91f49f16e293.png

删除

2a7a12f98817414c89821699729a6a00.png

插件的应用

eadf0fd31e244a88bdf3270579cac8c4.png

这个就是插件 | 使用:3f3f404847094a73857f7e3e82ebac97.png

da6086c172a0459791fc2103aa9e6046.png

4aabb0485bd249e5bfecacfa41aa0a95.png

然后就是安全问题

1、就是我们用的这个插件的安全 :因为这个东西不是我们写的,所有这个可以去网上搜搜源码看看有没有什么漏洞

2、XSS 漏洞 <script>alert('xxs')</script> 注入一下但是 这个两个框都是有过滤的 (数据库过滤 和 插件过滤)

3、就是未授权访问 (因为我这个后台php是没有设置验证cookie的所以 我们可以直接登上)c1410458dc7a42cabdd9b8c1b18b835d.png

总结就是以这个开发为例引出安全问题


本文转载自: https://blog.csdn.net/2301_81155391/article/details/143805736
版权归原作者 摸鱼也很难 所有, 如有侵权,请联系我们删除。

“web开发安全 php+html+js && 初级留言框架 && 前端和数据库的联动 && 初级留言框的安全问题”的评论:

还没有评论