Как защитить страницу?

На 100% запретить вы не сможете. Можно защититься от случайного входа (если случайно пользователь кликнул не на ту ссылку или перешел по ссылке из истории браузера). Но вы не сможете запретить пользователю "стучаться" на вашу форму. При помощи HTTP-клиента можно послать абсолютно любой запрос, и указать абсолютно любые заголовки (включая предложенный выше XMLHttpRequest).

Если вы хотите быть уверенным, что пользователь отправил данные именно из вашей формы - вам нужны дополнительные параметры в форме, например один или несколько

CSRF-токенов

.

В этом и смысл ошибки. Я предлагаю при отсутствии нужных параметров (которые приходят через ajax) просто показывать ошибку (или делать редирект на менее секретную страницу).