24


6

私はJavaScriptで書かれたシンプルなHTMLサニタイザーを探しています。 100%XSSセキュアである必要はありません。

私は自分のウェブサイトにMarkdownとWMD Markdownエディタ(githubのSOマスターブランチ)を実装しています。 問題は、ライブプレビューに表示されるHTMLが、ここに表示されるSOのようにフィルタ処理されていないことです。 私は、プレビューウィンドウの内容をフィルタリングできるように、JavaScriptで書かれたシンプル/クイックHTMLサニタイザーを探しています。

完全なXSS保護を備えたフルパーサーは不要です。 出力をサーバーに送り返していません。 データベースに結果を保存する前に、適切なフルHTMLサニタイザーを使用しているサーバーにMarkdownを送信します。

グーグルは私には全く役に立たない。 私は、あらゆる種類のサーバーサイド言語で、ユーザーが生成したHTMLからJavaScriptを除外する方法に関する何百もの(しばしば不正確な)記事を入手しています。

更新

これが必要な理由をもう少し詳しく説明します。 私のウェブサイトにはStackOverflowのものと非常によく似たエディタがあります。 MarkDownの構文を入力するためのテキスト領域とその下にプレビューウィンドウがあり、送信後の外観を示しています。

ユーザーが何かを送信すると、それはMarkDown形式でサーバーに送信されます。 サーバーはそれをHTMLに変換してから、HTMLサニタイザーを実行してHTMLをクリーンアップします。 MarkDownは任意のHTMLを許可するので、私はそれを片付ける必要があります。 たとえば、ユーザーは次のように入力します。

alert( 'Boo!');

MarkDownコンバーターはそれがHTMLであるのでそれに触れません。 HTMLサニタイザーはそれを取り除き、スクリプト要素は消えます。

しかし、これはプレビューウィンドウでは起こりません。 プレビューウィンドウはMarkDownをHTMLに変換するだけでサニタイズはしません。 そのため、プレビューウィンドウにはスクリプト要素が含まれます。つまり、プレビューウィンドウはサーバー上の実際のレンダリングとは異なります。

これを修正したいので、手っ取り早いJavaScript HTMLサニタイザーが必要です。 基本的な要素/属性のブラックリスト登録とホワイトリスト登録で簡単なことができます。 XSS保護はサーバーサイドのHTMLサニタイザーによって行われるため、XSSに対して安全である必要はありません。

これはプレビューウィンドウが実際のレンダリングと99.99%の時間で一致することを確認するためのものです。これは私にとって十分なことです。

手伝ってくれますか? 前もって感謝します!

3 Answer


12


あなたはこの質問で推奨されているものを見てみるべきです。

そしてXSSについてもっとする必要がないことを確かめるために、これに対する答えを見直してください。 user-generated-html [ユーザー生成HTML内のJavascriptインジェクション攻撃を防ぐ方法]


1


私達は簡単なHtmlSantizerを開発し、それをここにオープンソース化しました:https://github.com/jitbit/HtmlSanitizer

使用法

var result = HtmlSanitizer.SanitizeHtml(入力);

_ [免責事項! 私は作家の一人です!] _


-2


私の関数では、文字列が空ではなく、英数字のみを含むことを気にしていました。 これは普通のJSを使い、サード・ライブラリーなどは使いません。 これには長い正規表現が含まれていますが、仕事はしています;)この上に構築することもできますが、正規表現はもっと似たものにすることができます(必要に応じてエスケープし、スペースを除いて)。 ;)

var validateString = function(string){

var validity = true;

if(string == ''){有効性= false; }

if(string.match(/ [| <|、|> | \。| \?| \ / |:|; | | "| '| {| \ [|} | \] | \ || \\ |〜| | | | `|!| @ |#| \ $ |%| \ ^ |

妥当性= false。 }

有効性を返します。 }