1

ExpressionEngine で SafeCracker を使用してフォームを作成しました。textarea フィールドの 1 つは、ユーザーが HTML コードを送信できるようにするために使用されます。

提供されるコードの種類の例を次に示します。

<div style="left: 385px; top: 137px;" class="aaa"></div>.

フォームが送信され、エントリがデータベースに保存されると、SafeCracker はインライン CSS スタイルを削除します。実際にデータベースに保存された結果は次のとおりです。

<div class="aaa"></div>.

ご覧のとおり、インライン CSS スタイルは削除されていますが、残りの HTML は維持されています。

ユーザーが HTML コードを送信できるようにし、SafeCracker がインライン CSS スタイルを取り除かないようにしたいと考えています。どうすればこれを達成できますか?

4

1 に答える 1

3

SafeCracker は組み込みの ExpressionEngine XSS Sanitization Methodを使用して、クロス サイト スクリプティング (XSS) および SQL インジェクションの脆弱性からユーザーが送信した入力を消去します。

フロントサイドのユーザー入力は$this->EE->security->xss_clean()、データベースに挿入される前、または画面に出力される前に、 を使用してサニタイズされます。

ありがたいことに、EllisLab のエンジニアは、SafeCracker で使用されるfieldtypesfield_idsを「ホワイトリストに登録」し、XSS フィルタリングから除外する、文書化されていない秘密の方法を提供してくれました。

SafeCrackerが特定のフィールドからすべての HTML を削除しないようにするには、実行している ExpressionEngine のバージョンに応じて、次のファイルを開きます

EE 2.1.3 以前(サードパーティのアドオンとしてインストールされた SafeCracker) /system/expressionengine/third_party/safecracker/libraries/safecracker_lib.php


EE 2.2.0 以降(ファーストパーティ モジュールとしてインストールされた SafeCracker) /system/expressionengine/modules/safecracker/libraries/safecracker_lib.php

注: ExpressionEngine 2.2.0 には SafeCracker がファースト パーティ モジュールとしてバンドルされているため、インストール場所は、実行しているバージョンまたはアップグレードしたバージョンによって異なります。

行 2371 (EE 2.1.3 の場合)または行2516 (EE 2.2 の場合)まで下にスクロールし、次を探します。

$this->skip_xss_fieldtypes = array();
$this->skip_xss_field_ids = array();

ここから楽しみが始まります。フィールドを「ホワイトリスト」に登録して XSS フィルターを適用しないようにするには、どちらかの配列にfieldtypeまたはfield_idを追加するだけです。

次に例を示します。

$this->skip_xss_fieldtypes = array(
    // This is the fieldtype as specified in the Control Panel
    // Channel Fields, not what you use in your SafeCracker template
    'textarea'
);
$this->skip_xss_field_ids = array(
    // This is the field_id from the exp_channel_data MySQL Table
    'field_id_1'
);

特定のタイプのフィールドタイプ (textarea 、input など) を指定するか、より明確にしたい場合はfield_idを指定できます。前者の方法はより一般的ですが、後者の方法は絶対的であり、カスタム フィールドがそのタイプを変更した場合により柔軟です。

これらの変更により、XSS サニタイズ メソッドから除外したフィールドにはフィルタリングが適用されなくなり、任意の HTML をデータベースに送信できるようになります。

ExpressionEngine をアップグレードするとこのファイルが上書きされる可能性があるため、ファイルのアクセス許可を変更するか、バックアップを手元に置いておくことをお勧めします。

クロス サイト スクリプティングは、自分のサイトが攻撃ベクトルのソースになることを決して望まないため、非常に真剣に受け止める必要があります。常に注意を怠ってください。

于 2011-06-24T03:19:18.420 に答える