No creo que exista un riesgo para una vulnerabilidad de redireccionamiento abierta, ya que cualquier cosa después de ? se interpretará como parámetros de consulta y no como parte de la ruta. Pero debe cambiar su código de todos modos, ya que no se asegura de que el param esté realmente codificado en URL. Haga esto con urlencode() :
header('Location: ../page.php?param='.urlencode($param));
Sin embargo, si usa una versión de PHP anterior a 5.1.2, es vulnerable a la inyección de cabecera (consulte documentación ). Al enviar un param que incluye una nueva línea, un atacante podría establecer múltiples encabezados (o simplemente establecer el encabezado de ubicación nuevamente, sobrescribiendo el valor anterior). El uso de urlencode() corrige que dado que \n se codificaría como %0A .
Sin embargo, todo el constructo podría ser innecesario. Tal vez solo puedas verificar $_POST y $_GET para param en page.php ?