私のモジュールには、訪問者が特定の情報を送信できる2つの小さなフォームがあります。
ログインしていないときに問題が発生し、フォームにCSRFトークンが追加されないため、匿名ユーザー/全員がCSRFをバイパスしています。この問題に関するドキュメントが見つかりません。CSRFトークンを取得できるように、誰かが私を正しい方向に向けることができますか?
すべてのフォームにCSRFが含まれていることが、私のセキュリティテストの要件です。
drupal_prepare_form()
を見ると、
トークンはセッションにバインドされており、匿名ユーザーに表示されるフォームはキャッシュされる可能性が高いため、トークンを割り当てることはできません。
これを続行したい場合は、デフォルトの検索フォームとコメントフォームですばやくテストすると、次のようになります。
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if (!isset($form['#token'])) {
$form['#token'] = $form_id;
$form['form_token'] = array(
'#id' => drupal_html_id('edit-' . $form_id . '-form-token'),
'#type' => 'token',
'#default_value' => drupal_get_token($form['#token']),
);
}
}
ただし、この道を進む場合は、ページキャッシュ(および使用する場合はリバースプロキシ)に注意してください。