web-dev-qa-db-ja.com

Wp_handle_uploadでtest_formを無効にすることはセキュリティ上の問題ですか?

投稿用またはメディアライブラリへのファイルのアップロード時のデフォルトの動作を変更するプラグインを書いています。私はwp_handle_upload()で$ unique_filename_callbackをカスタム設定して$ overrideを設定しています。

それを追加すると、$ _POST ['action']が設定されていなかったため、wp_handle_upload()内で次のチェックが行われました。 (そうでなかった理由はよくわかりませんが、そうではありませんでした)。

if ( $test_form && (!isset( $_POST['action'] ) || ($_POST['action'] != $action ) ) )
    return call_user_func($upload_error_handler, $file, __( 'Invalid form submission.' ));

そのため、$ overrides ['test_form'] = falseに設定しましたが、現在は機能しています。それが潜在的なセキュリティ問題になる可能性があるかどうか、私は思っています。誰かがリモートの情報源か何かからフォームを投稿することを可能にするでしょうか?

独自のアップロードフィールドを作成しているときは無効にするのが普通のようですが、私は組み込みの投稿アップロードフォームを使用しているので、確認したいと思います。

1
Ian Dunn

私はセキュリティの懸念を言うつもりはありません - あなたはadmin内でこのプラグインを使用しているので(私はユーザーが認証された後、つまりadmin_initの後に)あなたのスクリプトにフォームを投稿しているJon Doe。

それがしていることは、追加の認証層です。それが本当に煮詰まるのは、フォームと一緒に「秘密」を送って、それから続行する前にその存在(そしてそれがマッチすること)をチェックすることだけです。

攻撃者にとっては、たとえば _ csrf _ または _ xss _ を使用して侵害するには、この秘密を知っている必要があります。

これが WordPressのnonces が機能する方法の本質です。実際、あなたはこれらのの代わりに test_formを使うほうがずっと得策です。彼らはexpireという秘密であるという点で一歩上がりました。そのため、攻撃者のためのウィンドウはさらに小さくなります。

Noncesに関するJaquithの記事 を調べてください。

0
TheDeadMedic