web-dev-qa-db-ja.com

JavaScriptテキストをサニタイズする方法

私はjsの断片(Google Analytics)を受け取るテキストエリアを持っています。それを消毒する方法はありますか? wp_filter_nohtml_kse()のような関数は使用できませんので、何を使用すればいいですか?

3
Daniel

いいえ、そのための機能はありません。完全なJavaScriptパーサーが必要です。これはWordPressコアの一部ではありません。

2
fuxia

そのための簡単な方法の1つは、ユーザーにJavaScriptコード全体を入力させるのではなく、自分のGoogle AnalyticsプロパティIDだけを入力させることです。それからあなたは自分のProperty IDを使って自分でスニペットを生成します。

このGoogleヘルプページ によると、これが現在のAnalyticsトラッキングコードです。

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.Push(['_setAccount', 'UA-XXXXX-Y']);
  _gaq.Push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

「UA-XXXXX-Y」は物件IDです。最初の2文字は常に「UA」のようです。 'XXXXX'はいくつかの数字を表します(私のサイトのプロパティIDの1つに8桁があるため、必ずしも5桁ではありません)。 'Y'は2桁以上の整数です。

プロパティIDを検証する方法の1つは、次のように正規表現を使用することです。

preg_match('/^UA-[0-9]+-[0-9]+$/', $input);

$ inputが有効なプロパティIDフォーマットの場合は1を返し、そうでない場合はfalseを返します。

5
Ben Miller

ユーザーが自分のJavascriptコードを入力できるようにしたいが、HTMLには入力したくない場合は、次のようにします。

preg_match( '/\A<script((?!<[a-zA-Z])[\s\S])*</script>\Z/', trim($input) );

Trim関数は最初と最後から空白を取り除き、正規表現パターンは '<script'で始まり '</script>'で終わり、直後に '<'文字がない場合にのみ文字列と一致します手紙で。ユーザーが何らかの理由で必要であれば、小なり演算子を使用してJavascriptコードを置くことができるようにしながら、それは邪魔なHTMLを事実上排除します。

他に私がすることは、管理者だけがこのオプションを設定できることを確認することです、そして彼または彼女がそこに何らかのHTMLをこっそり入れて、彼ら自身のウェブサイトを壊すならば、それは彼ら自身のせいです。もちろん、これがデータベースに取り込まれるのであれば、それがSQLに対してサニタイズされていることを確認してください。

1
Ben Miller