benjaminaaa level
获赞
21
粉丝
4
关注
11
看过 TA
0
中山大学
2022
C++
IP属地:广东
划船不用桨 扬帆不用风 我这一生全靠浪
私信
关注
头像
2021-04-10 15:18
C++
【CSRF】简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。攻击者并不能通过CSRF攻击来直接获取用户的账户控制权,也不能直接窃取用户的任何信息。他们能做到的,是欺骗用户的浏览器,让其以用户的名义运行操作。CSRF(Cross Site Request Forgery)即跨站请求伪造。就是利用后台有规律的接口,例如 localhost/deleteAriticle.php?id=3&username=xiaoxiao ,攻击者在被攻击的网站页面嵌入这样的代码,当用户xiaoxiao访问该网站的时候,会发起这条请求。服务器会删除id为3的数据。客户端防范:对于数据库的修改请求,全部使用POST提交,禁止使用GET请求。服务器端防范:一般的做法是在表单里面添加一段隐藏的唯一的token(请求令牌)。防御措施令牌同步模式(英语:Synchronizer token pattern,简称STP)。原理是:当用户发送请求时,服务器端应用将令牌(英语:token,一个保密且唯一的值)嵌入HTML表格,并发送给客户端。客户端提交HTML表格时候,会将令牌发送到服务端,令牌的验证是由服务端实行的。令牌可以通过任何方式生成,只要确保随机性和唯一性(如:使用随机种子【英语:random seed】的哈希链 )。这样确保攻击者发送请求时候,由于没有该令牌而无法通过验证。Django框架默认带有STP功能:    {% csrf_token %}渲染后的效果如下:    STP能在HTML下运作顺利,但会导致服务端的复杂度升高,复杂度源于令牌的生成和验证。因为令牌是唯一且随机,如果每个表格都使用一个唯一的令牌,那么当页面过多时,服务器由于生产令牌而导致的负担也会增加。而使用会话(英语:session)等级的令牌代替的话,服务器的负担将没有那么重。
0 点赞 评论 收藏
转发
头像
2021-03-27 19:31
C++
【拥塞算法】BBR算法BBR 是谷歌在 2016 年提出的一种新的拥塞控制算法,已经在 Youtube 服务器和谷歌跨数据中心广域网上部署,据 Youtube 官方数据称,部署 BBR 后,在全球范围内访问 Youtube 的延迟降低了 53%,在时延较高的发展中国家,延迟降低了 80%。BBR 算法不将出现丢包或时延增加作为拥塞的信号,而是认为当网络上的数据包总量大于瓶颈链路带宽和时延的乘积时才出现了拥塞,所以 BBR 也称为基于拥塞的拥塞控制算法(Congestion-Based Congestion Control),其适用网络为高带宽、高时延、有一定丢包率的长肥网络,可以有效降低传输时延,并保证较高的吞吐量,与其他两个常见算法发包速率对比如下:目前有非常多的 TCP 的拥塞控制协议,例如:基于丢包的拥塞控制:将丢包视为出现拥塞,采取缓慢探测的方式,逐渐增大拥塞窗口,当出现丢包时,将拥塞窗口减小,如 Reno、Cubic 等。基于时延的拥塞控制:将时延增加视为出现拥塞,延时增加时增大拥塞窗口,延时减小时减小拥塞窗口,如 Vegas、FastTCP 等。基于链路容量的拥塞控制:实时测量网络带宽和时延,认为网络上报文总量大于带宽时延乘积时出现了拥塞,如 BBR。基于学习的拥塞控制:没有特定的拥塞信号,而是借助评价函数,基于训练数据,使用机器学习的方法形成一个控制策略,如 Remy
2021-03-27
在牛客打卡26天,今天也很努力鸭!
0 点赞 评论 收藏
转发
头像
2021-03-24 21:32
C++
😊【进程地址空间】当我们的程序加载到内存的时候首先Linux系统会给当前进程分配一个2^32大小的一块空间 也就是4G。这个空间我们定义为进程的虚拟地址空间那么这个虚拟我们该怎么理解了?IBM是这么解释的:它存在,你能看的见,它是物理的;它存在,你看不见,它是透明的;它不存在,你却看得见,它是虚拟的;它不存在,你也看不见,他被删除了;但是一定要记住虚拟内存和虚拟地址空间不能记混了【用户空间:】1.指令都会放在.text段,只读数据段.rodata一般存放常量字符串;二者都是只能读不能写。2. .data是专门存放初始化且不为0的数据。3. .bss段是存放未初始化的以及初始化为0的数据。当我们在全局的作用域里面去写一个全局变量没有初始化,当我们去打印它的值得时候是一个0,这就是因为它存放在.bss段,我们的操作系统会自己负责把.bss段的数据全部置成0,所以这也就是我们为什么看到未初始化的全局变量我们去拓印它的值得时候是0的原因。4 . 我们程序运行以后了,当我们调用了new 、malloc才会分配堆内存。5.当前程序在运行的过程中会加载一些共享库,也就是动态链接库:windows下就是.dll,Linux下就是so6.在我们程序运行中函数运行或产生线程时每一个独有的stack。且栈是从高地址向低地址进行增长。【内核空间:】主要分为ZONE_DMA 大概16M的大小。ZONE_NORMAL 大概有800多M,进程空间的PCB块进程控制块都在里面存放,以及内核空间的线程还有内核函数在运行时所依赖的栈空间。ZONE_HIGHMEM 这是映射我们高地址的物理内存的时候做地址映射用的。😊每一个进程的用户空间是私有的但是内核空间是共享的😊系统调用是用户空间访问内核的唯一手段;除异常和陷入外,他们是内核唯一的合法入口。
2021-03-24
在牛客打卡23天,今天也很努力鸭!
0 点赞 评论 收藏
转发
头像
2021-03-20 10:58
C++
static VS inline在头文件中声明为“静态”的作用是为了将变量的链接属性改为内部,不允许其余的文件访问它,起到一个保护作用被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。😊在C语言中,关键字Static有三个明显的作用:--- 在函数体内,一个被声明为静态的变量在这一函数被调用结束后不释放其存储空间。定义为static的局部变量存储在全局区(静态区),而一般的局部变量存储在栈中。--- 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其他函数访问。它是一个本地的全局变量。在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。即这个函数被限制在声明它的模块的本地范围内使用。--- 类中定义的static数据成员属于所有该类对象共享,在内存中只占一份空间,而不是每个对象都分别为它保留一份空间。--- 类中定义为static的成员函数只能直接调用static数据成员,若要访问非静态数据成员,需要加上对象名,因为静态成员函数没有this指针。😊内联函数需要注意点--- 可将代码很少的函数定义为inline函数--- 不要将代码很多的函数定义为inline函数--- 关键字inline必须与函数定义体放在一起才能使函数称为内联--- 仅将inline放在函数声明前面不起作用--- 定义在类声明之中的成员函数将自动地成为内联函数--- 现在的编译器会自动决定是否对函数inline,无论函数前是否加了inline。
0 点赞 评论 收藏
转发
头像
2021-03-20 10:37
C++
【索引】😊什么是索引?😁索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构注释:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。索引数据结构,主要包含以下几类二叉树 平衡二叉树 红黑树 Hash表 B-/+Tree😊索引的作用?索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提高性能(查询速度)😊优点:通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性。可以加快数据的检索速度可以加速表与表之间的连接在使用分组和排序进行检索的时候,可以减少查询中分组和排序的时间😊缺点创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。索引需要占用物理空间,数据量越大,占用空间越大会降低表的增删改的效率,因为每次增删改索引,都需要进行动态维护😊应该使用索引的情况1.较频繁地作为查询条件的字段2.经常用连接(join)的字段3.经常需要根据范围进行搜索的字段4.需要排序的字段😊不应该使用索引的情况唯一性很小的情况(select count(discount(column))/count(column) )表数据需要频繁修改字段不在where语句出现时不要添加索引数据量少的表不要使用索引
2021-03-20
在牛客打卡21天,今天也很努力鸭!
0 点赞 评论 收藏
转发
牛客网
牛客企业服务