Merge pull request #149 from metadao/master

第9章 和 第11章 错别字修改
This commit is contained in:
astaxie
2013-01-25 03:51:04 -08:00
4 changed files with 7 additions and 7 deletions

View File

@@ -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)

View File

@@ -1,7 +1,7 @@
# 11 错误处理,调试和测试
我们经常会看到很多程序员大部分的"编程"时间都花费在检查bug和修复bug上。无论你是在编写修改代码还是重构系统几乎都是花费大量的时间在进行故障排除和测试外界都觉得我们程序员是设计师能够把一个系统从无做到有是一项很伟大的工作而且是相当有趣的工作但事实上我们每天都是徘在排错、调试、测试之间。当然如果你有良好的习惯和技术方案来直面这些问题,那么你就有可能将排错时间减到最少,而尽可能的将时间花费在更有价值的事情上。
我们经常会看到很多程序员大部分的"编程"时间都花费在检查bug和修复bug上。无论你是在编写修改代码还是重构系统几乎都是花费大量的时间在进行故障排除和测试外界都觉得我们程序员是设计师能够把一个系统从无做到有是一项很伟大的工作而且是相当有趣的工作但事实上我们每天都是徘在排错、调试、测试之间。当然如果你有良好的习惯和技术方案来直面这些问题,那么你就有可能将排错时间减到最少,而尽可能的将时间花费在更有价值的事情上。
但是遗憾的是很多程序员不愿意在错误处理、调试和测试能力上下工夫,导致后面应用上线之后查找错误、定位问题花费更多的时间。所以我们在设计应用之前就做好错误处理规划、测试用例等,那么将来修改代码、升级系统都变得简单。
但是遗憾的是很多程序员不愿意在错误处理、调试和测试能力上下工夫,导致后面应用上线之后查找错误、定位问题花费更多的时间。所以我们在设计应用之前就做好错误处理规划、测试用例等,那么将来修改代码、升级系统都变得简单。
开发Web应用过程中错误自然难免那么如何更好的找到错误原因解决问题呢11.1小节将介绍Go语言中如何处理错误如何设计自己的包、函数的错误处理11.2小节将介绍如何使用GDB来调试我们的程序动态运行情况下各种变量信息运行情况的监控和调试。

View File

@@ -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的一些常用命令如下所示

View File

@@ -6,7 +6,7 @@ Go语言中自带有一个轻量级的测试框架`testing`和自带的`go test`
## 如何编写测试用例
由于`go test`命令只能在一个相应的目录下执行所有文件,所以我们接下来新建一个项目目录`gotest`,这样我们所有的代码和测试代码都在这个目录下。
接下来我们再改目录下面创建两个文件gotest.go和gotest_test.go
接下来我们在该目录下面创建两个文件gotest.go和gotest_test.go
1. gotest.go:这个文件里面我们是创建了一个包,里面有一个函数实现了除法运算: