【问题标题】:How to put encoded JavaScript or URL's in an HTML Attribute in .NET 4.0?如何将编码的 JavaScript 或 URL 放入 .NET 4.0 的 HTML 属性中?
【发布时间】:2017-03-14 19:42:12
【问题描述】:

如果您需要将有效的 JavaScript 或 URL 放入 .NET 按钮的 onclick 属性中,例如,安全扫描软件可能会标记任何不受信任的数据并要求您对值进行编码,但您最终会得到无效的 JS和/或 URL。

例如

这可行,但会被安全扫描标记:

someButton.Attributes["onclick"] = "document.location.href = '" + someUrl + "'; return false;";

这将是浏览器中的一堆转义字符:

someButton.Attributes["onclick"] = Microsoft.Security.Application.Encoder.HtmlAttributeEncode("document.location.href = '" + someUrl + "'; return false;");

这样也可以:

var encodedUrl = Microsoft.Security.Application.Encoder.UrlEncode(someUrl);
var encodedJs = Microsoft.Security.Application.Encoder.JavaScriptEncode(string.Format("document.location.href = '{0}'; return false;", endocdedUrl);
someButton.Attributes["onclick"] = encodedJs;

基于this thread,我也尝试使用Page.ClientScript.RegisterStartupScript,但同样,我发送到浏览器的任何已编码的内容都是无效的。

我想我可以在客户端上解码,但这肯定会否定整个编码练习?我一定在这里遗漏了一些明显的东西吗?

【问题讨论】:

    标签: .net security encoding .net-4.0 attributes


    【解决方案1】:

    如果您正在对某些内容进行编码,则必须将其解码为有效字符串。
    例如,假设您的 URL 或 javascript 中有 < 符号。这种未经编码的符号可能会被标记为不安全,so you encode it to <。但这显然不是一个有效的 url,如果你把它留在那个状态,javascript 就会被破坏。

    因此,在客户端,您必须为 url 或 javascript 解码您的字符串。最安全的方法是在客户端自己构建 url,对来自服务器的参数进行一些连接,因此您在服务器上的代码将如下所示:

    using Microsoft.Security.Application;
    // ...
    someButton.Attributes["onclick"] = Encoder.HtmlAttributeEncode("return runUrl(23412);");
    

    在客户端,函数将是:

    var runUrl = function(id) {
      document.location.href = SOME_BASE_URL + '?id=" + id + "';
      return false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多