自動エスケープとsafeフィルター
XSSから保護し、安全だと確信できる場合だけ無効化します
「自動エスケープとsafeフィルター」はCoddyKit上の無料Flask Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはFlask Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Flask Academyコースには全4レッスンが含まれています。
生HTMLの危険性
ユーザーのテキストをそのままページに出力すると、悪意のある入力によってスクリプトを挿入される可能性があります。この攻撃をXSSといい、Flaskが防御します。
自動エスケープは有効になっている
Jinja2では、HTMLテンプレートの自動エスケープがデフォルトで有効です。危険な文字はブラウザーに届く前に無害化されます。
エスケープの動作
エスケープは、より小さい記号などの文字を安全なエンティティに変換します。そのため、ブラウザーはそれらを実際のマークアップではなくテキストとして表示します。
<b>hi</b> becomes <b>hi</b>テキストがテキストのまま表示される理由
タグがエスケープされるため、偽の太字タグのようなコメントもプレーンテキストとして表示されます。ページ上では文字どおりに表示され、実行されません。
HTMLを信頼できる場合
自分で生成した値など、HTMLとしてレンダリングしたい場合もあります。その場合はsafeフィルターでエスケープを無効にできます。
{{ trusted_html|safe }}safeの動作
safeフィルターは、この値がすでに信頼済みであるためエスケープしないようJinja2に伝えます。するとマークアップが実際のHTMLとしてレンダリングされます。
信頼できるデータにのみ使う
自分が管理しているコンテンツにだけsafeを使います。ユーザー入力をsafeにすると、自動エスケープで塞いでいたXSSの脆弱性が再び開いてしまいます。
Pythonで安全なHTMLとして指定する
ビューでMarkupを使い、信頼できるHTMLとして指定することもできます。Markup文字列はレンダリング時に自動的にエスケープを回避します。
from markupsafe import Markup
snippet = Markup('<b>Hi</b>')局所的にエスケープを無効にする
領域全体のエスケープを省略するには、falseに設定したautoescapeブロックで囲みます。この方法は、十分に注意して必要な場合だけ使ってください。
{% autoescape false %}{{ html }}{% endautoescape %}escapeフィルター
escapeフィルター、または短い別名のeを使って、エスケープを強制することもできます。ブロックで自動エスケープを無効にしている場合に便利です。
{{ value|e }}デフォルトで安全
重要なのは、Flaskが標準で安全な状態になっていることです。エスケープを意図的に緩める場合だけ無効にするため、誤って無効にすることなくユーザーを保護できます。
クイックチェック
テンプレートに信頼できないユーザー入力を表示します。その中のHTMLタグを自動エスケープはどう扱いますか?
まとめ
Flaskは出力を自動エスケープしてXSSを防ぎ、safeフィルターを使うと完全に信頼できるHTMLに限ってエスケープを無効にできることを学びました。安全な開発を続けましょう!🔒
AI チューターと学ぶ Python — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「自動エスケープとsafeフィルター」レッスンは無料ですか?
はい。「自動エスケープとsafeフィルター」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Flask Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Flask Academyコースには全4レッスンが含まれています。
「自動エスケープとsafeフィルター」で何を学びますか?
XSSから保護し、安全だと確信できる場合だけ無効化します ブラウザで直接実行するハンズオンコードでFlask Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Flask Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのFlask Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「自動エスケープとsafeフィルター」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このFlask Academyレッスンでコードを書いて実行できますか?
はい。すべてのFlask Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- render_templateとtemplatesフォルダー
- テンプレートにデータを渡す
- Jinja2のループと条件分岐
- 自動エスケープとsafeフィルター