Themify Portfolio Post Security & Risk Analysis

wordpress.org/plugins/themify-portfolio-post

Add a simple Portfolio post type to your site.

30K active installs v1.3.1 PHP 7.2+ WP 5.2+ Updated Dec 5, 2025
portfoliopostpost-typeshowcase
95
A · Safe
CVEs total6
Unpatched0
Last CVEDec 15, 2025
Download
Safety Verdict

Is Themify Portfolio Post Safe to Use in 2026?

Generally Safe

Score 95/100

Themify Portfolio Post has a strong security track record. Known vulnerabilities have been patched promptly.

6 known CVEsLast CVE: Dec 15, 2025Updated 3mo ago
Risk Assessment

The 'themify-portfolio-post' plugin v1.3.1 presents a mixed security posture. While it demonstrates strengths in areas like the exclusive use of prepared statements for SQL queries and a relatively high percentage of properly escaped output, there are significant concerns regarding its attack surface and historical vulnerability patterns. The presence of 6 AJAX handlers, with 2 lacking authentication checks, creates direct entry points for potential exploitation. Furthermore, the use of the `unserialize` function, identified as a dangerous function, can lead to vulnerabilities if not handled with extreme care, especially when processing untrusted input. The plugin's history of 6 known medium-severity CVEs, all of which are reportedly patched, highlights a recurring trend of vulnerabilities. The commonality of Cross-Site Scripting (XSS) in past issues suggests a historical weakness in input sanitization and output escaping, despite the current static analysis showing an 81% proper escaping rate.

Overall, while the current version appears to have addressed past vulnerabilities, the inherent risks associated with unprotected AJAX endpoints and the legacy of XSS issues warrant caution. The use of `unserialize` also remains a potential point of failure if not meticulously secured against user-controlled data. The plugin's attack surface, particularly its unprotected AJAX handlers, combined with the historical precedent of XSS, suggests that users should remain vigilant and ensure the plugin is consistently updated to the latest secure versions, even if current analyses indicate no critical or high-severity issues.

Key Concerns

  • Unprotected AJAX handlers found
  • Dangerous function 'unserialize' used
  • History of 6 medium CVEs, XSS common
  • Unsanitized paths found in taint analysis
Vulnerabilities
6

Themify Portfolio Post Security Vulnerabilities

CVEs by Year

1 CVE in 2020
2020
2 CVEs in 2022
2022
2 CVEs in 2023
2023
1 CVE in 2025
2025
Patched Has unpatched

Severity Breakdown

Medium
6

6 total CVEs

CVE-2025-67533medium · 6.4Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Themify Portfolio Post <= 1.3.0 - Authenticated (Author+) Stored Cross-Site Scripting

Dec 15, 2025 Patched in 1.3.1 (5d)
CVE-2022-32970medium · 5.5Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Themify Portfolio Post <= 1.2.4 - Authenticated (Editor+) Stored Cross-Site Scripting

Apr 18, 2023 Patched in 1.2.5 (280d)
CVE-2023-0362medium · 6.4Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Themify Portfolio Post <= 1.2.1 - Authenticated (Contributor+) Stored Cross-Site Scripting via Shortcode

Jan 19, 2023 Patched in 1.2.2 (369d)
CVE-2022-4464medium · 6.4Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Themify Portfolio Post <= 1.2.0 - Authenticated (Contributor+) Stored Cross-Site Scripting via Shortcode

Dec 23, 2022 Patched in 1.2.1 (396d)
CVE-2022-0200medium · 5.4Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Themify Portfolio Post <= 1.1.6 - Reflected Cross-Site Scripting

Jan 14, 2022 Patched in 1.1.7 (739d)
CVE-2021-24129medium · 5.4Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Themify Portfolio Post <= 1.1.5 - Authenticated Stored Cross-Site Scripting

Dec 4, 2020 Patched in 1.1.6 (1145d)
Code Analysis
Analyzed Mar 16, 2026

Themify Portfolio Post Code Analysis

