编码/解码文本框
问题描述:
我使用Asp.Net 4,C#和MS SQL。编码/解码文本框
对于我的网站,我使用MS默认解决方案来防止跨站点脚本。
我也习惯在我的逻辑中编码所有用户的输入,以便这些数据可以存储在我的数据库中。
目前我正在使用GridView来做一些基本的CRUD操作,但我面临一个问题。
- CREATE:用户可以插入任何输入,我的逻辑将编码并保存在数据库上。
- READ:GridView控件可以在“标签”的结果显示,从数据库用户的输入进行解码,这要归功于该领域属性“HtmlEnscape真或假
- 更新:在这里我的问题在编辑的时候了!文本框显示从编码的数据库(以这种方式保存)的用户输入,但我需要重新编解码,显示它给用户,从而能以友好的方式进行编辑,并重新保存。
我问题: - 如何做? - 因为我的应用程序中有许多页面有很多TextBox,所以如何集中这种行为?
谢谢你们的帮助!
答
首先我会说,你应该永远不要在存储到数据库之前进行编码。您在输出点编码 - 在将其放入文本框,网格或任何地方之前。
这有几个优点;
- 你是格式不可知的 - 你可以把你的数据,并把它作为HTML,XML,JSON或任何因为你没有锁定自己的单一格式时存储。
- 它使搜索更容易,如果你正在搜索这些领域。
- 如果您正在使用的编码功能中存在错误,您最终可能会存储不安全的值。通过在输出点进行编码,您可以将您的编码器替换为无错的编码器,或者使用黑名单而不是白名单进行编码,而不必通过所有数据,将其拉出,解码并对其重新编码。
在文本框的情况下,实际编码取决于文本框的类型 - 单行文本框是属性编码,多行文本框是HTML编码,并使用asp.net文本框控件的text属性为您编码,使用正确的方法。
通过存储“原始”HTML,您可以删除需要解码的内容,因为控件自动为您编码,所以您无需集中。
显示时应该只有HtmlEncode数据,而不是在存储数据时。换句话说,将其存储为未编码,并且只在显示时进行编码。 – 2011-06-06 11:39:43
我不同意这一点。编码用户输入并存储在数据中可以防止恶意用户修改数据库。顺便说一句我的原始问题? :-)谢谢 – GibboK 2011-06-06 11:44:32
编码根本无法保护数据库。 – blowdart 2011-06-06 11:45:59