豊富にフォーマットされたコンテンツのマークアップ言語は何ですか?

StackOverflow https://stackoverflow.com/questions/342961

質問

Webベースのアプリケーションを開発していて、ユーザーからのリッチテキスト形式のテキストを許可する場合、その入力を許可する方法を選択する必要があります。 HTMLのサニタイズがほぼ間違いなく難しいため、さまざまなマークアップ言語が作成されています。

次のようなさまざまなマークアップ言語の長所と短所は何ですか

別の言い方をすれば、特定のマークアップ言語の使用を選択する際に考慮すべき要素は何ですか。

役に立ちましたか?

解決

Markdown、BBCode、Textile、MediaWikiマークアップはすべて基本的に同じ一般的な概念なので、HTMLとプレーンテキストマークアップの2つのカテゴリにまとめます。

HTML

HTMLの扱いは、コンテンツが既に<!> quot; presentable <!> quot;にあることです。 Webコンテンツのフォーム。それは素晴らしいことであり、処理時間を節約し、容易に解析可能な言語です。 HTMLコンテンツを処理したり、HTMLから他の形式に変換したりするために、ほとんどすべての言語のライブラリが多数あります。主な欠点は、初期のWebの標準が緩いため、HTMLが非常に可変であり、 'ユーザーからHTMLを受け入れるとき、常に正しい入力に依存するわけではありません。指摘したように、HTMLの整理またはサンタン化は非常に難しいことがよくあります。特に、XMLのように通常のマークアップルールに従わないためです(つまり、不適切に閉じられたタグが一般的です)。

プレーンテキストマークアップ

このカテゴリは、次の理由で頻繁に使用されます。

  • 1つのソースから複数のフォームに簡単に解析-PDF、HTML、RTF
  • コンテンツは、HTMLから抽出する必要がなく、後日必要に応じて、読み取り可能なプレーンテキスト(通常、生のHTMLよりも読みやすい)で保存されます
  • HTMLが迷惑な変数であり、構造化されていない可能性がある特定の定義されたルールに従います
  • 単に完全なHTMLを許可するよりも、多くの場合により適切なコンテンツフォーマットのサブセットを強制的に許可します
  • HTMLのサブセットを強制することに加えて、入力を簡単にサニタイズし、クロスサイトスクリプティングの問題などを防ぐことが容易になります。
  • <!> quot; raw <!> quot;抽象化された形式のデータは、後日、たとえばサイトをHTML 4からXHTMLに変換したい場合、解析コードを変更するだけで済みます。 HTML形式のユーザー入力では、すべてのHTMLを個別にXHTMLに変換する必要があります。これはHTML Tidyが示すように、必ずしも単純なタスクではありません。同様に、ある時点で新しいマークアップ言語が登場した場合、または別の形式(RTF、PDF、TeX)に移行する必要がある場合、テキスト形式オプションの抽象化された制限されたサブセットにより、はるかに簡単なタスクになります。

下の行は、使用されているユーザー入力です。データを保持することを計画しており、フォーマットなどをシャッフルする必要がある場合は、情報を保存するために慎重な抽象フォーマットを使用するのが理にかなっています。何らかの理由で生データを手動で操作する必要がある場合、その形式が人間が読みやすい場合のボーナスポイント。コンテンツをWebページ(またはレポートなどのHTMLドキュメント)に表示するだけで、変換や将来の使用について心配する必要がない場合は、HTMLに保存することをお勧めします。

他のヒント

Jeff codinghorror.comでの長所と短所について議論しました SOをまとめる初期段階。読む価値があると思いました。

@netroxデータベースは問題ではなく、ブラウザの出力は問題です。

唯一の懸念事項は、ユーザーが挿入したHTMLによって破損する可能性のある最終レンダリングです。たとえば、ユーザーは<li>タグを開くことはできますが、閉じることはできません。これにより、ページの構造に応じて、後続のレイアウト全体が破損する可能性があります。または、<strong>タグを閉じずに開き、残りのコンテンツをすべて太字にします。

では、許可されたタグを検証する必要があるだけでなく、他のタグではなく、一部のタグを正確に許可する方法を教えてください。 htmlspecialchars() PHPを使用すると、すべてのHTMLタグの解析を簡単に防ぐことができるためたとえばメソッドですが、一部のタグを許可することになると、他の方法を探す必要があります。 strip_tags() 許可されていないタグを削除(完全に削除)するPHP関数がありますが、ユーザーのコンテンツを不適切な方法で変更し、ユーザーが簡単なコード(たとえば、処理するコードではなく共有/表示するコード)を投稿できないようにします。

レイアウトを壊すことに加えて、リンクのhref属性にjavascriptを挿入するなど、XSS攻撃を考慮する必要があります。たとえば、ユーザーを別のサイトにリダイレクトできます。考えられるXSS攻撃のこの長いリストを参照してください: https://www.owasp.org/index.php/ XSS_Filter_Evasion_Cheat_Sheet

ご覧のとおり、すべてのHTMLタグが解釈されるのを防ぐのは非常に簡単ですが、一部のタグのみを防ぐのははるかに複雑です。それを理解するには、巨大な<!> quot; HTML Purifier を見てください。 <!> quot;唯一の目的は、一部のHTMLタグを許可し、出力されるHTMLが有効(つまり、ページを壊さない)であり、XSS攻撃がないことを確認することです。

<!> quot; HTMLのサニタイズがほぼ間違いなく難しいため、さまざまなマークアップ言語が作成されています。<!> quot;

本当に?どうして難しいの?潜在的に危険な属性またはタグを削除し、データベースまたはファイルに入力する前にHTMLを検証する機能があります。 HTMLをサニタイズするのがどのように難しいかの例を教えてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top