diff --git a/core/modules/migrate/config/schema/migrate.data_types.schema.yml b/core/modules/migrate/config/schema/migrate.data_types.schema.yml
index edb628a..d887785 100644
--- a/core/modules/migrate/config/schema/migrate.data_types.schema.yml
+++ b/core/modules/migrate/config/schema/migrate.data_types.schema.yml
@@ -14,6 +14,10 @@ migrate_destination:
 migrate_source:
   type: migrate_plugin
   label: 'Source'
+  mapping:
+    constants:
+      type: ignore
+      label: 'Constants'
 
 # Base schema for migrate source plugins that extend
 # \Drupal\migrate\Plugin\migrate\source\SqlBase.
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d7_image_settings.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d7_image_settings.yml
new file mode 100755
index 0000000..67f82b0
--- /dev/null
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d7_image_settings.yml
@@ -0,0 +1,14 @@
+id: d7_image_settings
+migration_groups:
+  - Drupal 7
+source:
+  plugin: variable
+  variables:
+    - allow_insecure_derivatives
+    - suppress_itok_output
+process:
+  suppress_itok_output: suppress_itok_output
+  allow_insecure_derivatives: allow_insecure_derivatives
+destination:
+  plugin: config
+  config_name: image.settings
diff --git a/core/modules/migrate_drupal/src/Tests/Table/d7/Variable.php b/core/modules/migrate_drupal/src/Tests/Table/d7/Variable.php
index 4d8b85d..91328d8 100644
--- a/core/modules/migrate_drupal/src/Tests/Table/d7/Variable.php
+++ b/core/modules/migrate_drupal/src/Tests/Table/d7/Variable.php
@@ -49,6 +49,9 @@ public function load() {
       'name' => 'admin_theme',
       'value' => 's:5:"seven";',
     ))->values(array(
+      'name' => 'allow_insecure_derivatives',
+      'value' => 'b:1;',
+    ))->values(array(
       'name' => 'anonymous',
       'value' => 's:9:"Anonymous";',
     ))->values(array(
@@ -68,25 +71,25 @@ public function load() {
       'value' => 'i:0;',
     ))->values(array(
       'name' => 'cache_flush_cache_block',
-      'value' => 'i:0;',
+      'value' => 'i:1432653550;',
     ))->values(array(
       'name' => 'cache_flush_cache_field',
       'value' => 'i:0;',
     ))->values(array(
       'name' => 'cache_flush_cache_filter',
-      'value' => 'i:1421843462;',
+      'value' => 'i:0;',
     ))->values(array(
       'name' => 'cache_flush_cache_form',
-      'value' => 'i:1421843462;',
+      'value' => 'i:0;',
     ))->values(array(
       'name' => 'cache_flush_cache_image',
-      'value' => 'i:1421843462;',
+      'value' => 'i:0;',
     ))->values(array(
       'name' => 'cache_flush_cache_menu',
-      'value' => 'i:1421843462;',
+      'value' => 'i:0;',
     ))->values(array(
       'name' => 'cache_flush_cache_page',
-      'value' => 'i:0;',
+      'value' => 'i:1432653550;',
     ))->values(array(
       'name' => 'cache_flush_cache_path',
       'value' => 'i:0;',
@@ -128,7 +131,7 @@ public function load() {
       'value' => 's:43:"_vWFj-dRR2rNoHDwl7N__J9uZNutDcLz3w4tlPJzRAM";',
     ))->values(array(
       'name' => 'cron_last',
-      'value' => 'i:1421843462;',
+      'value' => 'i:1432653550;',
     ))->values(array(
       'name' => 'css_js_query_string',
       'value' => 's:6:"nihmmw";',
@@ -149,7 +152,7 @@ public function load() {
       'value' => 's:2:"10";',
     ))->values(array(
       'name' => 'drupal_css_cache_files',
-      'value' => 'a:5:{s:64:"823ba1006db72809515d2221cd02ec1075d7b49b0c07f49307b3a7930bfdd9e4";s:64:"public://css/css_ZqMP7mpzReokCjp7_3nWfyPem159-v68J-vfMGVas2w.css";s:64:"592db66916e1dd3416cbe95bcb34a5a68775eb0b7cf95e4c858671de35290cc9";s:64:"public://css/css_MDANkHLYJvjX2FyAHswY7Q5LhFulXrzWS9UlBgtPsJ0.css";s:64:"039ba69b25efd672767c5ee21b686a2cdaa496c5fb210693b88f81cc556db518";s:64:"public://css/css_oIa9U_KgNkG1oZtrBlUQXkQD27Q9DnOPjxdUoeW2M18.css";s:64:"fe9fca5a618e55058e69458a65b2edb4e958c16c13e1d1526c4dc0c0e782b483";s:64:"public://css/css_Bu-6cpTSVOo002uMmkBducgoPZC14OlHrT6_cQz6mqI.css";s:64:"ebb3f433ad4107b1ac31e9d7de0f9a5d399040e9f82b6364211dcfaadea158c0";s:64:"public://css/css_G0NpxSejThecBV_u5WJM_qLmdv5lUfPdHTwLKSBmcjU.css";}',
+      'value' => 'a:9:{s:64:"823ba1006db72809515d2221cd02ec1075d7b49b0c07f49307b3a7930bfdd9e4";s:64:"public://css/css_xE-rWrJf-fncB6ztZfd2huxqgxu4WO-qwma6Xer30m4.css";s:64:"592db66916e1dd3416cbe95bcb34a5a68775eb0b7cf95e4c858671de35290cc9";s:64:"public://css/css_LS9OUalDR9-d_lCAvF3yUWjNU6yF8ZBm84jEPRvoyuQ.css";s:64:"039ba69b25efd672767c5ee21b686a2cdaa496c5fb210693b88f81cc556db518";s:64:"public://css/css_ELXvY8pQ9Dhp7LiF1Gra7jv5X_cMGOmgGfJ6go69M0w.css";s:64:"fe9fca5a618e55058e69458a65b2edb4e958c16c13e1d1526c4dc0c0e782b483";s:64:"public://css/css_WWafHiT44xXp69Ucog34hgXKsZRScJzl3S17Xg7evtM.css";s:64:"ebb3f433ad4107b1ac31e9d7de0f9a5d399040e9f82b6364211dcfaadea158c0";s:64:"public://css/css_Nv0ct-zkzztuah_LbaPFF8ZkdSEk-LxBtTWMm9mN_F8.css";s:64:"568f3bca87830de88c7b44e71808ac7f33f4cdf273ed3bf3d2532bd48f084b06";s:64:"public://css/css_NRg0AX3iY_x0OX3_WzcWp90JnwurHRvZn6i75GL0rRI.css";s:64:"586e4d641f74d0fbdea2ecffe62294e983c5961df8d0128aab1c561505f6b35a";s:64:"public://css/css_2THG1eGiBIizsWFeexsNe1iDifJ00QRS9uSd03rY9co.css";s:64:"cb9f93e666a396bb3eb14c5fd16f7ebd1cdd0067733eb0a2ab1b294b6f14f76f";s:64:"public://css/css_1kF33EODTO5gDyEbdpAfYzMKbjG3ottD1s5np0BNI8U.css";s:64:"35337ea541d4968f58917d83eaa9e495d5a38bb0aaf23bc714650d3c71fc275a";s:64:"public://css/css_LJ87GFKz9ZFt2bWZ4pMV8e2o8w_790Mbwcd7C-RKri0.css";}',
     ))->values(array(
       'name' => 'drupal_http_request_fails',
       'value' => 'b:0;',
@@ -191,7 +194,7 @@ public function load() {
       'value' => 'i:1421694923;',
     ))->values(array(
       'name' => 'javascript_parsed',
-      'value' => 'a:8:{i:0;s:14:"misc/drupal.js";i:1;s:14:"misc/jquery.js";i:2;s:19:"misc/jquery.once.js";i:3;s:12:"misc/form.js";i:4;s:21:"misc/jquery.cookie.js";i:5;s:26:"modules/toolbar/toolbar.js";i:6;s:19:"misc/tableheader.js";i:7;s:16:"misc/collapse.js";}',
+      'value' => 'a:9:{i:0;s:14:"misc/drupal.js";i:1;s:14:"misc/jquery.js";i:2;s:19:"misc/jquery.once.js";i:3;s:12:"misc/form.js";i:4;s:21:"misc/jquery.cookie.js";i:5;s:26:"modules/toolbar/toolbar.js";i:6;s:19:"misc/tableheader.js";i:7;s:16:"misc/collapse.js";i:8;s:32:"modules/contextual/contextual.js";}',
     ))->values(array(
       'name' => 'language_content_type_test_content_type',
       'value' => 's:1:"0";',
@@ -329,7 +332,7 @@ public function load() {
       'value' => 'i:0;',
     ))->values(array(
       'name' => 'statistics_day_timestamp',
-      'value' => 'i:1421843462;',
+      'value' => 'i:1432653550;',
     ))->values(array(
       'name' => 'statistics_enable_access_log',
       'value' => 'i:1;',
@@ -337,11 +340,14 @@ public function load() {
       'name' => 'statistics_flush_accesslog_timer',
       'value' => 's:4:"3600";',
     ))->values(array(
+      'name' => 'suppress_itok_output',
+      'value' => 'b:1;',
+    ))->values(array(
       'name' => 'theme_default',
       'value' => 's:6:"bartik";',
     ))->values(array(
       'name' => 'update_last_check',
-      'value' => 'i:1421843491;',
+      'value' => 'i:1432653564;',
     ))->values(array(
       'name' => 'user_admin_role',
       'value' => 's:1:"3";',
@@ -352,6 +358,21 @@ public function load() {
       'name' => 'user_email_verification',
       'value' => 'i:1;',
     ))->values(array(
+      'name' => 'user_failed_login_identifier_uid_only',
+      'value' => 'b:1;',
+    ))->values(array(
+      'name' => 'user_failed_login_ip_limit',
+      'value' => 'i:30;',
+    ))->values(array(
+      'name' => 'user_failed_login_ip_window',
+      'value' => 'i:7200;',
+    ))->values(array(
+      'name' => 'user_failed_login_user_limit',
+      'value' => 'i:22;',
+    ))->values(array(
+      'name' => 'user_failed_login_user_window',
+      'value' => 'i:86400;',
+    ))->values(array(
       'name' => 'user_mail_cancel_confirm_body',
       'value' => "s:381:\"[user:name],\r\n\r\nA request to cancel your account has been made at [site:name].\r\n\r\nYou may now cancel your account on [site:url-brief] by clicking this link or copying and pasting it into your browser:\r\n\r\n[user:cancel-url]\r\n\r\nNOTE: The cancellation of your account is not reversible.\r\n\r\nThis link expires in one day and nothing will happen if it is not used.\r\n\r\n--  [site:name] team\";",
     ))->values(array(
@@ -439,4 +460,4 @@ public function load() {
   }
 
 }
-#05fbb0b522145f38cd9fe5545ad0a6e6
+#b71fcbfdd5b0dd9261a0aaf9c034cc52
diff --git a/core/modules/migrate_drupal/src/Tests/d7/MigrateImageSettingsTest.php b/core/modules/migrate_drupal/src/Tests/d7/MigrateImageSettingsTest.php
new file mode 100644
index 0000000..34a06e6
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Tests/d7/MigrateImageSettingsTest.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_drupal\Tests\d7\MigrateImageSettingsTest.
+ */
+
+namespace Drupal\migrate_drupal\Tests\d7;
+
+use Drupal\migrate\MigrateExecutable;
+use Drupal\migrate_drupal\Tests\MigrateDrupalTestBase;
+
+/**
+ * Migrates image settings configuration.
+ *
+ * @group migrate_drupal 7.x
+ * @dumpFile d7/Variable.php
+ * @migration d7_image_settings
+ */
+class MigrateImageSettingsTest extends MigrateDrupalTestBase {
+
+  /**
+   * The modules to be enabled during the test.
+   *
+   * @var array
+   */
+  static $modules = array('system', 'image');
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installConfig(['image']);
+
+    // Load database dumps to provide source data.
+    $dumps = array(
+      $this->getDumpDirectory() . '/d7/Variable.php',
+    );
+    $this->loadDumps($dumps);
+
+    // Migrate users.
+    $migration = entity_load('migration', 'd7_image_settings');
+    $executable = new MigrateExecutable($migration, $this);
+    $executable->import();
+  }
+
+  /**
+   * Tests the migration.
+   */
+  public function testMigration() {
+    $settings = \Drupal::config('image.settings')->get();
+    $this->assertIdentical(TRUE, $settings['allow_insecure_derivatives']);
+    $this->assertIdentical(TRUE, $settings['suppress_itok_output']);
+  }
+
+}
