网络安全学习(基础篇)

前端基础-js

JavaScript 是一门跨平台、面向对象的脚本语言,它能使网页可交互(例如拥有复杂的动画,可点击的按钮,通俗的菜单等)。 另外还有高级的服务端Javascript 版本,例如Node.js,它可以让你在网页上添加更多功能,不仅仅是下载文件(例如在多台电脑之间的协同合作)

http和https

比较

https相对于http更加安全,它采用了对称加密和非对称加密的方式,因为http协议容易造成中间人攻击,所以在http协议前面加上tls(安全传输层协议)来增加其安全性。

https如何加密?为什么?

https通过非对称加密来传递对称加密的密钥,然后通过对称加密进行数据传输。前一步使用双重加密极大的增加了传输的安全性,而使用对称加密进行数据传输是因为传输的效率高,因为非对称加密的密钥前后不一样。

什么是加密什么是签名?

私钥加密 公钥解密 号称签名
公钥加密 私钥解密 号称加密

如何实现非对称密钥传输对称密钥?

对称密钥算法非常适合于快速并安全地加密数据。但缺点是,发件人和收件人必须在交换数据之前先交换密钥。非对称密钥的主要优势在于密钥能够公开,由于用作加密的密钥(也称公开密钥)不同于作解密的密钥(也称私人密钥)因而解密密钥不能根据加密密钥推算出来,所以公钥加密提供了一种有效的方法,可用来把大量数据执行对称加密时使用的机密密钥发送给某人。结合使用加密数据的对称密钥算法与交换机密钥的公钥算法可产生一种即快速又灵活的解决方案。

简述CA的作用

CA叫做“证书授权中心”。 它是负责管理和签发证书的第三方机构,作用是检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改。

https传输过程

1.客户端先从服务器获取到证书,证书中包含公钥
2.客户端将证书进行校验
3.客户端生成一个对称密钥,用证书中的公钥进行加密,发送给服务器
4.服务器得到这个请求后用私钥进行解密,得到该密钥
5.客户端以后发出后续的请求,都使用这个对称密钥进行加密。
6.服务器收到这个密文也用这个密钥进行解密。
在这里插入图片描述

各种常用状态码含义

状态码含义
200OK-请求成功,一般用于GET与POST请求
301Moved Permanently-资源(网页等)被永久转移到其它URL
302Found-临时移动和301相似
304Not Modified- 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。
307Temporary Redirect-临时重定向。与302类似。使用GET请求重定向
308Permanent Redirect-永久重定向,说明请求的资源已经被永久的移动到了由 Location 首部指定的URL 上
400Bad Request - 客户端请求有语法错误,不能被服务器所理解
401Unauthorized - 请求要求用户的身份认证
403Forbidden-服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found-请求资源不存在,可能是输入了错误的URL
500Internal Server Error-服务器内部发生了不可预期的错误
501Not Implemented -服务器不支持请求的功能,无法完成请求
503Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

DNS解析过程

以访问百度服务器为例:
1.检查本地dns缓存,看缓存中是否有解析数据
2.查看本地hosts文件
3.本机固定的dns服务器(路由器)找13台根域服务器
4.根域找到com域(给你返回结果)com找到baidu域名(返回给你主机)
5.和百度服务器建立tcp可靠连接,三次握手

TCP三次握手,四次挥手

FIN :连接终止位
seq:发送的第一个字节的序号
ACK:确认报文段
ack:确认号。希望收到的下一个数据的第一个字节的序号
在这里插入图片描述

**第一次握手**(客户端发送 SYN 报文给服务器,服务器接收该报文):
客户端什么都不能确认;
服务器确认了对方发送正常,自己接收正常

**第二次握手**(服务器响应 SYN 报文给客户端,客户端接收该报文):
客户端确认了:自己发送、接收正常,对方发送、接收正常;
服务器确认了:对方发送正常,自己接收正常

**第三次握手**(客户端发送 ACK 报文给服务器):
客户端确认了:自己发送、接收正常,对方发送、接收正常;
服务器确认了:自己发送、接收正常,对方发送、接收正常

在这里插入图片描述

刚开始双方都处于ESTABLISHED 状态,假设是客户端先发起关闭请求。四次挥手的过程如下:

1)第一次挥手:客户端发送一个 FIN 报文(请求连接终止:FIN = 1),报文中会指定一个序列号 seq = u。并停止再发送数据,主动关闭 TCP 连接。此时客户端处于 FIN_WAIT1 状态,等待服务端的确认。

FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
2)第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。

CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
此时的 TCP 处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待 2)状态,等待服务端发出的连接释放报文段。

FIN-WAIT2 - 从远程TCP等待连接中断请求;
3)第三次挥手:如果服务端也想断开连接了(没有要向客户端发出的数据),和客户端的第一次挥手一样,发送 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态,等待客户端的确认。

LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
4)第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答(ack = w+1),且把服务端的序列值 +1 作为自己 ACK 报文的序号值(seq=u+1),此时客户端处于 TIME_WAIT (时间等待)状态。

TIME-WAIT - 等待足够的时间以确保远程TCP接收到连接中断请求的确认;
🚨 注意 !!!这个时候由服务端到客户端的 TCP 连接并未释放掉,需要经过时间等待计时器设置的时间 2MSL(一个报文的来回时间) 后才会进入 CLOSED 状态(这样做的目的是确保服务端收到自己的 ACK 报文。如果服务端在规定时间内没有收到客户端发来的 ACK 报文的话,服务端会重新发送 FIN 报文给客户端,客户端再次收到 FIN 报文之后,就知道之前的 ACK 报文丢失了,然后再次发送 ACK 报文给服务端)。服务端收到 ACK 报文之后,就关闭连接了,处于 CLOSED 状态。

