私たちの Web サービスは、いくつかのZalgo テキストで攻撃されており、将来のために適切な解決策を見つけようとしています。私たちのポリシーは、すべてのユーザー入力を受け入れ、永続的なストレージに保存することです (バックエンドの入力を正しくエンコードするため、この部分は問題ありません)。出力フェーズでは、XSS 攻撃やその他の混乱を避けるために、ホワイトリストを使用してフィルター/パーサーを介して元のユーザー入力を実行します。最近、一部のユーザーは Zalgo の世界を発見し、それで他の人に迷惑をかけるのが大好きです。
私が見たところ、Zalgo テキストは、意図したコンテナーから漏れ出た Unicode テキストの一部にすぎません。その結果、複雑な結合文字をすべて自動的に削除するのは、思い切った防御だと思います。厄介な副作用なしに、Zalgoテキストを特定の親要素に強制的に含めるCSSトリックを知っている人はいますか?
たとえば、私が持っている場合
<section class="userinput">
... user input here ...
</section>
ユーザー入力が の境界外に漏れないようにするにはどうすればよいsection.userinput
ですか? 私は正しい答えだと思いoverflow: hidden
ますclip: rect(...)
が、このユースケースでもっと良いことを知っていますか? section.userinput { max-height: 200vh; }
ユーザーが人為的に長いコメントを作成するのを避けるために、または同様のものを引き続き使用することができれば幸いです。一部のコメントが よりも長い場合は200vh
、そのコメントだけにスクロール バーが必要です。通常、ページ全体に対して 1 つのスクロール バーだけが必要です。
視覚的な領域でのみ問題に対処しようとしていることに注意してください。ユーザー入力として有効な UTF-8 シーケンスを受け入れることはまったく問題ありません。私はそのがらくたがいたるところに溢れるのを避けようとしているだけです。具体的には、 zalgo テキストをブロックしたり、zalgo のようなテキストを表示する前にフィルタリングしたりしようとしているわけではありません。