2010-07-16 35 views
0

想知道我应该在将数据放入数据库还是显示给用户之前对所有数据进行编码?或两者。Html输入数据时的编码?还是输家或两者?

现在我会向用户展示它。我使用的是asp.net mvc 2.0,所以我通常只需要编写一切<%: %>

我不确定两者,虽然这可能是一个有点极端做到这一点。

此外,我真的只需要注意用户输入字符串权利?

就像我刚刚遇到一个问题,其中我的插件之一由于某种原因不能出于某种原因弄清楚如何日期如果日期是HTML编码。

我只是把它编码没有想到。现在有人向我指出,这样做没有什么意义,因为我将日期从数据库中取出,并在数据库中将其存储为日期时间。所以不能真的存储在那里的JavaScript。

所以我猜我真的没有这些编码(纠正我,如果我错了)

INT,位(布尔变量),dataetimes,小数类型如果存储在数据库中的这种方式。

如果它不影响我的任何插件,我仍然可以对它们进行编码,但很高兴知道我可能不需要。

+0

通常,当数据已经被解码时,你会得到数据,你把它放在数据库(或其他)中,像你说的那样,语法会在显示时处理它。由于这种语法,你不需要担心其他地方的编码/解码问题(至少在绝大多数情况下) – 2010-07-16 21:55:55

回答

1

在大多数情况下,当您将数据存储在数据库中时,不应该对数据进行HTML编码。正如你已经注意到的那样,对于大多数数据类型(整数,日期等)来说,它更好(即更高性能,适用于其他系统等),以便将其保存为未编码。

您需要担心的一种情况是来自外部来源(如最终用户)的字符串。即使在这种情况下,只要将数据存储为未编码就足够了,并且一旦数据返回到浏览器就使用<%: ... %>进行编码。您应该只考虑编码字符串,如果它来自某些启用标记的用户控件(如TinyMCE文本编辑器或类似的东西)。

还要小心保护自己免受SQL注入攻击。您应该验证一段旨在表示日期的数据实际上是一个日期,然后再尝试将其发送到数据库。

+0

Ya tinyMCE是我的规则的一个例外。我不能将它编码给用户(默认的目的)。因此,在我将其插入到我的数据库之前,我使用白名单和XSS库来检查它是否安全。与SQl注入攻击一样,我使用linq to sql,所以一切都必须是一个对象,所以我必须将日期从表单转换为日期时间,并且如果它无法将其解析为日期时间,那么它不是日期时间。 – chobo2 2010-07-16 23:09:39