MySQL

严格模式修改

严格模式导致mysql5.7插入用户表的方式新建用户失败,该如何修改严格模式,让他插入成功?

解决方法:关闭严格模式
临时关闭:
在MySQL库中添加如下代码:

mysql> set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

在这里插入图片描述
永久关闭:
进入MySQL配置文件中(/etc/mysql/my.cnf)添加如下代码:

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

在这里插入图片描述

修改权限

将用户的all权限改为select,并且将改为指定数据库
all是所有的权限而select只是查询的权限所以只需要将all改为select即可

mysql>grant select on . to root@localhost identified by123456” WITH GRANT OPTION ;
mysql>flush privileges;		//完成后需要刷新

'.'改为指定数据库如下

mysql>grant select,insert,update,delete on 库名.* to test1@'%' identified by '123456';
mysql>flush privileges;		//完成后需要刷新

N叉树

N叉树是否可以人为修改?
可以,有两种方式:

1, 通过改变 key 值来调整
N 叉树中非叶子节点存放的是索引信息,索引包含 Key 和 Point 指针。Point 指针固定为 6 个字节,假如 Key 为 10 个字节,那么单个索引就是 16 个字节。如果 B + 树中页大小为 16 K,那么一个页就可以存储 1024 个索引,此时 N 就等于 1024。我们通过改变 Key 的大小,就可以改变 N 的值。

2, 改变页的大小
页越大,一页存放的索引就越多,N 就越大。
数据页调整后,如果数据页太小层数会太深,数据页太大,加载到内存的时间和单个数据页查询时间会提高,需要达到平衡才行。

16kb page 是否可以修改?
我们都知道innodb的页块大小默认为16kb,表中数据是存放在B-tree
官方文档中给出
the maximum row size for the default innodb_page_size of 16KB
在这里插入图片描述
最好小变大而不是大变小,因为如果页中已经存在了数据,将页变小会造成数据溢出。

trycat和delete的区别

DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。 TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。 并且在删除的过程中不会激活与表有关的删除触发器, 执行速度快。

substring和substr的区别

在MySQL中substring和substr没有什么区别,原因是MySQL下标是从1开始的,并且都是闭区间
在这里插入图片描述
在这里插入图片描述

redo log和binlog区别?

1.redo log是innodb引擎特有的,binlog是MySQL的Server层实现的,所有引擎都可以使用;
2.redo log是物理日志,记录的是“在某个数据页上做了什么修改”(数据页上某个偏移量的值);binlog是逻辑日志,记录的是这个语句的原始逻辑(sql、数据行)
3.redo log是循环写的,空间固定会用完,用完就需要刷盘然后从头开始写;binlog是可以追加写入的。“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

如果只用redo log或者binlog可以吗?

为什么不仅使用redo log,不要binlog可以吗?
1.如果只从崩溃恢复的角度来讲是可以的。可以把binlog关掉,但系统依然是crash-safe的;
2.但是binlog有着redo log无法替代的功能,binlog的主要作用是归档,redo log是循环写,写到末尾是要回到开头继续写的。
3.MySQL系统依赖于binlog,mysql系统高可用的基础就是依赖于binlog复制;
为什么不仅使用binlog来支持崩溃恢复,并且还能支持归档
1.历史原因:innodb并不是MySQL的原生存储引擎。MySQL的原生引擎是myISAM,设计之初就没有支持崩溃恢复。
2.实现原因:由于innodb引擎使用的是WAL技术,执行事务的时候,写完内存和日志,事务就算完成了。并且binlog没有能力恢复“数据页”,所以仅使用binlog的话,当发生了crash之后,是无法凭借binlog把那些已经commit过的事务进行恢复的;
3.优化一下binlog的实现,让它也记录数据页的更改:这相当于又做了一个redo log出来!

实验

binlog数据恢复实验

查看binlog记录格式:

MariaDB [(none)]> show variables like’%format%';

开启binlog:

┌──(root💀kali)-[~]
└─# vim /etc/mysql/mariadb.conf.d/50-server.cnf

插入log-bin = mysqlbin

重启mysql服务:

┌──(root💀kali)-[~]
└─# service mysql restart

查看binlog是否开启:

MariaDB [(none)]> show variables like’log_%';

查看是否生成mysqlbin文件:

┌──(root💀kali)-[~]
└─# cd /var/lib/mysql

┌──(root💀kali)-[/var/lib/mysql]
└─# ls -all

在mysql中查看最新日志:

MariaDB [(none)]> show master logs;

MariaDB [(none)]> show binlog events in ‘mysqlbin.000001’\G

创建库和表并插入数据:

全量备份:

┌──(root💀kali)-[/tmp]
└─# mysqldump -uroot -proot -B -F -x --master-data=2 oupeng|gzip >/tmp/oupenglog

整改删除了库:

避免删除复制最新的文件:

┌──(root💀kali)-[/var/lib/mysql]
└─# cp -v mysqlbin.000012 /tmp

为避免后续数据刷入日志:

MariaDB [mysql]> flush logs;

mysql打开备份的文件

┌──(root💀kali)-[/tmp]
└─# mysql -uroot -proot < oupenglog

这时候就会发现欧鹏数据库回来了,但是不全所以就要用到000012这个文件了
编辑000012这个文件删除drop之后的数据并重定向到mysqlbin下
这时候数据就完全恢复了

iptables防止nmap扫描

在未配置iptables时nmap可以正常扫描

在这里插入图片描述

在被扫描端配置端口拒绝:

在这里插入图片描述

查看iptables设置:

在这里插入图片描述

用windows nmap发现状态是closed

在这里插入图片描述

说明iptables 已经阻止了nmap的扫描

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值