=== Shed Form ===

確認画面・スパム対策・送信履歴機能を備えた、日本語サイト向け WordPress お問い合わせフォームプラグインです。

== Changelog ==

= 1.6.8 =
* コード品質: ajax_save_field() の JSON フィールド（options/validation/extras）から wp_kses_post() を削除 — 角括弧を含む正規表現パターンが意図せず変換されるのを防止
* コード品質: nonce のサニタイズを sanitize_key() から sanitize_text_field() に変更（WPCS 準拠）
* 修正: 送信一覧ページの $_GET['status'] 直接参照をサニタイズ済み変数 $filter_status に変更

= 1.6.7 =
* セキュリティ: セッショントークンにフォーム ID を紐付け — 別フォームのトークンの流用を防止
* セキュリティ: セッショントークンを DB 書き込み後ではなく取得直後に削除 — 最大 1 時間のリプレイ攻撃ウィンドウを解消
* セキュリティ: テキストエリアの入力をサーバー側で 20,000 文字に制限 — 過大入力による DoS を防止
* セキュリティ: NG ワードのマッチングをフィールド単位でも実施 — 文字列を分割した回避リスクを低減
* セキュリティ: 拡張子を複数連ねたファイル名のアップロードを拒否（例: shell.php.jpg）
* 追加: ハニーポット隠しフィールド — 不可視フィールドに入力したボットをスパムスコアに関係なくブロック

= 1.6.6 =
* セキュリティ: 差出人の表示名を RFC 2047 MIME エンコード（mb_encode_mimeheader）で処理 — マルチバイト文字・特殊文字によるヘッダーインジェクションを防止
* セキュリティ: admin_email_to を is_email() で検証し CRLF 除去後に wp_mail() へ渡すよう変更
* セキュリティ: 再送メールの CC / BCC を DB から復元後に is_email() で再検証・CRLF 除去
* セキュリティ: ajax_download_file() のパスチェックに DIRECTORY_SEPARATOR の末尾を追加 — 隣接ディレクトリへのパス突破を防止
* セキュリティ: 管理者通知・自動返信の両メール件名でプラグイン層でも CRLF を除去
* パフォーマンス / セキュリティ: CSV エクスポートを 500 件単位のバッチストリーミング方式に変更 — 大量データでのメモリ消費を防止し、キーワードフィルタを SQL 層に移動

= 1.6.5 =
* 修正: CSV インジェクション対策 — =・+・-・@ で始まるフィールド値に CSV エクスポート時にシングルクォートを付与
* セキュリティ: {page_url} タグを $_SERVER['HTTP_HOST'] から home_url() に変更 — ホストヘッダーインジェクションを防止
* セキュリティ: ReDoS 検証をニアミス文字列でも実施。PCRE 制御動詞（*LIMIT_BACKTRACK 等）を保存時に拒否
* セキュリティ: 全正規表現ガードに pcre.recursion_limit を追加。try/finally で制限値を確実に復元
* セキュリティ: フィールドバリデーションの pattern ルールに ReDoS ガードを適用
* 修正: set_attachments() のパスチェックに DIRECTORY_SEPARATOR の末尾を追加 — shedform-uploads プレフィックス突破を防止
* セキュリティ: 管理画面ハンドラの残りの $_POST アクセスに wp_unslash() を追加

= 1.6.4 =
* セキュリティ: ReDoS 対策 — NG ワード正規表現を長さ 500 文字制限・pcre.backtrack_limit ガードで検証。無効なパターンはスキップし error_log に記録
* セキュリティ: X-Forwarded-For IP スプーフィング対策 — プロキシ経由時は最右端の IP を使用
* セキュリティ: メール添付ファイルのパストラバーサル防止 — set_attachments() で realpath() により shedform-uploads ベースディレクトリ外を拒否

= 1.6.3 =
* セキュリティ: アップロードサブディレクトリ（フォーム ID / 年 / 月）の作成時に .htaccess と index.php 保護を追加
* セキュリティ: Content-Disposition ヘッダーを RFC 5987（filename*=UTF-8）形式に変更 — 日本語ファイル名を正しく処理
* 修正: ALTER TABLE マイグレーションクエリに phpcs:ignore を追記（ユーザー入力なし・WPCS 準拠）

= 1.6.2 =
* 修正: XSS 対策 — {url_param} 動的タグを sanitize_text_field() のみから wp_kses() に変更
* 修正: XSS 対策 — {page_title} 動的タグを esc_html() でエスケープ
* セキュリティ: ファイルアップロード — finfo_file() 利用不可時は MIME チェックをスキップせずアップロードを拒否
* セキュリティ: ファイルアップロード — クライアントの Content-Type ではなく実際の MIME タイプを wp_handle_upload() に渡すよう変更
* セキュリティ: ファイルアップロード — $_FILES['size'] ではなくサーバー側で filesize() によりファイルサイズを計測
* セキュリティ: フォーム入力処理の全 $_POST アクセスに wp_unslash() を追加（WPCS 準拠）
* 修正: 同意フィールドのスクロールコンテンツで二重エスケープを解消（wp_kses_post() 内の冗長な esc_html() を削除）

= 1.6.1 =
* プラグインスラッグを shed-form に統一（WordPress.org 申請対応）

= 1.6.0 =
* WordPress.org ディレクトリ対応のため GPL-2.0+ ライセンスを追加
* wp_add_privacy_policy_content によるプライバシーポリシー提案を追加
* readme.txt にサードパーティサービス開示セクションを追加
* NG ワードクラウドの更新を自動 cron から手動ボタンへ変更
* SortableJS を CDN からローカルバンドルに変更
* 国際化対応: すべてのハードコードされた日本語文字列を __() でラップ
* .pot ファイルを生成し翻訳サポートを追加

= 1.5.4 =
* 修正: 管理者通知・自動返信メールの Reply-To プレースホルダー展開を修正
* 改善: フィールドキーのメールプレースホルダー処理を改善

= 1.5.3 =
* 追加: スクロールで有効化するコンセントフィールドタイプ
* 改善: 設定クラスの静的キャッシュでデータベースクエリを削減

= 1.5.1 =
* 修正: Turnstile 認証が完了するまで送信ボタンを無効化
* セキュリティ: PHP セッションを WordPress トランジェントとワンタイムトークンに置き換え
