c# - 编码/解码文本框

标签 c# asp.net escaping html-encode

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

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

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

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

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

我的问题: - 怎么做? - 因为我在我的应用程序的许多页面中有许多文本框,如何集中这种行为?

谢谢大家的帮助!

最佳答案

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

这有几个优点;

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

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

通过存储“原始”HTML,您无需解码,因为控件会自动为您编码,您无需集中处理任何内容。

关于c# - 编码/解码文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6251447/

相关文章:

c# - IdentityServer4发现文档返回404

.net - ASP.NET WebForm 的 'page lifecycle' 是什么?

java - 如何在查询中转义Hibernate关键字?

c# - 如何让代码契约忽略特定的程序集引用?

c# - 有没有办法导出visual studio生成的时序图?

c# - ASP.Net 多行文本框最大长度

c# - 问题是关于在 ASP.NET 中发送电子邮件

c# - 从 MVC 6/Web Api Controller 返回错误字符串

mysql - 具有数组条件的 Rails 4 LIKE 查询 - 撇号用双反斜杠转义

batch-file - 如何将用户输入的字符串与批处理文件中的特殊字符进行比较?