Dangerous Functions
2
Raw SQL Queries
0
2 prepared
Unescaped Output
64
265 escaped
Nonce Checks
5
Capability Checks
7
File Operations
0
External Requests
0
Bundled Libraries
0

Dangerous Functions Found

unserialize$new_data = unserialize( $fileContent , ['allowed_classes' => false] );includes\themify-metabox\includes\themify-metabox-core.php:562
unserialize$currentSwatches = unserialize( get_option( 'themify_saved_' . $type, serialize( array() ) ) );includes\themify-metabox\includes\themify-metabox-core.php:572

SQL Query Safety

100% prepared2 total queries

Output Escaping

81% escaped329 total outputs
Data Flows
4 unsanitized

Data Flow Analysis

9 flows4 with unsanitized paths
get_select (includes\admin.php:83)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface
2 unprotected

Themify Portfolio Post Attack Surface

Entry Points7
Unprotected2

AJAX Handlers 6

authwp_ajax_themify_metabox_media_lib_browseincludes\themify-metabox\includes\themify-field-types.php:8
authwp_ajax_themify_pluploadincludes\themify-metabox\includes\themify-field-types.php:9
authwp_ajax_themify_create_inner_popup_pageincludes\themify-metabox\includes\themify-field-types.php:10
authwp_ajax_themify_create_popup_page_paginationincludes\themify-metabox\includes\themify-field-types.php:11
authwp_ajax_themify_import_colorsincludes\themify-metabox\includes\themify-metabox-core.php:33
authwp_ajax_themify_save_colorsincludes\themify-metabox\includes\themify-metabox-core.php:34

Shortcodes 1

[themify_portfolio_posts] includes\system.php:49
WordPress Hooks 48
actionadmin_initincludes\admin.php:11
filterattachment_fields_to_editincludes\admin.php:14
actionedit_attachmentincludes\admin.php:15
actioninitincludes\admin.php:22
filterthemify_do_metaboxesincludes\admin.php:30
actionload-edit.phpincludes\admin.php:57
filterpost_row_actionsincludes\admin.php:58
actionrestrict_manage_postsincludes\admin.php:67
actioninitincludes\system.php:19
filterplugin_row_metaincludes\system.php:20
filterbuilder_is_portfolio_activeincludes\system.php:22
actionafter_setup_themeincludes\system.php:23
actionafter_setup_themeincludes\system.php:30
filterthe_contentincludes\system.php:31
filterimage_resize_dimensionsincludes\themify\img.php:109
filterthemify_metaboxesincludes\themify-metabox\example-functions.php:30
filterthemify_metabox/fields/tm-exampleincludes\themify-metabox\example-functions.php:229
filterthemify_metabox/user/fieldsincludes\themify-metabox\example-functions.php:259
filterthemify_metabox/taxonomy/category/fieldsincludes\themify-metabox\example-functions.php:280
actioninitincludes\themify-metabox\includes\themify-metabox-core.php:17
actionadmin_menuincludes\themify-metabox\includes\themify-metabox-core.php:27
actionpre_post_updateincludes\themify-metabox\includes\themify-metabox-core.php:28
actionsave_postincludes\themify-metabox\includes\themify-metabox-core.php:29
actionadmin_enqueue_scriptsincludes\themify-metabox\includes\themify-metabox-core.php:30
filteris_protected_metaincludes\themify-metabox\includes\themify-metabox-core.php:31
actionadmin_initincludes\themify-metabox\includes\themify-metabox-core.php:35
filtersave_postincludes\themify-metabox\includes\themify-metabox-core.php:40
actionadd_meta_boxesincludes\themify-metabox\includes\themify-metabox-core.php:44
actionadmin_headincludes\themify-metabox\includes\themify-metabox-core.php:45
actionadmin_enqueue_scriptsincludes\themify-metabox\includes\themify-metabox-core.php:46
actiontemplate_redirectincludes\themify-metabox\includes\themify-metabox-core.php:50
actionwp_before_admin_bar_renderincludes\themify-metabox\includes\themify-metabox-core.php:697
actionwp_enqueue_scriptsincludes\themify-metabox\includes\themify-metabox-core.php:698
filteruse_block_editor_for_postincludes\themify-metabox\includes\themify-metabox-core.php:728
filterscreen_options_show_screenincludes\themify-metabox\includes\themify-metabox-core.php:730
actioninitincludes\themify-metabox\includes\themify-metabox-core.php:772
actioninitincludes\themify-metabox\includes\themify-term-fields.php:22
actionadmin_enqueue_scriptsincludes\themify-metabox\includes\themify-term-fields.php:23
actioncreated_termincludes\themify-metabox\includes\themify-term-fields.php:35
actionedited_termincludes\themify-metabox\includes\themify-term-fields.php:36
actionshow_user_profileincludes\themify-metabox\includes\themify-user-fields.php:22
actionedit_user_profileincludes\themify-metabox\includes\themify-user-fields.php:23
actionadmin_enqueue_scriptsincludes\themify-metabox\includes\themify-user-fields.php:24
actionpersonal_options_updateincludes\themify-metabox\includes\themify-user-fields.php:25
actionedit_user_profile_updateincludes\themify-metabox\includes\themify-user-fields.php:26
actionafter_setup_themeincludes\themify-metabox\themify-metabox.php:35
actionafter_setup_themethemify-portfolio-post.php:60
actioninitthemify-portfolio-post.php:67
Maintenance & Trust

