将警报消息安全地实现于JavaScript的最佳方法

3
我希望能通过注册脚本来显示来自我的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来清理它吗?

编辑:我应该解释一下,我想继续轻松地注册一个alert脚本,这很容易和方便。只是想知道是否有类似于HTML.Encode之类的东西,可以清理使消息不会破坏脚本的信息。

谢谢, Cory


将其转换为一个方法.. 这很简单,你可以动态地传递任何 Errorstring Message - MethodMan
在JavaScript的alert中使用双引号可以帮助消除一些问题。ScriptManager.RegisterStartupScript(this, Page.GetType(), "processError", "alert("" + ptcred.TransactionError + "");", true); - TheGeekYouNeed
2个回答

3

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

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

3

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接