diff --git a/file_entity.pages.inc b/file_entity.pages.inc
index f6776a9..63ccf02 100644
--- a/file_entity.pages.inc
+++ b/file_entity.pages.inc
@@ -39,6 +39,10 @@ function file_entity_download_page($file) {
   if (!is_file($file->uri)) {
     return MENU_NOT_FOUND;
   }
+  // Ensure there is a valid token to download this file.
+  if (!isset($_GET['token']) || !drupal_valid_token($_GET['token'], "file/$file->fid/download")) {
+    return MENU_ACCESS_DENIED;
+  }
 
   $headers = array(
     'Content-Type' => 'force-download',
diff --git a/views/views_handler_field_file_link_download.inc b/views/views_handler_field_file_link_download.inc
index cd2fe46..ff17182 100644
--- a/views/views_handler_field_file_link_download.inc
+++ b/views/views_handler_field_file_link_download.inc
@@ -23,7 +23,7 @@ class views_handler_field_file_link_download extends views_handler_field_file_li
 
     $this->options['alter']['make_link'] = TRUE;
     $this->options['alter']['path'] = "file/$file->fid/download";
-    $this->options['alter']['query'] = drupal_get_destination();
+    $this->options['alter']['query']['token'] = drupal_get_token($this->options['alter']['path']);
 
     $text = !empty($this->options['text']) ? $this->options['text'] : t('Download');
     return $text;
