web-dev-qa-db-ja.com

2019年の安全なユーザー入力HTML

(このトピックについては以前から多くの議論があり、OWASPと同様にここでも多くのスレッドを読みましたが、以下にリストされている特定のCSPを含む追加の質問があります。)

ユーザーがHTMLを許可するWYSIWYGエディターを介して他のメッセージを書き込むことができるようにしたいと考えています。したがって、user1はuser2にメッセージを送信します。もちろん、そのメッセージをuser2に表示します。控えめに言っても怖いシナリオです。

HTMLを許可するこのエディターを使用していると仮定すると、次の計画は、スムーズなユーザーエクスペリエンスを可能にしながら、期待できる限り安全ですか? 「Trix」と呼ばれるエディター自体は、大企業のBasecampによって使用され、積極的に保守されています。彼らは、同様のユースケースの実稼働環境で使用しています。セキュリティ上の理由から、markdownを使用してすべてのユーザー入力htmlを取り除くことを好みますが、Basecampが比較的安全にエディターを使用できる場合は、私もできると思います。

私たちの計画は:

  1. HTML Purifierを使用してホワイトリストに登録する

  2. 「厳密な」CSP、具体的にはGoogleの提案: https://csp.withgoogle.com/docs/strict-csp.html

CSP:

Content-Security-Policy:
  object-src 'none';
  script-src 'nonce-{random}' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;
  base-uri 'none';
  report-uri https://your-report-collector.example.com/
3
KayakinKoder

エディタは使いやすさには優れていますが、XSSに対するセキュリティを考慮する場合は無視してください。

注入されたHTMLのセキュリティを確保する必要があるのは、サーバーで実行されているサニタイザです。ブラウザーをいじるだけでは、HTMLを混ぜる必要がある場合に、無害化された入力からユーザーを完全に保護することはできません(OTOH、プレーンテキストだけが必要な場合は、単純です。innerTextを使用するだけです)。

4
Lie Ryan