YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Japanese subtitles

← Escaping Templates - Web Development

Get Embed Code
2 Languages

Showing Revision 2 created 01/28/2017 by 政裕 大窪.

  1. 修正する方法を解説しましょう。
    jinjaならこれを簡単に解決できます。
  2. 2つ方法があるので簡単な方から先に説明します。
  3. jinjaにはパイプとフィルターという構文があります。
  4. jinjaには多くの機能が組み込まれており。
  5. その一つがエスケープです。
  6. 例えば "item | escape" と書きます。
  7. これでエスケープができます。
  8. 実際にブラウザで確認してみましょう。
  9. ページをリロードすると、エスケープされています。
  10. ソースコードを見ると
  11. この通りjinjaのHTMLエスケープ機能を通過して
  12. < は &lt; に変換され
  13. > は &gt; に変換されています。
  14. 前にやったエスケープのレッスンと同様の事が行われています。
  15. h1タグも同じくエスケープされています。
  16. しかしこれはテンプレート言語の種類に関わらず、私のオススメの方法ではありません。
  17. 潜在的にエラーを発生させる可能性が高いからです。
  18. ここにエスケープ用のコードを入れ忘れたら、セキュリティホールが生まれます。
  19. この問題を解決する方法があります。
  20. jinjaの初期化を行うコードで autoescape=True と書きます。
  21. こうするとjinjaは全ての変数置換について自動でエスケープを行います。
  22. では動作に影響がないかブラウザに戻り確かめましょう。
  23. ページをリロードします。
    見た目は変わりませんがリロードしました。
  24. ソースを確認しても変化はありません。
  25. このように正しくエスケープされています。
  26. 私がこの方法を推奨する理由はミスを防止できるからです。
  27. このように全部エスケープして表示してしまえば
  28. ユーザのインプットにどう対処すべきか簡単にわかります。
  29. そうでなければWEBサイトを操作しようとするハッカーの試みに
  30. 気づくのが難しいか全く気づかないでしょう。
  31. ですから私は、テンプレート言語を利用するときはいつも
  32. この autoescape=True に相当するものを探します。
  33. そしてたいていの場合、同じような機能が見つかります。
  34. では逆にHTMLを解釈させたい場合はどうしたら良いのでしょう?
  35. そんな場合に使うフィルターがあります。safeです。
  36. HTMLが安全だと知っている場合に限り、エスケープを取り消します。
  37. これがオススメの方法です。
  38. デフォルトではエスケープをしておいて、意図的・部分的にエスケープを解除するのです。
  39. このコードを保存して
  40. ブラウザをリロードしましょう。
  41. エスケープが取り消されています。
  42. しかし、少なくともこれは目的を持った意図した動作です。
  43. 出力のサニタイズをチェックしたいときなどに使えるでしょう。
  44. 例えばコメントページを作っていて
  45. 全てではないものの、幾らかのHTMLを許可したい場合です。
  46. 幾らかのHTMLを許可してから、このフィルターを通すのです。
  47. safeフィルターについてはこれくらいで良いでしょう。
  48. どのみちショッピングリストアプリのユーザに
    HTMLは入力させないからです。