テキストエリアを使用して、ユーザーからの入力を取得し、画面に表示しています。彼らが次のようなものを入れた場合、どうすれば確認できますか
<h1>YAY, I hacked in</h1>
そのまま表示するだけで、 としては表示されません<h1>
。これには関数が必要です。ヘルプ?:D
テキストエリアを使用して、ユーザーからの入力を取得し、画面に表示しています。彼らが次のようなものを入れた場合、どうすれば確認できますか
<h1>YAY, I hacked in</h1>
そのまま表示するだけで、 としては表示されません<h1>
。これには関数が必要です。ヘルプ?:D
サーバー側でこれに対処する必要があります。フォーム送信時に JavaScript でフィルタリングすると、ユーザーは独自のページを作成したり、telnet を使用したり、JavaScript を無効にしたり、Chrome/FF/IE コンソールを使用したりして、フィルターを無効にすることができます。何も緩和されていません。ページ上のブレークインポイントを移動しただけです。
たとえば、PHP で、ユーザーの書式設定なしで生の文字をダンプしたい場合は、次のように使用できます。
print htmlentities($user_submitted_data, ENT_NOQUOTES, 'utf-8');
.NET の場合:
someControl.innerHTML = Server.HtmlEncode(userSubmittedData);
即時/プレビュー表示のためにクライアント側のコンテンツをサニタイズしようとしている場合は、これで十分です。
out.innerHTML = user_data.replace(/</g, "<").replace(/>/g, ">");