Themify Portfolio Post Maintenance & Trust

Maintenance Signals

WordPress version tested6.9.0
Last updatedDec 5, 2025
PHP min version7.2
Downloads667K

Community Trust

Rating100/100
Number of ratings1
Active installs30K
Developer Profile

Themify Portfolio Post Developer Profile

themifyme

10 plugins · 140K total installs

76
trust score
Avg Security Score
95/100
Avg Patch Time
145 days
View full developer profile
Detection Fingerprints

How We Detect Themify Portfolio Post

Patterns used to identify this plugin on WordPress sites during automated security audits and web crawling.

Asset Fingerprints

Asset Paths
/wp-content/plugins/themify-portfolio-post/themify-portfolio-post.php/wp-content/plugins/themify-portfolio-post/includes/system.php/wp-content/plugins/themify-portfolio-post/includes/themify-metabox/themify-metabox.php/wp-content/plugins/themify-portfolio-post/includes/themify-metabox/assets/css/themify-metabox.css/wp-content/plugins/themify-portfolio-post/includes/themify-metabox/assets/js/themify-metabox.js/wp-content/plugins/themify-portfolio-post/includes/themify-metabox/includes/themify-field-types.php/wp-content/plugins/themify-portfolio-post/includes/themify-metabox/assets/images/ui-icons.png
Script Paths
/wp-content/plugins/themify-portfolio-post/includes/themify-metabox/assets/js/themify-metabox.js
Version Parameters
themify-portfolio-post/themify-portfolio-post.php?ver=themify-portfolio-post/includes/system.php?ver=themify-portfolio-post/includes/themify-metabox/themify-metabox.php?ver=themify-portfolio-post/includes/themify-metabox/assets/css/themify-metabox.css?ver=themify-portfolio-post/includes/themify-metabox/assets/js/themify-metabox.js?ver=themify-portfolio-post/includes/themify-metabox/includes/themify-field-types.php?ver=

HTML / DOM Fingerprints

CSS Classes
themify_featimg_removethemify_upload_previewthemify_input_fieldthemify_upload_fieldthemify_upload_buttonsthemify_field_descriptionthemify_video_removethemify_custom_panel_nonce+28 more
HTML Comments
<!-- Field storing URL --><!-- Parameters for the uploader @var Array --><!-- meta_box description --><!-- Field storing URL -->+5 more
Data Attributes
data-attachiddata-audio-removename="themify_metabox_post_thumbnail"name="themify_metabox_post_slider_images"name="themify_metabox_post_gallery_images"name="themify_metabox_post_audio"+20 more
JS Globals
themify_custom_panel_nonce
FAQ

Frequently Asked Questions about Themify Portfolio Post