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

XSS 対応 #1101

Merged
merged 20 commits into from
Jul 29, 2024
Merged

XSS 対応 #1101

merged 20 commits into from
Jul 29, 2024

Conversation

drill-lancer
Copy link
Member

@drill-lancer drill-lancer commented Jul 25, 2024

チケットへのリンク / 変更の理由(元のissueがあればリンクを貼り付ければOK)

#1100

どういう変更をしたか?

  • ウィジェット
  • CTA
  • カスタム投稿タイプマネージャー

上記に潜んでいた XSS を潰しました

P.S.
メイン設定については潰れているようでした。

実装者はレビュワーに回す前に以下の事を確認してチェックをつけてください。

ソースコードについて

  • 複数の意図の変更 ( 機能の不具合修正 + 別の機能追加など ) を含んでいないか?
  • 関数名 / 変数名 / クラス名 / 保存値名 はそれだけで内容が想像できるものになっているか?紛らわしい命名になっていないか?
  • 関数名 / 変数名 / クラス名 / 保存値名 は既存のコードの命名規則に沿ったものになっているか?

デザイン・UI

  • 初見のユーザーが予備知識無しで使っても使いやすいようになっているか?
  • 情報意味を考慮した意味グルーピング・余白になっているか?
  • アラートの表示など追加した場合は他の同様の表示と同じデザインになっているか?

プログラムの変更の場合

テストを書かないのは普通ではありません。書けるテストは極力書くようにしてください。
書いていない場合は書かない理由を記載してください。

  • 書けそうなテストは書いたか?
  • 表示要素が仕様通りに表示されない不具合の修正ではない or 表示要素に関する不具合修正の場合テストは書いたか?

その他

  • readme.txt に変更内容は書いたか?
  • Files changed (変更ファイル)の内容は目視でちゃんと確認したか?
  • このチェック項目を機械的にチェックするのではなく本当にちゃんと確認をしたか?
  • レビュワーが確認しないでリリースしてしまっても問題ないレベルまでちゃんと作りこみ・確認をしたか?

変更内容について何を確認したか、どういう方法で確認をしたかなど

上記の input[type="text"] に "><script>alert(0)</script> を入れてアラートが出ないのを確認しました。

確認URL

ローカル環境

レビュワーの確認方法・確認する内容など

  • 上記の input[type="text"] に "><script>alert(0)</script> を入れてアラートが出ないこと。
  • それぞれのエスケープ手段が適切か

上記の確認をお願いします。

レビュワーに回す前の確認事項

  • このテンプレートのチェック項目をちゃんと確認してチェックしたか?

レビュワー向け

確認して変更が反映されていない場合の確認事項

  • プルしたか?
  • ビルドしたか?
  • ビルドしたディレクトリは正しいか(別の開発環境のディレクトリを見ていないか)?
  • npm install したか?
  • composer install したか?

@drill-lancer drill-lancer self-assigned this Jul 25, 2024
@drill-lancer drill-lancer linked an issue Jul 25, 2024 that may be closed by this pull request
@drill-lancer drill-lancer marked this pull request as ready for review July 25, 2024 03:56
Copy link
Contributor

@mthaichi mthaichi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@drill-lancer ご対応ありがとうございます!
とりあえず1点気づいたことをコメントします。

@@ -241,16 +241,16 @@ public function options_page() {
}

