自动编码文本输入的策略?

时间:2010-11-23 12:55:36

标签: c# javascript .net asp.net .net-3.5

为防止我的应用程序因错误“检测到潜在危险的Request.Form值...”而崩溃,我只是关闭了页面验证。我想重新审视并正确解决它。

这有一个好的策略吗?如果有人进入'<'和'>',我认为保存数据的唯一方法是通过Javacript对其进行编码。我试过在代码隐藏中捕获它,但它变得太晚了。我正在考虑继承文本框并使用客户端脚本自动编码/解码输入。我还必须考虑已保存在我的数据库中的所有尖括号。

对此有任何建议或经验吗?

4 个答案:

答案 0 :(得分:1)

我从你的回答中得知你不希望你的客户向你发送“危险”的内容,所以最好保持打开页面验证作为最后一道防线,而不是将其关闭并使用{ {1}}每个用户输入值(您可能会错过一个,这是很多工作)。

我会选择javascript解决方案,例如你可以使用jQuery这样的库,并挂钩表单的提交事件,并在提交之前整理输入。比创建自己的派生文本框要简洁得多。

对于没有javascript的用户,或试图“破解”你的小脚本的用户,sc#!w他们,他们将到达你的最后一道防线,并得到一个错误。

答案 1 :(得分:1)

最好将内置页面验证视为不适用于所有情况的安全设备。有很多次,当它打开时完全不可能做某事。在这些情况下,我们将其关闭,并自行处理验证。

最明显的情况是,有时我们确实希望将大块HTML发送到服务器。当然,这样做仍然需要保证安全,但“哦,这看起来像一大堆HTML!抛出一个安全例外!”显然这不是正确的方法。

因此,在这些情况下,关闭页面验证并添加自己的服务器端是完全合理的。它确实意味着你必须考虑如何使用这个输入,比以前更仔细地审查。按照每个数据输入的路径(不仅仅是您希望看到像<这样的字符的路径,并确保它永远不会被发送回未转义的客户端,或者它被彻底检查以确保安全。

答案 2 :(得分:0)

你考虑过使用,

Server.HtmlEncode(input) 

没有必要在客户端使用javascript进行此操作。您可以使用上述技术在服务器端轻松完成。

可能是this问题的副本 / BB

答案 3 :(得分:0)

您可以在发布数据之前逃避危险的字符。像这样:

string = escape(string);

然后在服务器端:

var stringVal = Server.UrlDecode(Request["string"]);

类似的东西。