SendinBlue Subscribe Form And WP SMTP - Version 3.1.36

Version Description

  • Security fixes include cookies handling, user input data sanitization, and escaping HTML entities from the output.
  • Added missing font file for bootstrap 3.4.1
Download this release

Release Info

Developer gouravgupta24
Plugin Icon 128x128 SendinBlue Subscribe Form And WP SMTP
Version 3.1.36
Comparing to
See all releases

Code changes from version 3.1.35 to 3.1.36

inc/SendinblueApiClient.php CHANGED
@@ -14,7 +14,7 @@ class SendinblueApiClient
14
  const RESPONSE_CODE_CREATED = 201;
15
  const RESPONSE_CODE_ACCEPTED = 202;
16
  const RESPONSE_CODE_UNAUTHORIZED = 401;
17
- const PLUGIN_VERSION = '3.1.35';
18
  const USER_AGENT = 'sendinblue_plugins/wordpress';
19
 
20
  private $apiKey;
14
  const RESPONSE_CODE_CREATED = 201;
15
  const RESPONSE_CODE_ACCEPTED = 202;
16
  const RESPONSE_CODE_UNAUTHORIZED = 401;
17
+ const PLUGIN_VERSION = '3.1.36';
18
  const USER_AGENT = 'sendinblue_plugins/wordpress';
19
 
20
  private $apiKey;
inc/sendinblue.php CHANGED
@@ -1,163 +1,173 @@
1
  <?php
