Emacsでは電子メールやWebサイトのような多くの外部ソースを表示することができます。アタッカー(攻撃者)は難読化したURLや電子メールアドレスを使い、それらのテキストを読むユーザーを混乱させて、意図していないウェブページに誘導したり、誤ったアドレスにメールを送信するようユーザーを欺くのです。
これには通常だとASCII文字と似た外観をもつスクリプトの文字(homographs、すなわち綴りは同じでも意味の違う文字)が必要ですが、bdo(bidirectional override: 双方向オーバーライド)や、何かを示すHTMLの背後に別のどこかを指し示すURLを仕込むといった別のテクニックも存在します。
これら不審なテキスト文字列(suspicious text strings)の識別を助けるために、Emacsはテキストにたいしていくつかのチェックを行うライブラリーを提供します(利用可能なチェックの背景となる根拠に関する詳細についてはUTS #39: Unicode Security Mechanismsを参照)。疑わしい恐れのあるデータを提供するパッケージは、表示に際して不審なテキストにフラグを立てるためにこんなライブラリーを使う必要があります。
この関数はパッケージが使用すべき高レベルのインターフェイス関数である。チェックの無効化をユーザーに許すユーザーオプションtextsec-check
を考慮する。
この関数はtypeのオブジェクトとしてobject(データのタイプはtypeに依存)を評価した際に疑わしいかどうかをチェックする。利用できるタイプおよび対応するobjectのデータタイプは以下のとおり:
domain
不審なドメイン(例: ‘www.gnu.org’)かどうかをチェック。objectはドメイン名(文字列)。
url
不審なURL(例: ‘http://gnu.org/foo/bar’)かどうかをチェック。objectはチェックするURL(文字列)。
link
不審なHTMLリンク(例: ‘<a
href='http://gnu.org'>fsf.org</a>’)かどうかをチェック。この場合にはobjectはcar
がURL文字列、cdr
がリンクテキストであるようなcons
セルであること。リンクテキストにドメイン名が含まれていて、それがURLと異なるドメイン名を指す場合には不審なリンクとみなされる。
email-address
不審な電子メールアドレス(例: ‘foo@example.org’)かどうかをチェック。objectは文字列であること。
local-address
電子メールアドレスのローカル部分(‘@’記号の前の部分が疑わしいかどうかをチェック。objectは文字列であること。
name
名前(電子メールアドレスのヘッダーに使用される)が疑わしいかどうかをチェック。objectは文字列であること。
email-address-header
RFC2822に完全準拠した電子メールアドレス(例: ‘=?utf-8?Q?=C3=81?= <foo@example.com>’)が疑わしいかどうかをチェック。objectは文字列であること。
この関数はobjectが疑わしい場合には、なぜそれが疑わしいかを説明する文字列をリターンする。objectに不審な点がなければ、この関数はnil
をリターンする。
テキストが疑わしい場合には、アプリケーションはtextsec-suspicious
フェイスで疑わしいテキストファイルをマークするとともに、textsec-suspicious-p
がリターンした説明を、何らかの手段(たとえばツールチップなど)でユーザーが利用できるようにする必要があります。疑わしい文字列にもとづいて何らかのアクション(たとえば疑わしい電子メールアドレスへのメール送信)を実行する前に、アプリケーションがユーザーに確認を求める場合もあります。