关于c#:HttpUtility.HtmlEncode,HttpUtility.HtmlDecode,AntiXSS库和正确格式化用户输入的输入

HttpUtility.HtmlEncode, HttpUtility.HtmlDecode, the AntiXSS library and correctly formatting user-entered input

我正在尝试开发一个安全的Web应用程序,该应用程序可以接受表单数据,将其编码到数据库中以消除跨站点脚本问题,然后在其他Web页面上很好地对其进行格式化。

正在使用

对表单数据进行编码

1
HttpUtility.HtmlEncode('It's my wedding!')

此工作的一个示例是有人输入"这是我的婚礼!"进入文本框。这将输入格式为:

的数据库

这是我的婚礼!

然后我将其从数据库中拉出并使用.NET文字控件进行显示,它的显示方式与之完全相同,撇号在屏幕上保持编码。

Web浏览器解释


好的,这就是我已经找到的解决方法。

我想保护其他开发人员免于关闭请求验证和输出字段,而不检查他们正在输出什么,因此我将使用HttpUtility.HtmlEncode方法对输入进行编码。这意味着当其他开发人员将这些信息吐出来时,它仍然是经过编码的,并且如果他们随后希望将这些内容巧妙地扔到HttpUtility.HtmlDecode中,则这是他们的责任。

但是,我将构建一种方法,该方法只能转义我在用户输入中经常看到的最基本的格式,可以将其视为安全的。在我的情况下,这些字符是单引号和双引号。所有其他内容将保持编码状态。如果现实生活中的用户输入或测试输入中有很多我尚未解决的特殊安全字符出现,我将追溯将其添加到白名单中。


您如何接收数据?

默认情况下,假定ValidateRequest设置为true ,. NET WebForms基础结构本身仍应阻止许多此类操作。

在输出用户输入的数据时应使用HtmlEncode(这样可以防止令人讨厌)。 HtmlDecode在这种情况下不会参加聚会。