PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.24
Advanced Ads – Ad Manager & AdSense v2.0.24
2.0.24 2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / includes / utilities / class-validation.php
advanced-ads / includes / utilities Last commit date
class-ad-list-stats.php 1 week ago class-cache.php 1 week ago class-conditional.php 3 months ago class-content-injection.php 1 year ago class-data.php 1 week ago class-sanitize.php 1 year ago class-testing.php 1 year ago class-validation.php 1 year ago class-wordpress.php 1 week ago index.php 2 years ago
class-validation.php
101 lines
1 <?php
2 /**
3 * The class provides utility functions related to Validation.
4 *
5 * @package AdvancedAds
6 * @author Advanced Ads <info@wpadvancedads.com>
7 * @since 1.48.2
8 */
9
10 namespace AdvancedAds\Utilities;
11
12 use DOMDocument;
13 use AdvancedAds\Abstracts\Ad;
14
15 defined( 'ABSPATH' ) || exit;
16
17 /**
18 * Validation.
19 */
20 class Validation {
21
22 /**
23 * Check if an ad is valid for 'Post Content' placement
24 *
25 * @param Ad $ad Ad instance.
26 *
27 * @see Regex source: http://stackoverflow.com/questions/17852537/preg-replace-only-specific-part-of-string
28 *
29 * @return string|bool If not valid string with errors, otherwise empty string
30 */
31 public static function is_valid_ad_dom( Ad $ad ) {
32 $ad_content = $ad->get_content() ?? '';
33 if ( ! extension_loaded( 'dom' ) || ! $ad_content ) {
34 return false;
35 }
36
37 $wp_charset = get_bloginfo( 'charset' );
38 $ad_dom = new DOMDocument( '1.0', $wp_charset );
39
40 $libxml_previous_state = libxml_use_internal_errors( true );
41 libxml_clear_errors();
42 $ad_content = preg_replace( '#(document.write.+)</(.*)#', '$1<\/$2', $ad_content );
43 $ad_dom->loadHtml( '<!DOCTYPE html><html><meta http-equiv="Content-Type" content="text/html; charset=' . $wp_charset . '" /><body>' . $ad_content );
44
45 $errors = '';
46 foreach ( libxml_get_errors() as $error ) {
47 if ( stripos( $error->message, 'htmlParseEntityRef:' ) || preg_match( '/tag \S+ invalid/i', $error->message ) ) {
48 continue;
49 }
50
51 $errors .= print_r( $error, true ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
52 }
53
54 libxml_use_internal_errors( $libxml_previous_state );
55
56 return $errors;
57 }
58
59 /**
60 * Check if the current URL is HTTPS, but the ad code contains HTTP.
61 *
62 * @param Ad $ad Ad instance.
63 *
64 * @return bool false/string
65 */
66 public static function is_ad_https( Ad $ad ) {
67 if (
68 $ad &&
69 is_ssl() &&
70 $ad->is_type( [ 'plain', 'content' ] ) &&
71 // Find img, iframe, script. '\\\\' denotes a single backslash.
72 preg_match( '#\ssrc=\\\\?[\'"]http:\\\\?/\\\\?/#i', $ad->get_content() )
73 ) {
74 return __( 'Your website is using HTTPS, but the ad code contains HTTP and might not work.', 'advanced-ads' );
75 }
76
77 return false;
78 }
79
80 /**
81 * Check post and nonce while saving post to reduce complexity.
82 *
83 * @param int $post_id Post ID.
84 * @param object $post Post object.
85 *
86 * @return boolean
87 */
88 public static function check_save_post( $post_id, $post ): bool {
89 if ( empty( $post_id ) || empty( $post ) || ! is_a( $post, 'WP_Post' ) ) {
90 return false;
91 }
92
93 // Dont' save meta boxes for revisions or autosaves.
94 if ( Conditional::doing_autosave() || is_int( wp_is_post_revision( $post ) ) || is_int( wp_is_post_autosave( $post ) ) ) {
95 return false;
96 }
97
98 return true;
99 }
100 }
101