Kaitiren
热情开放的技术专家,从事游戏开发方面的各项工作!
DXDStudio(Design and Xperience Development Studio)
展开
-
第一章 Go的世界, 我来简介!
Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点:它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。 Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。 Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级。 Go完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。 按照其设计,Go打算为多核机器上系统软件的构造提供一种方法原创 2020-12-28 18:31:21 · 504 阅读 · 0 评论 -
腾讯发布了Go语言代码安全指南
在我们开发的过程中,会涉及到很多数据的处理以及相应的代码逻辑,如果不小心,可能会导致BUG,甚至被恶意利用的漏洞。比如内存溢出、下标越界、空指针异常等等。对于一个经验丰富的开发人员,会在自己编写代码的时候,会潜意识的处理这些问题,这就是资深开发的宝贵经验,所以他们的代码上线后,很少出现问题,对于更NB的开发,他们甚至有自己的一套代码工具箱,都是他们多年编码经验的总结,拿来即用。相反对于一个初级开发人员,可能就不会处理了,甚至可能想不到,所以资深开发的价值就能很好的体现出来。但是,一个团队,总不能要求原创 2021-09-06 19:20:48 · 593 阅读 · 0 评论 -
Go语言 vs Java语言
天生骄傲的Go语言以高并发闻名于世,牛皮不能光靠吹,今天我们就来做一个对比试验,体会一下Go在并发方面的巨大优势!靶子就瞄准Java,谁让它是后端开发语言的老大哥呢。基本任务:初始化一个100*100的矩阵,矩阵每个元素是从[0,1)随机取的双精度浮点数,计算矩阵跟自身相乘,需要100万次乘法运算。机器配置:Linux云主机,8核16G内存。分别尝试开10、100、1000、10000、100000、1000000个线程(协程)执行上述的基本任务。试验结果(运行耗时/ms):并发度原创 2021-08-28 15:31:26 · 773 阅读 · 0 评论 -
数据库篇: Go操作MySQL数据库
数据库篇: Go 操作 MySQL 数据库在实际开发中,要用到数据库存储数据。MySQL是一个关系型数据库管理系统 使用非常广泛。在Go语言开发中,会选择一个操作数据的类库来帮助我们完成工作。1. 简单介绍1.1 MySQL 数据库介绍MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Man.原创 2021-06-08 16:48:18 · 342 阅读 · 1 评论 -
Leaf-Server官方教程 && 游戏引擎源码实践 (21年6月每周会更新RoadMap文章)
Leaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏服务器框架。Leaf 适用于各类游戏服务器的开发,包括 Unity3D, UE4/UE5, Cocos2dx, Web (HTML5)游戏服务器。通过本章的内容学习,让同学们尽快掌握与使用。适合人群: 初学者, 游戏服务器开发, 对服务器有兴趣的人群希望还没学习Go 服务器开发(从零开始学习 基础篇)的同学进行阅读实践后在跟进Leaf Server的框架开发。目录...原创 2021-06-03 20:36:26 · 859 阅读 · 5 评论 -
数据库篇: MySQL 安装步骤 (Windows)
安装包下载地址:原创 2021-06-03 20:08:19 · 97 阅读 · 0 评论 -
14.6 pprof支持 (游戏服务器leafserver继续跟进 ... ... )
Go语言有一个非常棒的设计就是标准库里面带有代码的性能监控工具,在两个地方有包:net/http/pprofruntime/pprof其实net/http/pprof中只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来beego支持pprof目前beego框架新增了pprof,该特性默认是不开启的,如果你需要测试性能,查看相应的执行goroutine之类的信息,其实Go的默认包"net/http/pprof"已经具有该功能,如果按照Go默认的方式执行We原创 2021-04-12 16:28:33 · 205 阅读 · 0 评论 -
14.5 多语言支持
我们在第十章介绍过国际化和本地化,开发了一个go-i18n库,这小节我们将把该库集成到beego框架里面来,使得我们的框架支持国际化和本地化。i18n集成beego中设置全局变量如下:Translation i18n.IL Lang string //设置语言包,zh、enLangPath string //设置语言包所在位置初始化多语言函数:func InitLang(){ beego.Translation:=i18n.NewLocale(原创 2021-04-12 16:22:03 · 201 阅读 · 0 评论 -
14.4 用户认证
在开发Web应用过程中,用户认证是开发者经常遇到的问题,用户登录、注册、登出等操作,而一般认证也分为三个方面的认证HTTP Basic和 HTTP Digest认证 第三方集成认证:QQ、微博、豆瓣、OPENID、google、github、facebook和twitter等 自定义的用户登录、注册、登出,一般都是基于session、cookie认证beego目前没有针对这三种方式进行任何形式的集成,但是可以充分的利用第三方开源库来实现上面的三种方式的用户认证,不过后续beego会对前面两种认证逐原创 2021-04-12 16:20:23 · 169 阅读 · 0 评论 -
14.3 表单及验证支持
14.3 表单及验证支持在Web开发中对于这样的一个流程可能很眼熟:打开一个网页显示出表单。 用户填写并提交了表单。 如果用户提交了一些无效的信息,或者可能漏掉了一个必填项,表单将会连同用户的数据和错误问题的描述信息返回。 用户再次填写,继续上一步过程,直到提交了一个有效的表单。在接收端,脚本必须:检查用户递交的表单数据。 验证数据是否为正确的类型,合适的标准。例如,如果一个用户名被提交,它必须被验证是否只包含了允许的字符。它必须有一个最小长度,不能超过最大长度。用户名不能与已存在的他原创 2021-04-08 13:51:42 · 109 阅读 · 0 评论 -
14.2 Session支持
第六章的时候我们介绍过如何在Go语言中使用session,也实现了一个sessionManger,beego框架基于sessionManager实现了方便的session处理功能。session集成beego中主要有以下的全局变量来控制session处理://related to session SessionOn bool // 是否开启session模块,默认不开启SessionProvider string // session后端提供处理模块,默原创 2021-04-08 13:03:12 · 115 阅读 · 0 评论 -
14.1 静态文件支持
我们在前面已经讲过如何处理静态文件,这小节我们详细的介绍如何在beego里面设置和使用静态文件。通过再介绍一个twitter开源的html、css框架bootstrap,无需大量的设计工作就能够让你快速地建立一个漂亮的站点。beego静态文件实现和设置Go的net/http包中提供了静态文件的服务,ServeFile和FileServer等函数。beego的静态文件处理就是基于这一层处理的,具体的实现如下所示://static file serverfor prefix, staticDir原创 2021-04-08 13:00:16 · 98 阅读 · 0 评论 -
Go语言教程拓展基础篇 (查漏补缺, 献给初学者)
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。Go 语言特色简洁、快速、安全 并行、有趣、开源 内存管理、数组安全、编译迅速Go 语言用途Go 语言被设计原创 2021-03-30 17:29:13 · 183 阅读 · 0 评论 -
第十四章 扩展Web框架
第十三章介绍了如何开发一个Web框架,通过介绍MVC、路由、日志处理、配置处理完成了一个基本的框架系统,但是一个好的框架需要一些方便的辅助工具来快速的开发Web,那么我们这一章将就如何提供一些快速开发Web的工具进行介绍,第一小节介绍如何处理静态文件,如何利用现有的twitter开源的bootstrap进行快速的开发美观的站点,第二小节介绍如何利用前面介绍的session来进行用户登录处理,第三小节介绍如何方便的输出表单、这些表单如何进行数据验证,如何快速的结合model进行数据的增删改操作,第四小节介绍如原创 2021-03-30 16:26:04 · 137 阅读 · 0 评论 -
13.5 实现博客的增删改
前面介绍了beego框架实现的整体构思以及部分实现的伪代码,这小节介绍通过beego建立一个博客系统,包括博客浏览、添加、修改、删除等操作。博客目录博客目录如下所示:.├── controllers│ ├── delete.go│ ├── edit.go│ ├── index.go│ ├── new.go│ └── view.go├── main.go├── models│ └── model.go└── views ├── edit.tpl原创 2021-03-30 16:21:54 · 154 阅读 · 0 评论 -
13.4 日志和配置设计
日志和配置的重要性前面已经介绍过日志在我们程序开发中起着很重要的作用,通过日志我们可以记录调试我们的信息,当初介绍过一个日志系统seelog,根据不同的level输出不同的日志,这个对于程序开发和程序部署来说至关重要。我们可以在程序开发中设置level低一点,部署的时候把level设置高,这样我们开发中的调试信息可以屏蔽掉。配置模块对于应用部署牵涉到服务器不同的一些配置信息非常有用,例如一些数据库配置信息、监听端口、监听地址等都是可以通过配置文件来配置,这样我们的应用程序就具有很强的灵活性,可以通过原创 2021-03-30 16:17:53 · 94 阅读 · 0 评论 -
13.3 controller设计
传统的MVC框架大多数是基于Action设计的后缀式映射,然而,现在Web流行REST风格的架构。尽管使用Filter或者rewrite能够通过URL重写实现REST风格的URL,但是为什么不直接设计一个全新的REST风格的 MVC框架呢?本小节就是基于这种思路来讲述如何从头设计一个基于REST风格的MVC框架中的controller,最大限度地简化Web应用的开发,甚至编写一行代码就可以实现“Hello, world”。controller作用MVC设计模式是目前Web应用开发中最常见的架构模式,原创 2021-03-22 18:31:13 · 188 阅读 · 0 评论 -
13.2 自定义路由器设计
HTTP路由HTTP路由组件负责将HTTP请求交到对应的函数处理(或者是一个struct的方法),如前面小节所描述的结构图,路由在框架中相当于一个事件处理器,而这个事件包括:用户请求的路径(path)(例如:/user/123,/article/123),当然还有查询串信息(例如?id=11) HTTP的请求方法(method)(GET、POST、PUT、DELETE、PATCH等)路由器就是根据用户请求的事件信息转发到相应的处理函数(控制层)。默认的路由实现在3.4小节有过介绍Go的h原创 2021-03-22 17:24:44 · 177 阅读 · 0 评论 -
13.1 项目规划
做任何事情都需要做好规划,那么我们在开发博客系统之前,同样需要做好项目的规划,如何设置目录结构,如何理解整个项目的流程图,当我们理解了应用的执行过程,那么接下来的设计编码就会变得相对容易了gopath以及项目设置假设指定gopath是文件系统的普通目录名,当然我们可以随便设置一个目录名,然后将其路径存入GOPATH。前面介绍过GOPATH可以是多个目录:在window系统设置环境变量;在linux/MacOS系统只要输入终端命令export gopath=/home/kaitiren/gopath,原创 2021-03-22 17:20:37 · 122 阅读 · 0 评论 -
第十三章 如何设计一个Web框架
前面十二章介绍了如何通过Go来开发Web应用,介绍了很多基础知识、开发工具和开发技巧,那么我们这一章通过这些知识来实现一个简易的Web框架。通过Go语言来实现一个完整的框架设计,这框架中主要内容有第一小节介绍的Web框架的结构规划,例如采用MVC模式来进行开发,程序的执行流程设计等内容;第二小节介绍框架的第一个功能:路由,如何让访问的URL映射到相应的处理逻辑;第三小节介绍处理逻辑,如何设计一个公共的controller,对象继承之后处理函数中如何处理response和request;第四小节介绍如何框架的原创 2021-03-22 17:16:51 · 391 阅读 · 0 评论 -
12.4 备份和恢复
这小节我们要讨论应用程序管理的另一个方面:生产服务器上数据的备份和恢复。我们经常会遇到生产服务器的网络断了、硬盘坏了、操作系统崩溃、或者数据库不可用了等各种异常情况,所以维护人员需要对生产服务器上的应用和数据做好异地灾备,冷备热备的准备。在接下来的介绍中,讲解了如何备份应用、如何备份/恢复Mysql数据库和redis数据库。应用备份在大多数集群环境下,Web应用程序基本不需要备份,因为这个其实就是一个代码副本,我们在本地开发环境中,或者版本控制系统中已经保持这些代码。但是很多时候,一些开发的站点需要原创 2021-03-15 14:52:07 · 125 阅读 · 0 评论 -
12.3 应用部署
程序开发完毕之后,我们现在要部署Web应用程序了,但是我们如何来部署这些应用程序呢?因为Go程序编译之后是一个可执行文件,编写过C程序的读者一定知道采用daemon就可以完美的实现程序后台持续运行,但是目前Go还无法完美的实现daemon,因此,针对Go的应用程序部署,我们可以利用第三方工具来管理,第三方的工具有很多,例如Supervisord、upstart、daemontools等,这小节我介绍目前自己系统中采用的工具Supervisord。daemon目前Go程序还不能实现daemon,详细的原创 2021-03-15 14:49:57 · 94 阅读 · 0 评论 -
12.2 网站错误处理
我们的Web应用一旦上线之后,那么各种错误出现的概率都有,Web应用日常运行中可能出现多种错误,具体如下所示:数据库错误:指与访问数据库服务器或数据相关的错误。例如,以下可能出现的一些数据库错误。 连接错误:这一类错误可能是数据库服务器网络断开、用户名密码不正确、或者数据库不存在。 查询错误:使用的SQL非法导致错误,这样子SQL错误如果程序经过严格的测试应该可以避免。 数据错误:数据库中的约束冲突,例如一个唯一字段中插入一条重复主键的值就会报错,但是如果你的应用程序在上线之前经过了严格的测试原创 2021-03-15 14:47:59 · 212 阅读 · 0 评论 -
12.1 应用日志
我们期望开发的Web应用程序能够把整个程序运行过程中出现的各种事件一一记录下来,Go语言中提供了一个简易的log包,我们使用该包可以方便的实现日志记录的功能,这些日志都是基于fmt包的打印再结合panic之类的函数来进行一般的打印、抛出错误处理。Go目前标准包只是包含了简单的功能,如果我们想把我们的应用日志保存到文件,然后又能够结合日志实现很多复杂的功能(编写过Java或者C++的读者应该都使用过log4j和log4cpp之类的日志工具),可以使用第三方开发的一个日志系统,https://github.co原创 2021-03-15 14:46:32 · 132 阅读 · 0 评论 -
第十二章 部署与维护
到目前为止,我们前面已经介绍了如何开发程序、调试程序以及测试程序,正如人们常说的:开发最后的10%需要花费90%的时间,所以这一章我们将强调这最后的10%部分,要真正成为让人信任并使用的优秀应用,需要考虑到一些细节,以上所说的10%就是指这些小细节。本章我们将通过四个小节来介绍这些小细节的处理,第一小节介绍如何在生产服务上记录程序产生的日志,如何记录日志,第二小节介绍发生错误时我们的程序如何处理,如何保证尽量少的影响到用户的访问,第三小节介绍如何来部署Go的独立程序,由于目前Go程序还无法像C那样写成d原创 2021-03-10 14:35:19 · 130 阅读 · 0 评论 -
11.3 Go怎么写测试用例
开发程序其中很重要的一点是测试,我们如何保证代码的质量,如何保证每个函数是可运行,运行结果是正确的,又如何保证写出来的代码性能是好的,我们知道单元测试的重点在于发现程序设计或实现的逻辑错误,使问题及早暴露,便于问题的定位解决,而性能测试的重点在于发现程序设计上的一些问题,让线上的程序能够在高并发的情况下还能保持稳定。本小节将带着这一连串的问题来讲解Go语言中如何来实现单元测试和性能测试。Go语言中自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试,testing框原创 2021-03-10 14:31:35 · 206 阅读 · 0 评论 -
11.2 使用GDB调试
开发程序过程中调试代码是开发者经常要做的一件事情,Go语言不像PHP、Python等动态语言,只要修改不需要编译就可以直接输出,而且可以动态的在运行环境下打印数据。当然Go语言也可以通过Println之类的打印数据来调试,但是每次都需要重新编译,这是一件相当麻烦的事情。我们知道在Python中有pdb/ipdb之类的工具调试,Javascript也有类似工具,这些工具都能够动态的显示变量信息,单步调试等。不过庆幸的是Go也有类似的工具支持:GDB。Go内部已经内置支持了GDB,所以,我们可以通过GDB来进行原创 2021-03-10 14:29:21 · 189 阅读 · 0 评论 -
11.1 错误处理
Go语言主要的设计准则是:简洁、明白,简洁是指语法和C类似,相当的简单,明白是指任何语句都是很明显的,不含有任何隐含的东西,在错误处理方案的设计中也贯彻了这一思想。我们知道在C语言里面是通过返回-1或者NULL之类的信息来表示错误,但是对于使用者来说,不查看相应的API说明文档,根本搞不清楚这个返回值究竟代表什么意思,比如:返回0是成功,还是失败,而Go定义了一个叫做error的类型,来显式表达错误。在使用时,通过把返回的error变量与nil的比较,来判定操作是否成功。例如os.Open函数在打开文件失败原创 2021-03-10 14:25:06 · 148 阅读 · 0 评论 -
第十一章 错误处理,调试和测试
我们经常会看到很多程序员大部分的"编程"时间都花费在检查bug和修复bug上。无论你是在编写修改代码还是重构系统,几乎都是花费大量的时间在进行故障排除和测试,外界都觉得我们程序员是设计师,能够把一个系统从无做到有,是一项很伟大的工作,而且是相当有趣的工作,但事实上我们每天都是徘徊在排错、调试、测试之间。当然如果你有良好的习惯和技术方案来直面这些问题,那么你就有可能将排错时间减到最少,而尽可能的将时间花费在更有价值的事情上。但是遗憾的是很多程序员不愿意在错误处理、调试和测试能力上下工夫,导致后面应用上线之原创 2021-03-10 14:23:06 · 243 阅读 · 0 评论 -
10.3 国际化站点
前面小节介绍了如何处理本地化资源,即Locale一个相应的配置文件,那么如果处理多个的本地化资源呢?而对于一些我们经常用到的例如:简单的文本翻译、时间日期、数字等如果处理呢?本小节将一一解决这些问题。管理多个本地包在开发一个应用的时候,首先我们要决定是只支持一种语言,还是多种语言,如果要支持多种语言,我们则需要制定一个组织结构,以方便将来更多语言的添加。在此我们设计如下:Locale有关的文件放置在config/locales下,假设你要支持中文和英文,那么你需要在这个文件夹下放置en.json和z原创 2021-03-04 20:30:22 · 125 阅读 · 1 评论 -
10.2 本地化资源
前面小节我们介绍了如何设置Locale,设置好Locale之后我们需要解决的问题就是如何存储相应的Locale对应的信息呢?这里面的信息包括:文本信息、时间和日期、货币值、图片、包含文件以及视图等资源。那么接下来我们将对这些信息一一进行介绍,Go语言中我们把这些格式信息存储在JSON中,然后通过合适的方式展现出来。(接下来以中文和英文两种语言对比举例,存储格式文件en.json和zh-CN.json)本地化文本消息本信息是编写Web应用中最常用到的,也是本地化资源中最多的信息,想要以适合本地语言的方原创 2021-03-04 20:26:32 · 133 阅读 · 1 评论 -
10.1 设置默认地区
什么是LocaleLocale是一组描述世界上某一特定区域文本格式和语言习惯的设置的集合。locale名通常由三个部分组成:第一部分,是一个强制性的,表示语言的缩写,例如"en"表示英文或"zh"表示中文。第二部分,跟在一个下划线之后,是一个可选的国家说明符,用于区分讲同一种语言的不同国家,例如"en_US"表示美国英语,而"en_UK"表示英国英语。最后一部分,跟在一个句点之后,是可选的字符集说明符,例如"zh_CN.gb2312"表示中国使用gb2312字符集。GO语言默认采用"UTF-8"编码原创 2021-03-04 20:24:10 · 238 阅读 · 1 评论 -
第十章 国际化和本地化
前面小节介绍了如何存储密码,但是有的时候,我们想把一些敏感数据加密后存储起来,在将来的某个时候,随需将它们解密出来,此时我们应该在选用对称加密算法来满足我们的需求。base64加解密如果Web应用足够简单,数据的安全性没有那么严格的要求,那么可以采用一种比较简单的加解密方法是base64,这种方式实现起来比较简单,Go语言的base64包已经很好的支持了这个,请看下面的例子:package mainimport ( "encoding/base64" "fmt")fu原创 2021-03-03 12:53:57 · 375 阅读 · 0 评论 -
9.6 加密和解密数据
前面小节介绍了如何存储密码,但是有的时候,我们想把一些敏感数据加密后存储起来,在将来的某个时候,随需将它们解密出来,此时我们应该在选用对称加密算法来满足我们的需求。base64加解密如果Web应用足够简单,数据的安全性没有那么严格的要求,那么可以采用一种比较简单的加解密方法是base64,这种方式实现起来比较简单,Go语言的base64包已经很好的支持了这个,请看下面的例子:package mainimport ( "encoding/base64" "fmt")fu原创 2021-02-26 18:47:53 · 156 阅读 · 0 评论 -
9.5 存储密码
过去一段时间以来, 许多的网站遭遇用户密码数据泄露事件, 这其中包括顶级的互联网企业–Linkedin, 国内诸如CSDN,该事件横扫整个国内互联网,随后又爆出多玩游戏800万用户资料被泄露,另有传言人人网、开心网、天涯社区、世纪佳缘、百合网等社区都有可能成为黑客下一个目标。层出不穷的类似事件给用户的网上生活造成巨大的影响,人人自危,因为人们往往习惯在不同网站使用相同的密码,所以一家“暴库”,全部遭殃。那么我们作为一个Web应用开发者,在选择密码存储方案时, 容易掉入哪些陷阱, 以及如何避免这些陷阱?原创 2021-02-26 18:45:02 · 209 阅读 · 0 评论 -
9.4 避免SQL注入
什么是SQL注入SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞。可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。而造成SQL注入的原因是因为程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。SQL注入实例很多Web原创 2021-02-22 18:39:52 · 121 阅读 · 0 评论 -
9.3 避免XSS攻击
随着互联网技术的发展,现在的Web应用都含有大量的动态内容以提高用户体验。所谓动态内容,就是应用程序能够根据用户环境和用户请求,输出相应的内容。动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting, 安全专家们通常将其缩写成 XSS)的威胁,而静态站点则完全不受其影响。什么是XSSXSS攻击:跨站脚本攻击(Cross-Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。XSS原创 2021-02-22 18:23:38 · 184 阅读 · 0 评论 -
9.2 确保输入过滤
过滤用户数据是Web应用安全的基础。它是验证数据合法性的过程。通过对所有的输入数据进行过滤,可以避免恶意数据在程序中被误信或误用。大多数Web应用的漏洞都是因为没有对用户输入的数据进行恰当过滤所引起的。我们介绍的过滤数据分成三个步骤:1、识别数据,搞清楚需要过滤的数据来自于哪里 2、过滤数据,弄明白我们需要什么样的数据 3、区分已过滤及被污染数据,如果存在攻击数据那么保证过滤之后可以让我们使用更安全的数据识别数据“识别数据”作为第一步是因为在你不知道“数据是什么,它来自于哪里”的前提下,你原创 2021-02-22 18:20:45 · 304 阅读 · 0 评论 -
9.1 预防CSRF攻击
什么是CSRFCSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。那么CSRF到底能够干嘛呢?你可以这样简单的理解:攻击者可以盗用你的登陆信息,以你的身份模拟发送各种请求。攻击者只要借助少许的社会工程学的诡计,例如通过QQ等聊天软件发送的链接(有些还伪装成短域名,用户无法分辨),攻击者就能迫使Web应用的用户去执行攻击者预设的操作。例如,当用户登录网络银行去查看原创 2021-02-18 20:02:50 · 180 阅读 · 0 评论 -
第九章 安全与加密
无论是开发Web应用的开发者还是企图利用Web应用漏洞的攻击者,对于Web程序安全这个话题都给予了越来越多的关注。特别是最近CSDN密码泄露事件,更是让我们对Web安全这个话题更加重视,所有人都谈密码色变,都开始检测自己的系统是否存在漏洞。那么我们作为一名Go程序的开发者,一定也需要知道我们的应用程序随时会成为众多攻击者的目标,并提前做好防范的准备。 很多Web应用程序中的安全问题都是由于轻信了第三方提供的数据造成的。比如对于用户的输入数据,在对其进行验证之前都应该将其视为不安全的...原创 2021-02-18 20:00:50 · 494 阅读 · 1 评论