クロスサイトスクリプティングを防止する


8

セキュリティ原則の1つは、クライアントからサーバーに渡される文字列と変数をサニタイズすることです。プレーンPHPには、XSS(クロスサイトスクリプティング)の脆弱性を防ぐための関数がいくつかあります。

XSS攻撃を防ぐためのDrupal 8戦略とは何ですか?クライアントデータポストをクリーンアップして、XSS攻撃からサイトを保護するにはどうすればよいですか?

Drupal 7はfilter_xss()XSSの脆弱性を防ぐ必要があることを覚えていますが、XSSの脆弱性に対するDrupal 8の戦略は何ですか?


また、XSS保護の追加レイヤーとして、サイトのContent-Security-Policyヘッダーを定義することも検討してください(drupal.org/project/csp)。残念ながら、Drupal 8はCKEditor 4を使用しているため、インラインスクリプトを完全にブロックすることはできませんが、CSP仕様への最近の更新により、ブラウザーで採用されたインラインスクリプトを少なくとも絞り込むことができます。
19

回答:


10

クロスサイトスクリプティング(XSS)攻撃を回避するための出力のサニタイズ

Twigテンプレートを使用するTwigテーマエンジンは、デフォルトですべてを自動エスケープするようになりました。つまり、Twigテンプレートから印刷されたすべての文字列(たとえば、の間のもの{{ }}、フィルターが使用されていない場合、自動的にサニタイズされます。

Drupalで使用可能なTwigフィルターについては、フィルター-Twigテンプレートの変数の変更を参照してください。

Twigの自動エスケープを利用するには(そして安全なマークアップがエスケープされないようにするため)、理想的にはすべてのHTMLがTwigテンプレートから出力される必要があります。

API関数安全な翻訳可能な文字列を作成するには、t()および\Drupal::translation()->formatPlural() with @または%プレースホルダーを使用します。詳細について は、Drupal 8のコードテキスト変換APIを参照してください。

t()、Html :: escape()、Xss :: filter()、またはXss :: filterAdmin()によってサニタイズされた文字列は、Rendererを介してレンダー配列から作成されたマークアップ文字列と同様に、自動的に安全とマークされます。

テキストをサニタイズすることもできますが、関連付けられたテキスト形式のテキスト領域などのコンテキストを除いて、テーマまたはモジュールでcheck_markupを使用することはほとんど正しくありません。

出典:Drupal 8: Rade、Shyamala、Robert Castelo、およびPere Orgaによる安全なコードの記述


1

Twigテンプレートは、アプリケーションの出力をサニタイズしませんでした。ページが読み込まれたときに、コメントフィールドに入力され、保存されたスクリプト文字列またはXSS攻撃が実行されました。代わりに、の各文字列入力フィールドをサニタイズすることで問題を解決しましたhook_ENTITY_TYPE_load

 if(isset($entity->$fieldName)) {  
        $value = $entity->get($fieldName)->value;  
        $value =  htmlspecialchars($value);  
        $entity->set($fieldName, $value);  
 }  

0

Drupalは通常、入力ではなく出力でフィルタリングするアプローチを採用しています。

個人の入力をフィールドシステムの一部ではないものとして受け入れるモジュールは、(特権のある管理者ユーザーからでも)出力時にフィルタリングする必要があります。通常、出力はレンダー配列です。したがって、これを行う簡単な方法は、レンダリング時に許可されるタグを制限することです。タクソノミーモジュールの用語ラベルの出力から例をとるには:

use Drupal\Component\Utility\Xss;

...

  public function termTitle(TermInterface $taxonomy_term) {
    return [
      '#markup' => $taxonomy_term->getName(),
      '#allowed_tags' => Xss::getHtmlTagList(),
    ];
  }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.