对文本框进行编码/解码

本文关键字:编码 解码 文本 | 更新日期: 2023-09-27 17:58:25

我使用Asp.Net 4、C#和MS SQL。

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

我还习惯于对逻辑中的所有用户输入进行编码,这样这些数据就可以存储在数据库中。

目前我正在使用GridView进行一些基本的CRUD操作,但我遇到了一个问题。

  • CREATE:用户可以插入任何输入,我的逻辑将编码并保存在数据库中
  • 阅读:GridView可以在"标签"中显示来自数据库的用户输入,由于字段"HtmlEnscape True或False"的属性,结果被解码
  • 更新:这是我的问题!在编辑TextBox时,会显示来自编码数据库的用户输入(以这种方式保存),但我需要再次解码才能将其显示给用户,以便以友好的方式进行编辑并重新保存

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

谢谢大家的帮助!

对文本框进行编码/解码

首先,我想说,在存储到数据库中之前,永远不应该进行编码。您在输出点进行编码,然后再将其放入文本框、网格或任何位置。

这有几个优点;

  1. 您是格式不可知论者——您可以将数据作为HTML、XML、JSON或其他格式,因为在存储时您没有将自己锁定在单一格式中
  2. 如果您正在搜索这些字段,它会使搜索变得更容易
  3. 如果您使用的Encode函数中存在错误,您可能最终会存储不安全的值。通过在输出点进行编码,您可以用无缺陷的编码器替换编码器,或者使用黑名单而不是白名单的编码器,而无需查看所有数据,将其取出、解码并重新编码

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

通过存储"原始"HTML,您就不需要解码了,因为控件是自动为您编码的,所以没有什么可以集中的。