我使用 Asp.Net 4、C# 和 MS SQL。
对于我的网站,我使用 MS 默认解决方案来防止跨站点脚本。
我还习惯于在我的逻辑中对所有用户的输入进行编码,以便可以将这些数据编码存储在我的数据库中。
目前我正在使用 GridView 执行一些基本的 CRUD 操作,但我遇到了一个问题。
- 创建:用户可以插入任何输入,我的逻辑将编码并保存在数据库中。
- 阅读:GridView 可以在“标签”中显示来自数据库的用户输入,由于字段“HtmlEnscape True or False”的属性,结果已解码。
- 更新:这是我的问题!在编辑文本框时,会显示来自数据库编码的用户输入(以这种方式保存),但我需要再次解码以将其显示给用户,以便可以以友好的方式进行编辑并重新保存。
我的问题: - 怎么做? - 因为我在我的应用程序的许多页面中有许多文本框,如何集中这种行为?
谢谢大家的帮助!
最佳答案
首先我要说的是,在存储到数据库之前,您永远不应该进行编码。您在输出点进行编码 - 在将其放入文本框、网格或任何地方之前。
这有几个优点;
- 您是格式不可知论者 - 您可以将数据存储为 HTML、XML、JSON 或其他格式,因为您在存储时没有将自己锁定为单一格式。
- 如果您正在搜索这些字段,它会使搜索更容易。
- 如果您使用的 Encode 函数存在错误,您最终可能会存储不安全的值。通过在输出点进行编码,您可以将编码器替换为无故障的编码器,或者使用黑名单而不是白名单的编码器,而无需遍历所有数据、提取数据、解码并重新编码。
在文本框的情况下,实际编码取决于文本框的类型 - 单行文本框是属性编码的,多行文本框是 HTML 编码的,并使用 asp.net 文本框控件的文本属性为您编码, 使用正确的方法。
通过存储“原始”HTML,您无需解码,因为控件会自动为您编码,您无需集中处理任何内容。
关于c# - 编码/解码文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6251447/