From 56f3d6895d4fdb884ec1829d2bcd30cd65428f4b Mon Sep 17 00:00:00 2001 From: metadao Date: Thu, 24 Jan 2013 16:38:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=94=99=E5=88=AB=E5=AD=97=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 09.0.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/09.0.md b/09.0.md index 2da457d1..2fed2b37 100755 --- a/09.0.md +++ b/09.0.md @@ -1,7 +1,7 @@ # 9 安全与加密 无论是开发Web应用的开发者还是企图利用Web应用漏洞的攻击者,对于Web程序安全这个话题都给予了越来越多的关注。特别是最近CSDN密码泄露事件,更是让我们对Web安全这个话题更加重视,所有人都谈密码色变,都开始检测自己的系统是否存在漏洞。那么我们作为一名Go程序的开发者,一定也需要知道我们的应用程序随时会成为众多攻击者的目标,并提前做好防范的准备。 -很多Web应用程序中的安全问题都是由于轻信了第三放提供的数据造成的。比如对于用户的输入数据,在对其进行验证之前都应该将其视为不安全的数据。如果直接把这些不安全的数据输出到客户端,就可能造成跨站脚本攻击(XSS)的问题。如果把不安全的数据用于数据库查询,那么就可能造成SQL注入问题,我们将会在9.3、9.4小节介绍如何避免这些问题。 +很多Web应用程序中的安全问题都是由于轻信了第三方提供的数据造成的。比如对于用户的输入数据,在对其进行验证之前都应该将其视为不安全的数据。如果直接把这些不安全的数据输出到客户端,就可能造成跨站脚本攻击(XSS)的问题。如果把不安全的数据用于数据库查询,那么就可能造成SQL注入问题,我们将会在9.3、9.4小节介绍如何避免这些问题。 在使用第三方提供的数据,包括用户提供的数据时,首先检验这些数据的合法性非常重要,这个过程叫做过滤,我们将在9.2小节介绍如何保证对所有输入的数据进行过滤处理。 @@ -9,7 +9,7 @@ 与安全加密相关的,能够增强我们的Web应用程序的强大手段就是加密,CSDN泄密事件就是因为密码保存的是明文,使得攻击拿手库之后就可以直接实施一些破坏行为了。不过,和其他工具一样,加密手段也必须运用得当。我们将在9.5小节介绍如何存储密码,如何让密码存储的安全。 -加密的本质就是扰乱数据,某些不可恢复的数据扰乱我们称为单项加密或者散列算法。另外还有一种双向加密方式,也就是可以对加密后的数据进行解密。我们将会在9.6小节介绍如何实现这种双向加密方式。 +加密的本质就是扰乱数据,某些不可恢复的数据扰乱我们称为单向加密或者散列算法。另外还有一种双向加密方式,也就是可以对加密后的数据进行解密。我们将会在9.6小节介绍如何实现这种双向加密方式。 ## 目录 ![](images/navi9.png?raw=true) From d3f9159a7aff3bfd153120e6f6afccb008fb8bcc Mon Sep 17 00:00:00 2001 From: Jerry Zhang Date: Thu, 24 Jan 2013 23:05:41 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=AC=AC11=E7=AB=A0=E9=94=99=E5=88=AB?= =?UTF-8?q?=E5=AD=97=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 11.0.md | 4 ++-- 11.2.md | 4 ++-- 11.3.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/11.0.md b/11.0.md index b2d10ed9..230a3475 100755 --- a/11.0.md +++ b/11.0.md @@ -1,7 +1,7 @@ # 11 错误处理,调试和测试 -我们经常会看到很多程序员大部分的"编程"时间都花费在检查bug和修复bug上。无论你是在编写修改代码还是重构系统,几乎都是花费大量的时间在进行故障排除和测试,外界都觉得我们程序员是设计师,能够把一个系统从无做到有,是一项很伟大的工作,而且是相当有趣的工作,但事实上我们每天都是徘回在排错、调试、测试之间。当然如果你有良好的习惯和技术方案来直面这些问题,那么你就有可能将排错时间减到最少,而尽可能的将时间花费在更有价值的事情上。 +我们经常会看到很多程序员大部分的"编程"时间都花费在检查bug和修复bug上。无论你是在编写修改代码还是重构系统,几乎都是花费大量的时间在进行故障排除和测试,外界都觉得我们程序员是设计师,能够把一个系统从无做到有,是一项很伟大的工作,而且是相当有趣的工作,但事实上我们每天都是徘徊在排错、调试、测试之间。当然如果你有良好的习惯和技术方案来直面这些问题,那么你就有可能将排错时间减到最少,而尽可能的将时间花费在更有价值的事情上。 -但是遗憾的是很多程序员不愿意在错误处理、调试和测试能力上下工夫,导致后面应用上线之后查找错误、定位问题花费更多的时间。所以我们在设计应用之前就做好错误处理规划、测试用例等,那么将来修改代码、升级系统都讲变得简单。 +但是遗憾的是很多程序员不愿意在错误处理、调试和测试能力上下工夫,导致后面应用上线之后查找错误、定位问题花费更多的时间。所以我们在设计应用之前就做好错误处理规划、测试用例等,那么将来修改代码、升级系统都将变得简单。 开发Web应用过程中,错误自然难免,那么如何更好的找到错误原因,解决问题呢?11.1小节将介绍Go语言中如何处理错误,如何设计自己的包、函数的错误处理,11.2小节将介绍如何使用GDB来调试我们的程序,动态运行情况下各种变量信息,运行情况的监控和调试。 diff --git a/11.2.md b/11.2.md index 3b1f22f4..9707ab82 100755 --- a/11.2.md +++ b/11.2.md @@ -2,7 +2,7 @@ 开发程序过程中调试代码是开发者经常要做的一件事情,Go语言不像PHP、Python等动态语言,只要修改不需要编译就可以直接输出,而且可以动态的在运行环境下打印数据。当然Go语言也可以通过Println之类的打印数据来调试,但是每次都需要重新编译,这是一件相当麻烦的事情。我们知道在Python中有pdb/ipdb之类的工具调试,Javascript也有类似工具,这些工具都能够动态的显示变量信息,单步调试等。不过庆幸的是Go也有类似的工具支持:GDB。Go内部已经内置支持了GDB,所以,我们可以通过GDB来进行调试,那么本小节就来介绍一下如何通过GDB来调试Go程序。 ## GDB调试简介 -GDB是GNU开源组织发布的一个强大的类UNIX系统下的程序调试工具。使用GDB可以做如下事情: +GDB是FSF(自由软件基金会)发布的一个强大的类UNIX系统下的程序调试工具。使用GDB可以做如下事情: 1. 启动程序,可以按照开发者的自定义要求运行程序。 2. 可让被调试的程序在开发者设定的调置的断点处停住。(断点可以是条件表达式) @@ -14,7 +14,7 @@ GDB是GNU开源组织发布的一个强大的类UNIX系统下的程序调试工 编译Go程序的时候需要注意以下几点 1. 传递参数-ldflags "-s",忽略debug的打印信息 -2. 传递-gcflags "-N -l" 参数,这样可以忽略Go内部做的一些优化,聚合变量和函数等优化,这样对于GDB调试来说非常困难,所以在编译的时候加入者两个参数避免这些优化。 +2. 传递-gcflags "-N -l" 参数,这样可以忽略Go内部做的一些优化,聚合变量和函数等优化,这样对于GDB调试来说非常困难,所以在编译的时候加入这两个参数避免这些优化。 ## 常用命令 GDB的一些常用命令如下所示 diff --git a/11.3.md b/11.3.md index d6d49a9c..76de126e 100755 --- a/11.3.md +++ b/11.3.md @@ -6,7 +6,7 @@ Go语言中自带有一个轻量级的测试框架`testing`和自带的`go test` ## 如何编写测试用例 由于`go test`命令只能在一个相应的目录下执行所有文件,所以我们接下来新建一个项目目录`gotest`,这样我们所有的代码和测试代码都在这个目录下。 -接下来我们再改目录下面创建两个文件:gotest.go和gotest_test.go +接下来我们在该目录下面创建两个文件:gotest.go和gotest_test.go 1. gotest.go:这个文件里面我们是创建了一个包,里面有一个函数实现了除法运算: