在javascript中使警报消息安全的最佳方法

时间:2013-03-29 18:57:25

标签: c# javascript jquery asp.net

我想通过注册脚本来显示来自我的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异常错误,可能包含无效字符。

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

编辑:我应该解释一下,我想继续轻松注册一个警报脚本,它简单方便。只是想知道是否有像HTML.Encode这样的东西会清除信息,这会使消息不会搞砸脚本。

谢谢, 科里

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

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

警告:如果TransactionError可能包含用户输入的数据,那么正确编码就非常重要,如上所述。否则,您可能会引入安全漏洞并将您的应用程序暴露给跨站点脚本(XSS)攻击。我不知道ChaosPandion的答案(逃避单引号和双引号)是否足以避免XSS。

相关问题