Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 输入数据时Html编码?或者输出,或者两者都输出?_C#_.net_Javascript_Asp.net Mvc 2 - Fatal编程技术网

C# 输入数据时Html编码?或者输出,或者两者都输出?

C# 输入数据时Html编码?或者输出,或者两者都输出?,c#,.net,javascript,asp.net-mvc-2,C#,.net,Javascript,Asp.net Mvc 2,我只是想知道我应该在将数据输入数据库之前还是在向用户显示数据时对所有数据进行编码?或者两者兼而有之 现在,我在向用户显示时执行此操作。我使用的是asp.net mvc 2.0,所以我通常只做一切编码对我来说意味着什么 我对这两种观点都不确定,尽管对《泰晤士报》这样做可能有点极端 而且我真的只需要注意用户输入的字符串,对吗 就像我遇到了一个问题,我的一个插件由于某种原因无法找出如何排序日期,如果日期是html编码的 我只是不假思索地把它编码了。现在有人向我指出,这样做没有什么意义,因为我从数据库中

我只是想知道我应该在将数据输入数据库之前还是在向用户显示数据时对所有数据进行编码?或者两者兼而有之

现在,我在向用户显示时执行此操作。我使用的是asp.net mvc 2.0,所以我通常只做一切
编码对我来说意味着什么

我对这两种观点都不确定,尽管对《泰晤士报》这样做可能有点极端

而且我真的只需要注意用户输入的字符串,对吗

就像我遇到了一个问题,我的一个插件由于某种原因无法找出如何排序日期,如果日期是html编码的

我只是不假思索地把它编码了。现在有人向我指出,这样做没有什么意义,因为我从数据库中直接获取了日期,并且在数据库中它存储为datetime。所以不能在那里存储javascript

所以我猜我真的不需要对这些进行编码(如果我错了,请纠正我)

int、bit(bools)、datatimes、decimals类型(如果以这种方式存储在数据库中)


如果不影响我的任何插件,我可能仍然会对它们进行编码,但很高兴知道我可能不必这样做。

在大多数情况下,当您将数据存储在数据库中时,您不必对数据进行HTML编码。正如您自己所指出的,对于大多数数据类型(整数、日期等),最好将其保存为未编码(即性能更高、与其他系统协同工作等)

您确实需要担心的一种情况是来自外部源(如最终用户)的字符串。即使在这种情况下,存储未编码的数据并在数据返回到浏览器后使用
进行编码也应足够。您应该只考虑字符串的编码,如果它来自一些启用标记的用户控件(如TyMyCE文本编辑器或类似的东西)。
此外,始终要小心保护自己免受SQL注入攻击。在您尝试将数据发送到数据库之前,您应该验证表示日期的数据段实际上是一个日期。

通常,您在数据已经解码后“获取”数据,然后将其放入解码后的数据库(或任何东西),并且语法(如您所说)将在显示时对其进行编码。由于这种语法,您不必担心在其他任何地方编码/解码(至少在绝大多数情况下),tinyMCE是我规则的一个例外。我不能用html将其编码给用户(默认情况下是这样)。因此,在我将其插入数据库之前,我使用一个白名单和XSS库来检查它是否安全。与SQl注入攻击一样,我使用linq to SQl,因此所有内容都必须是对象,因此我必须将表单中的日期转换为datetime,如果它无法将其解析为datetime,那么它就不是datetime。