LTR言語における双方向文字のセキュリティ修正

以下のPRに出くわしました。

これにより、正当なヘブライ語またはアラビア語のテキストが読めなくなる可能性があると思います。

私が遭遇した解決策の1つは、Unicodeアルゴリズムを無効にして、印刷不可能な文字の表現を表示することでした(Pootleで実装されていたと思います)。
つまり、アイデアは次のとおりです。
この‎‏ テキスト

これを次のように変換します。
この\\u003cLRM\\u003e\\u003cRLM\u003e テキスト

これにより、ユーザーは実際の文字が何であるかを理解することで、これが悪意のあるものかどうかを選択し、必要に応じてUnicodeアルゴリズムを有効にしてテキストを正しく読み取ることができます。
よろしくお願いします。

「いいね!」 3

これを提起していただきありがとうございます。この懸念については検討済みです。OPでリンクされた修正は、HTMLとして手動で記述された、または<code>```</code></code> Markdownフェンスコードブロックから生成されたpreおよびcodeブロック内のUnicode双方向文字にのみ適用されるため、通常のヘブライ語またはアラビア語テキストが投稿で作成される場合には問題にならないはずです。

「いいね!」 2

デモ:

#include <cstdio.h>

int main() {
    /* Say hello; newline<U+2067> /*/ return 0 ;
    printf("Hello world.\n");
    return 0;
}
#include 

int main() {
    /* Say hello; newline<U+2067> /*/ return 0 ;
    printf("Hello world.\n");
    return 0;
}

テスト:‫"שלום חבר" - こんにちは友達

BIDIなし

テスト:“שלום חבר” - こんにちは友達

Markdown:

テスト:&#x202B;"שלום חבר" - こんにちは友達

BIDIなし

テスト:"שלום חבר" - こんにちは友達

世界で最高の例ではありませんが、要点はつかめるはずです。これはフォーラムに投稿されるソースコードにのみ影響します。ソースコード内のBidi文字は通常行われません。

「いいね!」 5

RLM が文を壊さない別の例を挙げます。

שלום לכולם ובמיוחד ל־Sam, Martin בחר לעזוב אותנו.

שלום לכולם ובמיוחד ל־Sam,‏ Martin בחר לעזוב אותנו.

違いがわかりますか?
唯一の変更は RLM です。Sam を祝福し、Martin が去ることを知らせたかったのです(悪気はありません)。

「いいね!」 3

はい、その例は確かにずっと良くなりました!ご覧のとおり、引き続き機能しており、セキュリティ修正の影響を受けていません :tada:

「いいね!」 4

コードブロックではありません :slight_smile:
コードブロック内では期待どおりに表示されないことを意味していました(これが修正のすべてですよね?)

「いいね!」 1

はい、しかし、なぜコードブロックに含めるのですか?

「いいね!」 2

gettextからの抜粋、ヘブライ語/アラビア語のネイティブ文字列、そのようなケースがあります。

「いいね!」 2

ここでの例外的なケースには、回避策(スクリーンショット、添付ファイルのアップロードなど)があり、特殊文字が存在することも非常に明確です。

https://trojansource.codes/ のリスクは、極端な例外的なケースにおける軽微な混乱のリスクよりも高いです。

「いいね!」 3

しかし、私の提案では、一部のキューで文が壊れてしまうため、RLMとLRMを<RLM>または<LRM>に置き換えると、ユーザーは追加の文字があったこと、そしてそれらが削除されたことを認識できます。しかし、エクスペリエンスが損なわれる可能性があり、必要に応じて手動で元に戻すオプションがあることを伝えることができます。文字を完全に削除すると、情報に基づいた意思決定の余地がなくなります。

また、言及されたように、トロイの木馬コードを防ぐこともできます。なぜなら、ユーザーはインジケーターを使用して悪意のあるコードを見ることができるからです。

Pootleからスクリーンショットを取得しようとします。過去数年間、その生の文字列オプションを見た記憶がありません。LibreOfficeのローカライゼーションの修正を開始したときに非常に役立ちました。

「いいね!」 2

フォローしていません。置き換えるのであって、削除するのではありません。上記の例を参照してください。

「いいね!」 3

Unicodeエンティティの代わりに名前を使用する方が良いのではないでしょうか?

「いいね!」 1

もし現場で繰り返し混乱が報告された場合は、微調整することができます。

「いいね!」 3

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.