From 1bb1a9b4283551ac6e87919e463582a5874a9ce8 Mon Sep 17 00:00:00 2001 From: xiemengjun Date: Sun, 14 Oct 2012 23:24:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E7=AC=AC=E4=B9=9D?= =?UTF-8?q?=E7=AB=A0=E7=AC=AC=E4=BA=8C=E5=B0=8F=E8=8A=82=E7=9A=84=E4=B8=80?= =?UTF-8?q?=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 9.2.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/9.2.md b/9.2.md index 307e8e23..2fcb16ed 100644 --- a/9.2.md +++ b/9.2.md @@ -1,4 +1,22 @@ ##9.2 确保输入过滤 +用户数据的过滤是Web应用安全的基础。它是你验证数据合法性的过程。通过在输入时确认对所有的数据进行过滤,这样就可以避免攻击的数据在你的程序中被误信及误用。大多数Web应用的漏洞最终都是因为没有对用户输入进行恰当过滤造成的。 + +这里所指的过滤数据是指三个不同的步骤: + +- 识别数据,搞清楚需要过滤的数据来自于哪里 +- 过滤数据,弄明白我们需要怎么样的数据 +- 区分已过滤及被污染数据,保证如果存在攻击数据那么过滤之后可以让我们使用更安全的数据 + +##识别数据 +我把识别输入作为第一步是因为如果你不知道它是什么,来自于哪里,你也就不能正确地过滤它。输入是指所有源自外部的数据。例如,所有来自客户端的数据是输入,但客户端并不是唯一的外部数据源,其它如数据库和第三方提供的接口数据等也是外部数据源。 + +由用户输入的数据我们通过Go非常容易识别,Go通过`ParseForm`之后,把用户POST和GET的数据全部放在了`r.Form`里面。其它的输入要难识别得多,例如,`r.Header`中的很多元素是由客户端所操纵的。常常很难确认其中的哪些元素组成了输入,所以,最好的方法是把整个map看成用户输入。 + +##过滤数据 +在知道数据来源之后,就可以过滤它了。过滤是一个有点正式的术语,它在平时表述中有很多同义词,如验证、清洁及净化。尽管这些大家平时所用的术语稍有不同,但它们都是指的同一个处理:防止非法数据进入你的应用。 + + +##区分过滤数据 ## links * [目录]()