Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

テキストメール用の Escaper を実装 #5077

Merged
merged 4 commits into from
Jul 6, 2021

Conversation

nanasess
Copy link
Contributor

@nanasess nanasess commented Jun 25, 2021

概要(Overview・Refs Issue)

方針(Policy)

  • Twig では独自にエスケープ処理を実装できるため、テキストメール用の Escaper を実装する
  • テキストメールの見た目や、 URL の文字がエスケープ処理によって無効化しないよう配慮する
    • <, > を全角文字に置換することで XSS を防止する
    • {% autoescape 'safe_textmail' %}{% endautoescape %} として使用可能

実装に関する補足(Appendix)

  1. src/Eccube/Resource/template/default/Mail/shipping_notify.html.twig を削除する
  2. shipping_notify.twig の {% autoescape false %}{% endautoescape %} を削除する
  3. 受注一覧ページのメール送信から、以下のような内容の出荷メールを送信すると、
    石 九部 様
    
    お客さまがご注文された以下の商品を発送いたしました。商品の到着まで、今しばらくお待ちください。
    
    
    お問い合わせ:
    "
    &
    '
    <
    >
    https://www.google.com/search?q=xss&oq=xss&aqs=chrome..69i57j0l5j69i61l2.2954j1j7&sourceid=chrome&ie=UTF-8
     ...snip
    
  4. 以下のように特殊文字がエスケープされてしまう。URLも無効化されてしまう。
     石 九部 様
     
     お客さまがご注文された以下の商品を発送いたしました。商品の到着まで、今しばらくお待ちください。
     
     
     お問い合わせ:
     &quot;
     &amp;
     &#039;
     &lt;
     &gt;
     https://www.google.com/search?q=xss&amp;oq=xss&amp;aqs=chrome..69i57j0l5j69i61l2.2954j1j7&amp;sourceid=chrome&amp;ie=UTF-8
      ...snip
    

この Escaper を使用することで、<, > のみ全角文字に置換することで、極力メールの見た目を損なうことなく、安全にテキストメールを送信することができる

```
石 九部 様

お客さまがご注文された以下の商品を発送いたしました。商品の到着まで、今しばらくお待ちください。


お問い合わせ:
"
&
'
<
>
https://www.google.com/search?q=xss&oq=xss&aqs=chrome..69i57j0l5j69i61l2.2954j1j7&sourceid=chrome&ie=UTF-8
 ...snip
 ```

テスト(Test)

ユニットテストを追加

相談(Discussion)

エスケープ方法は妙案浮ばなかったので、とりあえず <, > を全角文字に置換してます。
もっと良いエスケープ方法がありましたらご意見ください

マイナーバージョン互換性保持のための制限事項チェックリスト

  • 既存機能の仕様変更
  • フックポイントの呼び出しタイミングの変更
  • フックポイントのパラメータの削除・データ型の変更
  • twigファイルに渡しているパラメータの削除・データ型の変更
  • Serviceクラスの公開関数の、引数の削除・データ型の変更
  • 入出力ファイル(CSVなど)のフォーマット変更

レビュワー確認項目

  • 動作確認
  • コードレビュー
  • E2E/Unit テスト確認(テストの追加・変更が必要かどうか)
  • 互換性が保持されているか
  • セキュリティ上の問題がないか

nanasess added 3 commits June 25, 2021 17:04
- htmlspecialchars() を使用すると、テキストメールの見た目が損なわれた、URLが無効化されてしまったりするため、テキストメール用の Escaper を実装する
- `<`, `>` を全角文字に置換することで XSS を防止する
- `{% autoescape 'safe_textmail' %}{% endautoescape %}` として使用可能
@nanasess nanasess marked this pull request as ready for review June 30, 2021 04:28
@nanasess nanasess changed the title [WIP] テキストメール用の Escaper を実装 テキストメール用の Escaper を実装 Jun 30, 2021
@nanasess
Copy link
Contributor Author

ユニットテストを追加し、 WIP はずしました

@chihiro-adachi
Copy link
Contributor

@nanasess
仕様、実装ともに問題ないかと思います。

テストが落ちているのご確認おねがいできますでしょうか。

@nanasess nanasess force-pushed the improve-safe_textmail branch from 8bf8ac7 to b1327a7 Compare July 5, 2021 09:20
@nanasess
Copy link
Contributor Author

nanasess commented Jul 5, 2021

@chihiro-adachi
#5072testReadCsvFileWithTrailingBlankLines のテスト以外は通りました

@chihiro-adachi
Copy link
Contributor

@nanasess

#5072 の testReadCsvFileWithTrailingBlankLines のテスト以外は通りました

4.1ブランチではテスト通ってるようなので、4.1-coreブランチではいったん気にしなくて大丈夫ですか?

@nanasess
Copy link
Contributor Author

nanasess commented Jul 6, 2021

@chihiro-adachi 本件とは関係ない箇所ですので一旦は問題ないかなと思います

@chihiro-adachi chihiro-adachi added this to the 4.1 milestone Jul 6, 2021
@chihiro-adachi chihiro-adachi added the enhancement 機能追加 label Jul 6, 2021
@chihiro-adachi chihiro-adachi merged commit cece186 into EC-CUBE:4.1-core Jul 6, 2021
@chihiro-adachi
Copy link
Contributor

@nanasess
ありがとうございます。マージしました。

okazy added a commit that referenced this pull request Jul 7, 2021
テキストメール用の Escaper を実装 #5077 を4.1ブランチへ反映
@nanasess nanasess deleted the improve-safe_textmail branch October 3, 2022 07:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement 機能追加
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants