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

広告アラートで意図したwp_ksesフィルタリングが適用されていなかったのを修正 #1121

Merged
merged 9 commits into from
Nov 5, 2024

Conversation

mtdkei
Copy link
Contributor

@mtdkei mtdkei commented Nov 1, 2024

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

広告アラートで意図したwp_ksesフィルタリングが適用されていなかったため、iframe等の不要なタグが通過する問題が発生していました。

どういう変更をしたか?

  • wp_ksesフィルタリングを適用し直し、許可リストに含まれないタグが通過しないよう修正
  • data-nosnippet属性がwp_ksesフィルタリングで失われないよう、divタグに属性を追加
  • insのstyleがwp_ksesフィルタリングで失われないよう、設定を追加
    →下二つは広告アラートに不要な変更でした。

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

ソースコードについて

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

デザイン・UI

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

→内部的な変更なのでスキップ。

プログラムの変更の場合

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

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

その他

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

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

  • 「ExUnit」→「広告アラート」→「カスタムアラートコンテント」に<iframe src="http://XXX.XX.XX.XXX:XXXX"></iframe>などのアラート機能に不要なHTMLタグが入った状態で保存した後、「カスタムアラートコンテント」から <iframe src="http://XXX.XX.XX.XX:XXXX"></iframe> が消えていることを確認しました。
  • divなど入力が許可されているHTMLタグの場合でも onmouseover="alert('XSS') などの要素が「カスタムアラートコンテント」から削除されることを確認しました。
  • 広告アラートが表示されているソース上でも保存後の「カスタムアラートコンテント」と同じ状態で出力されていることを確認しました。

以下をコピペして確認しました。

<iframe src="http://xxx.xx.xx.xxx:xxxx"></iframe>
<div onmouseover="alert('XSS')">Hover me!</div>
<img src="#" onerror="alert('XSS')" />
<a href="javascript:alert('XSS')">Click me!</a>
<input type="text" value="test" onfocus="alert('XSS')">
<div style="background-image: url(javascript:alert('XSS'))">Test</div>
<a href="javascript%3Aalert%28%27XSS%27%29">Encoded Link</a>
<img src="&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x27;&#x58;&#x53;&#x53;&#x27;&#x29;">
<iframe src="javascript:alert('XSS')"></iframe>
<object data="javascript:alert('XSS')"></object>
<!-- <script>alert('XSS')</script> -->
<script src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXX" crossorigin="anonymous"></script><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-XXXXX" data-ad-slot="1234567890" data-ad-format="auto" data-full-width-responsive="true"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
<p class="test" style="color:red;" id="test" onclick="alert('XSS')">Test paragraph</p>

また、上記の変更により、本来のアラートテキストやアラートコンテントの機能を阻害していないことを確認しました。
アラートコンテントは以下をコピペして、フロントエンド上の表示がパターン上と同じ見た目のままになっていることを確認しました。
https://patterns.vektor-inc.co.jp/vk-patterns/pr-alert/

確認URL

( どこかのデモサイトかテストサーバーにデプロイ済みなどで確認できる場合はそのURL )

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

実装者と同じ確認を行ってください。
広告アラート機能については以下をご参照ください。
https://ex-unit.nagoya/ja/about/pr-alert

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

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

レビュワー向け

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

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

@mtdkei mtdkei changed the title 広告アラートで意図したwp_ksesフィルタリングが適用されていなかったのを修正 【確認待ち】広告アラートで意図したwp_ksesフィルタリングが適用されていなかったのを修正 Nov 1, 2024
@mtdkei mtdkei marked this pull request as ready for review November 1, 2024 06:51
Comment on lines 12 to 15
global $allowedposttags;
if ( isset( $allowedposttags['ins'] ) ) {
$allowedposttags['ins']['style'] = array();
}
Copy link
Member

Choose a reason for hiding this comment

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

@mtdkei これってどこかで使ってます(・w・?

Comment on lines 24 to 33
/**
* Allow data-nosnippet attribute on div tags for kses filtering.
*/
public static function modify_wp_kses_allowed_html( $allowed_tags, $context ) {
// 必要な属性やタグを追加
if ( 'post' === $context ) {
$allowed_tags['div']['data-nosnippet'] = true;
}
return $allowed_tags;
}
Copy link
Member

Choose a reason for hiding this comment

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

@mtdkei これも使ってなくない(・w・?

@mtdkei
Copy link
Contributor Author

mtdkei commented Nov 5, 2024

@kurudrive
すみません、また広告の挿入とアラートと混同してました。
修正します。

@mtdkei
Copy link
Contributor Author

mtdkei commented Nov 5, 2024

@kurudrive
ただいま不必要な部分を削除しました。
こちらの勝手な思い込みで、広告アラート=ここで広告出せそうな感じに頭の中で変換しちゃってまして、何回も不要な設定をしてしまいました。(広告の挿入が直前にあるので一旦考えればわかるのですが。。)
お手数をおかけします。

@kurudrive
Copy link
Member

あ...まてよ...僕も広告の挿入と勘違いしてましたw

@mtdkei
Copy link
Contributor Author

mtdkei commented Nov 5, 2024

@kurudrive
あ、同じように思っていたのですね…!ここら辺の文言も別のissueで変えた方がいい気がしてきましたので一旦出してみます。

@kurudrive kurudrive changed the title 【確認待ち】広告アラートで意図したwp_ksesフィルタリングが適用されていなかったのを修正 広告アラートで意図したwp_ksesフィルタリングが適用されていなかったのを修正 Nov 5, 2024
@kurudrive kurudrive merged commit a1c1aa0 into master Nov 5, 2024
3 checks passed
@kurudrive kurudrive deleted the fix/promotion-alert/xss-protection branch November 5, 2024 06:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants