La vedo grigia.
HTTP è un protocollo senza stato, ovvero ogni richiesta vive di vita propria e non è collegata, strutturalmente, alle precedenti o alle successive.

In sostanza, o mangi quella minestra o salti dalla finestra.
Peraltro, se la tua esigenza è di tipo statistica/commerciale, puoi usare tranquillamente HTTP_REFERER. La percentuale di dati in qualche modo falsati penso sia del tutto irrilevante.
Se invece è un problema di sicurezza o qualcosa del genere, per cui non puoi permetterti dati sbagliati, allora temo sia il caso di rivedere la strategia utilizzata. Non puoi affidarti al client in nessun modo.