PHP初級者です。
WordPressの統合的な問い合わせフォーム用プラグインであるContact Form 7に
2020年12月に適用された脆弱性対策により、
添付ファイル名に日本語などのマルチバイト文字が含まれる場合、
送信時にファイル名が変換されてしまいます。
例:
元ファイル名 | ほげほげ.pdf |
WPCF7プラグイン内のpreg_replace後 | |
受信時 | aaaa.pdf |
上記のコミットでは脆弱性への対策として、制御文字、セパレータおよび特殊文字を置換するよう下記のコードが追加されたようです。
$filename = preg_replace( '/[\pC\pZ]+/i', '', $filename );
preg_replaceの仕様がよくわかっていないのですが、置換対象に\pC
を指定した場合、
マルチバイト文字内の該当コードも置換してしまい、上記の表のような文字化けが発生するのでしょうか?
この文字化けへの対策のために、\pC
のうち\p{Cc}
に該当するものだけを直接指定してやればどうかと考え、
下記のコードへ変更したところ、文字化けは発生しなくなりました。
$filename = preg_replace( '/[\x00-\x1F\x7F\pZ]+/i', '', $filename );
こちらのコードにセキュリティ上のリスクはございますでしょうか?
文字プロパティについてはこちらのページを参考にしました
PHP: Unicode 文字プロパティ - Manual
PHP有識者の皆様、ご教示いただければ大変ありがたく思います。
何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。