OWASP tiene un gran conjunto de recomendaciones para tratar con CSRF:
enlace
Usted puede usar solo un Verificador de referencia y origen para la protección CSRF sin ninguna otra medida, si en el caso raro de que no reciba ninguna cabecera, simplemente bloquee la solicitud. Una vez fue común que los usuarios falsificaran o deshabilitaran el envío de encabezados de Referer por razones de privacidad, y es posible que los navegadores más antiguos no envíen el encabezado de Origin. Probablemente esto no importa en 2017, pero depende de sus necesidades.
Debe poder extraer la información relevante del origen (por ejemplo, el nombre de host) de cualquiera de los encabezados (que puede incluir un encabezado del Referente completo) y compararla con su origen objetivo de manera sólida.
Creo que una cookie de envío doble (por ejemplo, un token y una cookie generados aleatoriamente cada vez) puede ser más sencilla de implementar.