public function option_sanitaize( $option ) {
$option['contact_txt'] = stripslashes( $option['contact_txt'] );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@drill-lancer この部分でstripslashesを削除しているので、例えば Vektor's といった文字列を保存しようとすると、バックスラッシュがテキストエリアに残り、それに気づかず保存すると、倍々にバックスラッシュが増えてしまいます。

ご存知のことかもしれませんが、
WordPressは $_POSTに対して、add_magic_quotes()をかけます。$_POSTには Vektor\'s という値で入ってきます。ですから、これに対して、wp_unslashやstripslashesで戻す処理は必要かと。

Copy link
Contributor

@mthaichi mthaichi Jul 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CTA関連でも同様の修正がありますが、こちらはupdate_metadata() 内で、wp_unslashが自動的にかかるのでバックスラッシュを外す処理は不要です。これに関してはstripslashesを通すのは無意味となるので、外して正解だと思います。

@kurudrive kurudrive marked this pull request as draft July 26, 2024 05:14
@kurudrive kurudrive changed the title 【確認待ち】XSS 潰し 【再調整待ち】XSS 潰し Jul 26, 2024
@drill-lancer
Copy link
Member Author

@mthaichi
stripslashes はエスケープには関係がないと思ったので削除しました。
そういう意味があったというのを知りませんでした。勉強になりました。
というわけで、stripslashes が必要そうなところにはそれを施してみました。

@drill-lancer drill-lancer changed the title 【再調整待ち】XSS 潰し 【確認待ち】XSS 潰し Jul 29, 2024
@drill-lancer drill-lancer marked this pull request as ready for review July 29, 2024 02:12
@drill-lancer drill-lancer requested a review from mthaichi July 29, 2024 02:12
@kurudrive kurudrive changed the title 【確認待ち】XSS 潰し 【確認中】XSS 潰し Jul 29, 2024
@@ -545,7 +552,7 @@ public static function render_cta_content( $id ) {
wp_reset_postdata();

// wp_kses_post でエスケープすると outerブロックが出力するstyle属性を無効化される.
return do_blocks( do_shortcode( $content ) );
return do_blocks( do_shortcode( wp_kses_post( $content ) ) );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@drill-lancer コメントに書いてある通り wp_kses_post でエスケープすると outerブロックが出力するstyle属性を無効化される ので、style 属性が消されないように wp_kses を作るなどして対応してください。

@drill-lancer
Copy link
Member Author

@kurudrive
ちょっと上にそれっぽい許可条件があったのでそれを元にエスケープしてみました。

@mthaichi
Copy link
Contributor

@mthaichi stripslashes はエスケープには関係がないと思ったので削除しました。 そういう意味があったというのを知りませんでした。勉強になりました。 というわけで、stripslashes が必要そうなところにはそれを施してみました。

@drill-lancer ありがとうございます!
適切に修正されていると思います。

@mthaichi
Copy link
Contributor

@drill-lancer ありがとうございます! 適切に修正されていると思います。

@kurudrive @drill-lancer あと、XSSとまではいかないので must ではないのですが、
たとえば、連絡先の「電話アイコン」は、HTMLは必要ないので、wp_kses_post ではなく、wp_strip_all_tagsを使うといいかなと思います。

「電話番号」については、太字にしたいとか色をつけたいというニーズがあるので、wp_kses_postで良いかもしれません。

余計なHTMLを許可しているのはあまり印象が良くないので、この機会に修正頂くと良いと思います。

面倒な修正、ありがとうございます!

@mthaichi
Copy link
Contributor

@kurudrive @drill-lancer "echo $" でプロジェクト全体に全文検索かけて、ひっかかった変数が、入力由来のものであればエスケープをかけるという感じで残りを潰していってよいと思います。

@drill-lancer
Copy link
Member Author

drill-lancer commented Jul 29, 2024

@mthaichi

連絡先の「電話アイコン」は、HTMLは必要ない

i タグで書くものと思って wp_kses_post にしています。

@mthaichi
Copy link
Contributor

mthaichi commented Jul 29, 2024

@mthaichi

連絡先の「電話アイコン」は、HTMLは必要ない

i タグで書くものと思って wp_kses_post にしています。

@drill-lancer なるほど、でもここは fas fa-phone-square とクラス名を書く感じではないでしょうか。
font awesomeで iタグをそのままコピペしても通るようにしてあるのであれば、最低限の wp_kses_postでよいと思いますが、としても、理想を言えば wp_ksesで iタグのみ通るようにすべきところだと思います。

長い目でみても、バリデーションやサニタイズを厳しめにしたほうがいいので、HTMLいれる必要がないフィールドは wp_strip_all_tags でHTML全削除したほうが良いと私は思います。ご面倒をおかけしますが(・人・)

@kurudrive
Copy link
Member

kurudrive commented Jul 29, 2024

@mthaichi @drill-lancer アイコンの部分はもともと クラス名入力だけだったものを後から i タグで入力してもらうように仕様変更しているケースもあるので、少なくとも i タグの許可は必要です(・w・

@mthaichi
Copy link
Contributor

@mthaichi @drill-lancer アイコンの部分はもともと クラス名入力だけだったものを後から i タグで入力してもらうように仕様変更しているケースもあるので、少なくとも i タグの許可は必要です(・w・

@kurudrive @drill-lancer なるほど、tel_iconだけですが直してみましたー。

@mthaichi
Copy link
Contributor

すみません。私このあと用事がございまして、@kurudriveさんが見てOK なら良いと思います。🙏

@kurudrive kurudrive changed the title 【確認中】XSS 潰し XSS 対応 Jul 29, 2024
@kurudrive kurudrive merged commit 850a496 into master Jul 29, 2024
3 checks passed
@kurudrive kurudrive deleted the fix/xss branch July 29, 2024 10:36
@kurudrive
Copy link
Member

@drill-lancer @mthaichi ありがとうございました!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

WordFence に上がっている脆弱性対応
3 participants