2
- class Sendinblue
 
 
 
 
 
 
3
  {
4
- public $api_key;
5
- public $base_url;
6
- public $curl_opts = array();
7
- public function __construct($api_key)
8
- {
9
- if(!function_exists('curl_init'))
10
- {
11
- throw new Exception('Sendinblue requires CURL module');
12
- }
13
- $this->base_url = 'https://in-automate.sendinblue.com/p';
14
- $this->api_key = $api_key;
15
- //create a session cookie
16
- if (!array_key_exists('session_id',$_COOKIE)) {
17
- $url = esc_url_raw((isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
18
- $parsed = parse_url($url);
19
- $host_parts = explode('.', $parsed['host']);
20
- $domain = implode('.', array_slice($host_parts, count($host_parts)-2));
21
- //store email_id cookie
22
- $_COOKIE['session_id'] = md5(uniqid(time()));
23
- setcookie("session_id", $_COOKIE['session_id'],time() + 86400,"/",$domain);
24
- }
25
-
26
- }
27
-
28
- /**
29
- * @param $input
30
- * @return mixed
31
- */
32
- private function do_request($input)
33
- {
34
- $input['key'] = $this->api_key;
35
- $url = $this->base_url . "?" . http_build_query($input);
36
- $data = wp_remote_retrieve_body(wp_remote_request($url, ['method' => 'GET']));
37
-
38
- return json_decode($data,true);
39
- }
40
-
41
- public function identify($data)
42
- {
43
- $data['sib_type'] = 'identify';
44
-
45
- if (!array_key_exists('name',$data)) {
46
- $data['name'] = "Contact Created";
47
- }
48
- $url = esc_url_raw((isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
49
- if (!array_key_exists('url',$data)) {
50
- $data['url'] = $url;
51
- }
52
- if (isset($_COOKIE['session_id']) && $_COOKIE['session_id'] != '') {
53
- $data['session_id'] = sanitize_text_field( $_COOKIE['session_id'] );
54
- }
55
- $parsed = parse_url($url);
56
- $host_parts = explode('.', $parsed['host']);
57
- $domain = implode('.', array_slice($host_parts, count($host_parts)-2));
58
- //store email_id cookie
59
- $_COOKIE['email_id'] = sanitize_email($data['email_id']);
60
- setcookie("email_id",$_COOKIE['email_id'],time() + 86400,"/",$domain);
61
- return $this->do_request($data);
62
- }
63
-
64
- public function track($data)
65
- {
66
- $data['sib_type'] = 'track';
67
- $url = esc_url_raw((isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
68
- if (!array_key_exists('url',$data)) {
69
- $data['url'] = $url;
70
- }
71
-
72
- if (!array_key_exists('sib_name',$data)) {
73
- if (array_key_exists('name',$data)) {
74
- $data['sib_name'] = $data['name'];
75
- }
76
- }
77
-
78
- //get email cookie
79
-
80
- if (isset($_COOKIE['email_id']) && $_COOKIE['email_id'] != '') {
81
- $data['email_id'] = sanitize_email( $_COOKIE['email_id'] );
82
- }
83
- if (isset($_COOKIE['session_id']) && $_COOKIE['session_id'] != '') {
84
- $data['session_id'] = sanitize_text_field( $_COOKIE['session_id'] );
85
- }
86
-
87
- //store email cookie
88
- $obj = $this->do_request($data);
89
- if (isset($obj['email_id']) && $obj['email_id'] != '') {
90
- $parsed = parse_url($url);
91
- $host_parts = explode('.', $parsed['host']);
92
- $domain = implode('.', array_slice($host_parts, count($host_parts)-2));
93
- //store email_id cookie
94
- $_COOKIE['email_id'] = sanitize_email($obj['email_id']);
95
- setcookie("email_id",$_COOKIE['email_id'],time() + 86400,"/",$domain);
96
- }
97
- }
98
- public function page($data)
99
- {
100
- $data['sib_type'] = 'page';
101
- $url = esc_url_raw((isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
102
- if (!array_key_exists('url',$data)) {
103
- $data['url'] = $url;
104
- }
105
- //get email cookie
106
- if (isset($_COOKIE['email_id']) && $_COOKIE['email_id'] != '') {
107
- $data['email_id'] = sanitize_email( $_COOKIE['email_id'] );
108
- }
109
- if (isset($_COOKIE['session_id']) && $_COOKIE['session_id'] != '') {
110
- $data['session_id'] = sanitize_text_field( $_COOKIE['session_id'] );
111
- }
112
- //referrer
113
- if (!array_key_exists('referrer',$data) && array_key_exists('HTTP_REFERER',$_SERVER)) {
114
- $data['referrer'] = $_SERVER['HTTP_REFERER'];
115
- }
116
- //pathname
117
- if (!array_key_exists('pathname',$data)) {
118
- $data['pathname'] = $_SERVER['REQUEST_URI'];
119
- }
120
-
121
- //name
122
- if (!array_key_exists('name',$data)) {
123
- $data['name'] = $_SERVER['REQUEST_URI'];
124
- }
125
-
126
- //store email cookie
127
- $obj = $this->do_request($data);
128
- if (isset($obj['email_id']) && $obj['email_id'] != '') {
129
- $parsed = parse_url($url);
130
- $host_parts = explode('.', $parsed['host']);
131
- $domain = implode('.', array_slice($host_parts, count($host_parts)-2));
132
- //store email_id cookie
133
- $_COOKIE['email_id'] = sanitize_email($obj['email_id']);
134
- setcookie("email_id",$_COOKIE['email_id'],time() + 86400,"/",$domain);
135
- }
136
- }
137
- public function trackLink($data)
138
- {
139
- $data['sib_type'] = 'trackLink';
140
- //get email cookie
141
- if (isset($_COOKIE['email_id']) && $_COOKIE['email_id'] != '') {
142
- $data['email_id'] = sanitize_email( $_COOKIE['email_id'] );
143
- }
144
- if (isset($_COOKIE['session_id']) && $_COOKIE['session_id'] != '') {
145
- $data['session_id'] = sanitize_text_field( $_COOKIE['session_id'] );
146
- }
147
- $url = esc_url_raw((isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
148
- if (!array_key_exists('url',$data)) {
149
- $data['url'] = $url;
150
- }
151
- //store email cookie
152
- $obj = $this->do_request($data);
153
- if (isset($obj['email_id']) && $obj['email_id'] != '') {
154
- $parsed = parse_url($url);
155
- $host_parts = explode('.', $parsed['host']);
156
- $domain = implode('.', array_slice($host_parts, count($host_parts)-2));
157
- //store email_id cookie
158
- $_COOKIE['email_id'] = sanitize_email($obj['email_id']);
159
- setcookie("email_id",$_COOKIE['email_id'],time() + 86400,"/",$domain);
160
  }
161
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  }
163
- ?>
1
  <?php
2
+ class Sendinblue
3
+ {
4
+ public $api_key;
5
+ public $base_url;
6
+ public $curl_opts = array();
7
+
8
+ public function __construct($api_key)
9
  {
10
+ if (!function_exists('curl_init')) {
11
+ throw new Exception('Sendinblue requires CURL module');
12
+ }
13
+ $this->base_url = 'https://in-automate.sendinblue.com/p';
14
+ $this->api_key = $api_key;
15
+ //create a session cookie
16
+ if (!array_key_exists('session_id', $_COOKIE)) {
17
+ $domain = self::get_app_domain();
18
+ //store session_id cookie
19
+ $session_id = md5(uniqid(time()));
20
+ $expiry_time = self::get_default_cookie_expiry();
21
+ setcookie("session_id", $session_id, $expiry_time, "/", $domain, is_ssl());
22
+ }
23
+ }
24
+
25
+ /**
26
+ * @param $input
27
+ * @return mixed
28
+ */
29
+ private function do_request($input)
30
+ {
31
+ $input['key'] = $this->api_key;
32
+ $url = $this->base_url . "?" . http_build_query($input);
33
+ $data = wp_remote_retrieve_body(wp_remote_request($url, ['method' => 'GET']));
34
+
35
+ return json_decode($data, true);
36
+ }
37
+
38
+ /**
39
+ * @return string
40
+ */
41
+ private static function get_app_domain()
42
+ {
43
+ $url = get_site_url();
44
+ $parsed_url = parse_url($url);
45
+ return !empty($parsed_url['host']) ? $parsed_url['host'] : 'localhost';
46
+ }
47
+
48
+ /**
49
+ * @return int
50
+ */
51
+ private static function get_default_cookie_expiry()
52
+ {
53
+ return time() + 8640;
54
+ }
55
+
56
+
57
+ /**
58
+ * @param string $email
59
+ * @param int $expiry_time
60
+ * @return void
61
+ */
62
+ private function set_email_cookie(string $email)
63
+ {
64
+ $expiry_time = self::get_default_cookie_expiry();
65
+ $domain = self::get_app_domain();
66
+ setcookie("email_id", sanitize_email($email), $expiry_time, "/", $domain, is_ssl());
67
+ }
68
+
69
+ public function identify($data)
70
+ {
71
+ $data['sib_type'] = 'identify';
72
+
73
+ if (!array_key_exists('name', $data)) {
74
+ $data['name'] = "Contact Created";
75
+ }
76
+ $url = esc_url_raw((isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
77
+ if (!array_key_exists('url', $data)) {
78
+ $data['url'] = $url;
79
+ }
80
+ if (isset($_COOKIE['session_id']) && $_COOKIE['session_id'] != '') {
81
+ $data['session_id'] = sanitize_text_field($_COOKIE['session_id']);
82
+ }
83
+ //store email_id cookie
84
+ $this->set_email_cookie($data['email_id']);
85
+ return $this->do_request($data);
86
+ }
87
+
88
+ public function track($data)
89
+ {
90
+ $data['sib_type'] = 'track';
91
+ $url = esc_url_raw((isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
92
+ if (!array_key_exists('url', $data)) {
93
+ $data['url'] = $url;
94
+ }
95
+
96
+ if (!array_key_exists('sib_name', $data)) {
97
+ if (array_key_exists('name', $data)) {
98
+ $data['sib_name'] = $data['name'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  }
100
+ }
101
+
102
+ //get email cookie
103
+
104
+ if (isset($_COOKIE['email_id']) && $_COOKIE['email_id'] != '') {
105
+ $data['email_id'] = sanitize_email($_COOKIE['email_id']);
106
+ }
107
+ if (isset($_COOKIE['session_id']) && $_COOKIE['session_id'] != '') {
108
+ $data['session_id'] = sanitize_text_field($_COOKIE['session_id']);
109
+ }
110
+
111
+ //store email cookie
112
+ $obj = $this->do_request($data);
113
+ if (isset($obj['email_id']) && $obj['email_id'] != '') {
114
+ $this->set_email_cookie($obj['email_id']);
115
+ }
116
+ }
117
+
118
+ public function page($data)
119
+ {
120
+ $data['sib_type'] = 'page';
121
+ $url = esc_url_raw((isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
122
+ if (!array_key_exists('url', $data)) {
123
+ $data['url'] = $url;
124
+ }
125
+ //get email cookie
126
+ if (isset($_COOKIE['email_id']) && $_COOKIE['email_id'] != '') {
127
+ $data['email_id'] = sanitize_email($_COOKIE['email_id']);
128
+ }
129
+ if (isset($_COOKIE['session_id']) && $_COOKIE['session_id'] != '') {
130
+ $data['session_id'] = sanitize_text_field($_COOKIE['session_id']);
131
+ }
132
+ //referrer
133
+ if (!array_key_exists('referrer', $data) && array_key_exists('HTTP_REFERER', $_SERVER)) {
134
+ $data['referrer'] = $_SERVER['HTTP_REFERER'];
135
+ }
136
+ //pathname
137
+ if (!array_key_exists('pathname', $data)) {
138
+ $data['pathname'] = $_SERVER['REQUEST_URI'];
139
+ }
140
+
141
+ //name
142
+ if (!array_key_exists('name', $data)) {
143
+ $data['name'] = $_SERVER['REQUEST_URI'];
144
+ }
145
+
146
+ //store email cookie
147
+ $obj = $this->do_request($data);
148
+ if (isset($obj['email_id']) && $obj['email_id'] != '') {
149
+ $this->set_email_cookie($obj['email_id']);
150
+ }
151
+ }
152
+
153
+ public function trackLink($data)
154
+ {
155
+ $data['sib_type'] = 'trackLink';
156
+ //get email cookie
157
+ if (isset($_COOKIE['email_id']) && $_COOKIE['email_id'] != '') {
158
+ $data['email_id'] = sanitize_email($_COOKIE['email_id']);
159
+ }
160
+ if (isset($_COOKIE['session_id']) && $_COOKIE['session_id'] != '') {
161
+ $data['session_id'] = sanitize_text_field($_COOKIE['session_id']);
162
+ }
163
+ $url = esc_url_raw((isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
164
+ if (!array_key_exists('url', $data)) {
165
+ $data['url'] = $url;
166
+ }
167
+ //store email cookie
168
+ $obj = $this->do_request($data);
169
+ if (isset($obj['email_id']) && $obj['email_id'] != '') {
170
+ $this->set_email_cookie($obj['email_id']);
171
+ }
172
  }
173
+ }
page/page-form.php CHANGED
@@ -880,8 +880,13 @@ For your information, you cannot select a template with the tag [DOUBLEOPTIN].',
880
  $form_name = isset( $_POST['sib_form_name'] ) ? sanitize_text_field( $_POST['sib_form_name'] ) : '';
881
  // phpcs:disable
882
  $form_html = isset( $_POST['sib_form_html'] ) ? wp_kses($_POST['sib_form_html'], SIB_Manager::wordpress_allowed_attributes()) : '';
 
 
 
 
 
 
883
 
884
- $list_ids = isset( $_POST['list_id'] ) ? maybe_serialize( $_POST['list_id'] ) : '';
885
  // phpcs:enable
886
  $dependTheme = isset( $_POST['sib_css_type'] ) ? sanitize_text_field( $_POST['sib_css_type'] ) : '';
887
  $customCss = isset( $_POST['sib_form_css'] ) ? sanitize_text_field( $_POST['sib_form_css'] ) : '';
880
  $form_name = isset( $_POST['sib_form_name'] ) ? sanitize_text_field( $_POST['sib_form_name'] ) : '';
881
  // phpcs:disable
882
  $form_html = isset( $_POST['sib_form_html'] ) ? wp_kses($_POST['sib_form_html'], SIB_Manager::wordpress_allowed_attributes()) : '';
883
+ $list_ids = '';
884
+
885
+ if (!empty($_POST['list_id']) && is_array($_POST['list_id'])) {
886
+ $list_ids = array_filter($_POST['list_id'], 'is_int');
887
+ $list_ids = maybe_serialize($_POST['list_id']);
888
+ }
889
 
 
890
  // phpcs:enable
891
  $dependTheme = isset( $_POST['sib_css_type'] ) ? sanitize_text_field( $_POST['sib_css_type'] ) : '';
892
  $customCss = isset( $_POST['sib_form_css'] ) ? sanitize_text_field( $_POST['sib_form_css'] ) : '';
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: Email Marketing, Newsletter, Sendinblue, Forms, smtp, marketing automation
4
  Requires at least: 4.4
5
  Tested up to: 5.9
6
  Requires PHP: 5.6
7
- Stable tag: 3.1.35
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -116,6 +116,10 @@ In order to create a signup form, you need to:
116
 
117
  == Changelog ==
118
 
 
 
 
 
119
  = 3.1.35 =
120
  * Security fixes, Input data sanitization during user sync, and cookies creation.
121
 
4
  Requires at least: 4.4
5
  Tested up to: 5.9
6
  Requires PHP: 5.6
7
+ Stable tag: 3.1.36
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
116
 
117
  == Changelog ==
118
 
119
+ = 3.1.36 =
120
+ * Security fixes include cookies handling, user input data sanitization, and escaping HTML entities from the output.
121
+ * Added missing font file for bootstrap 3.4.1
122
+
123
  = 3.1.35 =
124
  * Security fixes, Input data sanitization during user sync, and cookies creation.
125
 
sendinblue.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Newsletter, SMTP, Email marketing and Subscribe forms by Sendinblue
4
  * Plugin URI: https://www.sendinblue.com/?r=wporg
5
  * Description: Manage your contact lists, subscription forms and all email and marketing-related topics from your wp panel, within one single plugin
6
- * Version: 3.1.35
7
  * Author: Sendinblue
8
  * Author URI: https://www.sendinblue.com/?r=wporg
9
  * License: GPLv2 or later
@@ -573,13 +573,14 @@ if ( ! class_exists( 'SIB_Manager' ) ) {
573
  if ( $current_user instanceof WP_User ) {
574
  $ma_email = $current_user->user_email;
575
  }
576
- $ma_key = $general_settings['ma_key'];
577
  $output = '<script type="text/javascript">
578
- (function() {window.sib ={equeue:[],client_key:"'. $ma_key .'"};/* OPTIONAL: email for identify request*/
579
- window.sib.email_id = "'. $ma_email .'";
580
- window.sendinblue = {}; for (var j = [\'track\', \'identify\', \'trackLink\', \'page\'], i = 0; i < j.length; i++) { (function(k) { window.sendinblue[k] = function() { var arg = Array.prototype.slice.call(arguments); (window.sib[k] || function() { var t = {}; t[k] = arg; window.sib.equeue.push(t);})(arg[0], arg[1], arg[2]);};})(j[i]);}var n = document.createElement("script"),i = document.getElementsByTagName("script")[0]; n.type = "text/javascript", n.id = "sendinblue-js", n.async = !0, n.src = "https://sibautomation.com/sa.js?key=" + window.sib.client_key, i.parentNode.insertBefore(n, i), window.sendinblue.page();})();
581
- </script>';
582
- echo $output;
 
583
  }
584
  }
585
 
@@ -625,7 +626,7 @@ if ( ! class_exists( 'SIB_Manager' ) ) {
625
  var recaptchas = document.querySelectorAll('div[id=sib_captcha]');
626
  for( i = 0; i < recaptchas.length; i++) {
627
  gCaptchaSibWidget = grecaptcha.render(recaptchas[i], {
628
- 'sitekey' : '<?php echo $formData["gCaptcha_site"] ?>'
629
  });
630
  }
631
  }
@@ -639,7 +640,7 @@ if ( ! class_exists( 'SIB_Manager' ) ) {
639
  var onloadSibCallback = function() {
640
  var element = document.getElementsByClassName('sib-default-btn');
641
  gCaptchaSibWidget = grecaptcha.render(element[0],{
642
- 'sitekey' : '<?php echo $formData["gCaptcha_site"] ?>',
643
  'callback' : sibVerifyCallback
644
  });
645
  };
@@ -1376,7 +1377,7 @@ if ( ! class_exists( 'SIB_Manager' ) ) {
1376
  }
1377
  }
1378
  ?>
1379
- <td style="text-align: center;"><?php echo $td; ?></td>
1380
  <?php
1381
  }
1382
  ?>
3
  * Plugin Name: Newsletter, SMTP, Email marketing and Subscribe forms by Sendinblue
4
  * Plugin URI: https://www.sendinblue.com/?r=wporg
5
  * Description: Manage your contact lists, subscription forms and all email and marketing-related topics from your wp panel, within one single plugin
6
+ * Version: 3.1.36
7
  * Author: Sendinblue
8
  * Author URI: https://www.sendinblue.com/?r=wporg
9
  * License: GPLv2 or later
573
  if ( $current_user instanceof WP_User ) {
574
  $ma_email = $current_user->user_email;
575
  }
576
+ $ma_key = sanitize_text_field($general_settings['ma_key']);
577
  $output = '<script type="text/javascript">
578
+ (function() {
579
+ window.sib ={equeue:[],client_key:"'. $ma_key .'"};/* OPTIONAL: email for identify request*/
580
+ window.sib.email_id = "'. sanitize_email($ma_email) .'";
581
+ window.sendinblue = {}; for (var j = [\'track\', \'identify\', \'trackLink\', \'page\'], i = 0; i < j.length; i++) { (function(k) { window.sendinblue[k] = function() { var arg = Array.prototype.slice.call(arguments); (window.sib[k] || function() { var t = {}; t[k] = arg; window.sib.equeue.push(t);})(arg[0], arg[1], arg[2]);};})(j[i]);}var n = document.createElement("script"),i = document.getElementsByTagName("script")[0]; n.type = "text/javascript", n.id = "sendinblue-js", n.async = !0, n.src = "https://sibautomation.com/sa.js?key=" + window.sib.client_key, i.parentNode.insertBefore(n, i), window.sendinblue.page();})();
582
+ </script>';
583
+ echo html_entity_decode($output);
584
  }
585
  }
586
 
626
  var recaptchas = document.querySelectorAll('div[id=sib_captcha]');
627
  for( i = 0; i < recaptchas.length; i++) {
628
  gCaptchaSibWidget = grecaptcha.render(recaptchas[i], {
629
+ 'sitekey' : '<?php echo esc_html($formData["gCaptcha_site"]) ?>'
630
  });
631
  }
632
  }
640
  var onloadSibCallback = function() {
641
  var element = document.getElementsByClassName('sib-default-btn');
642
  gCaptchaSibWidget = grecaptcha.render(element[0],{
643
+ 'sitekey' : '<?php echo esc_html($formData["gCaptcha_site"]) ?>',
644
  'callback' : sibVerifyCallback
645
  });
646
  };
1377
  }
1378
  }
1379
  ?>
1380
+ <td style="text-align: center;"><?php echo wp_kses($td, wp_kses_allowed_html()); ?></td>
1381
  <?php
1382
  }
1383
  ?>