【问题标题】:Best way to make alert messages safe in javascript在 javascript 中使警报消息安全的最佳方法
【发布时间】:2013-03-29 18:57:25
【问题描述】:

我想通过注册一个脚本来显示来自我的 asp.net 页面的消息,有时甚至是来自错误的异常代码。我使用此代码:

ScriptManager.RegisterStartupScript(this, Page.GetType(), "NoDept", "alert('Adjustments require the Total Amount to be ZERO to post!');", true);

如果我可以决定在开发过程中显示的信息,这非常有用,但是如果我想显示来自应用程序的数据,它可能包含无效文本,这当然会破坏脚本并且它不会显示。例如,消息中带有 ' 的内容。

当我尝试显示来自异常的消息时遇到了问题,例如:

ScriptManager.RegisterStartupScript(this, Page.GetType(), "processError", "alert('" + ptcred.TransactionError + "');", true);

ptcred.TransactionError 是 ASP.NET Exception 错误,它可能包含无效字符。

在我的 alert() 函数中处理这些信息的最佳方式是什么,不会搞砸我的 javascript? jQuery 可以做些什么来清理它?

编辑:我应该解释一下,我想继续轻松地注册一个警报脚本,它简单方便。只是想知道是否有类似 HTML.Encode 之类的东西,或者可以清理信息的东西,从而使消息不会搞砸脚本。

谢谢, 科里

【问题讨论】:

  • 把它转换成一个方法。这很简单,你可以动态传递任何Errorstring Message
  • 在您的 javascript 警报中使用双引号将有助于消除一些问题。 ScriptManager.RegisterStartupScript(this, Page.GetType(), "processError", "alert(\"" + pctred.TransactionError + "\");", true);

标签: c# javascript jquery asp.net


【解决方案1】:

您需要转义任何引号字符。

Regex.Replace(ptcred.TransactionError, "(\"|\')", "\\$1");

【讨论】:

    【解决方案2】:

    您可以调用HttpUtility.JavaScriptStringEncode方法(在ASP.NET 4.0中引入):

    ScriptManager.RegisterStartupScript(
        this, Page.GetType(), "processError",
        "alert('" + HttpUtility.JavaScriptStringEncode(ptcred.TransactionError) + "');",
        true);
    

    警告:如果TransactionError 可能包含用户输入的数据,那么正确编码它是极其重要的,就像上面一样。否则,您可能会引入安全漏洞并使您的应用程序遭受跨站点脚本 (XSS) 攻击。不知道 ChaosPandion 的回答(转义单引号和双引号)是否足以避免 XSS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-27
      • 2014-02-21
      • 2011-06-02
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多