2009-08-04 10 views
7

クライアント上でjavascript変数に入れられる文字列をサーバー上に構築しています。アポストロフィを符号化する

html = html.Replace("'", "'"); 

が、私はより多くのエレガントな馬鹿の証拠方法があると仮定します。私はこのような何かをやっているサーバー上で、今どんな問題

を避けるために、これを符号化する何が最善か

このようなものをやっている。

答えて

10

これを行うには、Microsoft Anti-Cross Site Scripting Libraryを使用することをお勧めします。彼らは何をしたいんJavaScriptEncode方法を提供します。

Microsoft.Security.Application.AntiXss.JavaScriptEncode("My 'Quotes' and ""more"".", False) 
+0

は、フロントエンドでそれをアンエスケープすることを忘れないでください それをアラートボックスなどに使用したい場合などです。 –

+0

Nugetパッケージ:http://nuget.org/packages/AntiXSS/ –

1

は、私はあなたがこの文字列を使用していた状況ではわからないんだけど、\'あなたが探しているものかもしれません。バックスラッシュはエスケープ文字で、それ以外の場合は文字列リテラルには使用できないcertain charactersを使用できます。あなたは、この特定のケースでalert("It's amazing");を使用することができ、

もちろん
alert('It\'s amazing'); 

:これは、出力にはJavaScriptをどのように見えるかです。あなたがJavaScriptコード構築している場合

とにかく、:一方

html = html.Replace("'", "\\'"); 

を、いくつかの処理を必要とするアポストロフィ文字以外の文字があります。 Microsoft Anti-Cross Site Scripting Libraryを使用すると、すべてを一度に取得できます。

0

文字列値でエスケープする必要がある文字は、バックスラッシュと文字列区切り文字として使用される文字です。

アポストロフィ( ')文字列の区切り文字として使用されている場合:

引用符( ")の文字列の区切り文字として使用されている場合は
html = html.Replace(@"\", @"\\").Replace("'", @"\'"); 

html = html.Replace(@"\", @"\\").Replace(@"""", @"\"""); 

あなたがある区切り文字がわからない場合使用、またはそれは将来変更される可能性があれば、あなただけの両方を逃れることができます。

html = html.Replace(@"\", @"\\").Replace("'", @"\'").Replace(@"""", @"\"""); 
1
html = html.Replace("'", "%27"); 
1

私は、AntiXSSライブラリが私が探していたものを達成することができなかったことを発見しました。これはサーバー側をエンコードし、javascriptでデコードすることでした。

GlobalObject.escape(string); 

とJavaScriptでクライアント側:

は、代わりに私がすることができますMicrosoft.JScript.dllを使用

unescape(string);