2011-06-06 92 views
4

我使用Asp.Net 4,C#和MS SQL。编码/解码文本框

对于我的网站,我使用MS默认解决方案来防止跨站点脚本。

我也习惯在我的逻辑中编码所有用户的输入,以便这些数据可以存储在我的数据库中。

目前我正在使用GridView来做一些基本的CRUD操作,但我面临一个问题。

  • CREATE:用户可以插入任何输入,我的逻辑将编码并保存在数据库上。
  • READ:GridView控件可以在“标签”的结果显示,从数据库用户的输入进行解码,这要归功于该领域属性“HtmlEnscape真或假
  • 更新:在这里我的问题在编辑的时候了!文本框显示从编码的数据库(以这种方式保存)的用户输入,但我需要重新编解码,显示它给用户,从而能以友好的方式进行编辑,并重新保存。

我问题: - 如何做? - 因为我的应用程序中有许多页面有很多TextBox,所以如何集中这种行为?

谢谢你们的帮助!

+0

显示时应该只有HtmlEncode数据,而不是在存储数据时。换句话说,将其存储为未编码,并且只在显示时进行编码。 – 2011-06-06 11:39:43

+0

我不同意这一点。编码用户输入并存储在数据中可以防止恶意用户修改数据库。顺便说一句我的原始问题? :-)谢谢 – GibboK 2011-06-06 11:44:32

+0

编码根本无法保护数据库。 – blowdart 2011-06-06 11:45:59

回答

3

首先我会说,你应该永远不要在存储到数据库之前进行编码。您在输出点编码 - 在将其放入文本框,网格或任何地方之前。

这有几个优点;

  1. 你是格式不可知的 - 你可以把你的数据,并把它作为HTML,XML,JSON或任何因为你没有锁定自己的单一格式时存储。
  2. 它使搜索更容易,如果你正在搜索这些领域。
  3. 如果您正在使用的编码功能中存在错误,您最终可能会存储不安全的值。通过在输出点进行编码,您可以将您的编码器替换为无错的编码器,或者使用黑名单而不是白名单进行编码,而不必通过所有数据,将其拉出,解码并对其重新编码。

在文本框的情况下,实际编码取决于文本框的类型 - 单行文本框是属性编码,多行文本框是HTML编码,并使用asp.net文本框控件的text属性为您编码,使用正确的方法。

通过存储“原始”HTML,您可以删除需要解码的内容,因为控件自动为您编码,所以您无需集中。

+0

好的,我理解你的观点,但我的数据库包含所有编码的内容。因此,我需要找到一种方法来在编辑模式下使用GridView中的TextBox向用户显示时对结果进行解码。任何想法如何解决它?非常感谢! – GibboK 2011-06-06 11:51:10

+0

除了通过数据库一次,解码一切,然后再次存储它?这是您的合适解决方案。 – blowdart 2011-06-06 11:58:03

+0

非常感谢! – GibboK 2011-06-06 12:30:48