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);

pcred.TransactionError は ASP.NET 例外エラーであり、無効な文字が含まれている可能性があります。

私のjavascriptを台無しにしない私のalert()関数でこの情報を表示するための最良の方法は何でしょうか? おそらくそれをきれいにするためにjQueryができることはありますか?

EDIT:説明する必要があります。アラートスクリプトを簡単に登録するだけで、簡単で便利です。HTML.Encode のようなものや、スクリプトを台無しにしないメッセージを作成する情報をクリーンアップするものがあるかどうか疑問に思いました。

ありがとう、コーリー

4

2 に答える 2

3

HttpUtility.JavaScriptStringEncodeメソッド (ASP.NET 4.0 で導入)を呼び出すことができます。

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

注意:ユーザーが入力したデータが含まれている可能性がある場合TransactionErrorは、上記のように正しくエンコードすることが非常に重要です。そうしないと、セキュリティの脆弱性が発生し、アプリケーションがクロスサイト スクリプティング (XSS) 攻撃にさらされる可能性があります。ChaosPandion の回答 (一重引用符と二重引用符をエスケープする) が XSS を回避するのに十分かどうかはわかりません。

于 2013-03-29T21:28:01.057 に答える
3

引用符をエスケープする必要があります。

Regex.Replace(ptcred.TransactionError, "(\"|\')", "\\$1");
于 2013-03-29T19:02:39.653 に答える