【问题标题】:Strategy for auto encoding text inputs?自动编码文本输入的策略?
【发布时间】:2011-05-14 11:04:13
【问题描述】:

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

对此有什么好的策略吗?如果人们输入“”,我认为保存数据的唯一方法是通过 Javacript 对其进行编码。我曾尝试在代码隐藏中捕获它,但为时已晚。我正在考虑继承文本框并使用客户端脚本自动编码/解码输入。我还必须考虑数据库中已经保存的所有尖括号。

对此有何建议或经验?

【问题讨论】:

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


    【解决方案1】:

    你有没有考虑过使用,

    Server.HtmlEncode(input) 
    

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

    并且可能与this 问题重复 /BB

    【讨论】:

    • 您会在生命周期的哪个部分执行此操作,因为无论我在哪里尝试,都会抛出“潜在危险......”。我觉得客户端是处理这个问题的唯一方法(?)
    • 这只能在您关闭页面验证时完成。 @Bumble Bee 实际上建议您将其关闭,并使用 Server.HtmlEncode 检查您从用户那里获得的值。
    • 对输入进行编码对我来说似乎是糟糕的架构。您需要对输出进行编码。一些视图引擎(如 Razor)会自动执行此操作。
    【解决方案2】:

    您可以在发布数据之前转义危险字符。像这样:

    string = escape(string);
    

    然后在服务器端:

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

    类似的东西。

    【讨论】:

      【解决方案3】:

      我从您的回答中得知,您不希望您的客户向您发送“危险”内容,因此作为最后一道防线,最好打开页面验证,而不是关闭它并使用 @每个用户输入值上的 987654321@ (您可能会错过一个,这是很多工作)。

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

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

      【讨论】:

        【解决方案4】:

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

        最明显的情况是,有时我们确实想将大块 HTML 发送到服务器。当然,这样做仍然必须确保安全,但是“哦,这看起来像一大块 HTML!抛出一个安全异常!”显然这不是正确的方法。

        因此,在这些情况下,关闭页面验证并添加您自己的服务器端是非常明智的。这确实意味着您必须比以前更仔细地考虑如何使用此输入。跟踪每个数据输入的路径(不仅仅是那些您希望看到像 < 这样的字符的路径,并确保它永远不会被原封不动地发送回客户端,或者它经过彻底检查以保证安全。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-31
          • 1970-01-01
          • 1970-01-01
          • 2018-06-07
          • 2011-07-14
          • 1970-01-01
          • 1970-01-01
          • 2023-03-04
          相关资源
          最近更新 更多