WP OER Security & Risk Analysis

wordpress.org/plugins/wp-oer

Open Educational Resource (OER) management and curation, metadata publishing, and alignment to Common Core State Standards.

10 active installs v0.9.3 PHP 7.0+ WP 5.0+ Updated May 12, 2023
educationlearningoeropen-educational-resourcesteaching
85
A · Safe
CVEs total1
Unpatched0
Last CVEJun 17, 2022
Safety Verdict

Is WP OER Safe to Use in 2026?

Generally Safe

Score 85/100

WP OER has a strong security track record. Known vulnerabilities have been patched promptly. It's a solid choice for most WordPress installations.

1 known CVELast CVE: Jun 17, 2022Updated 3yr ago
Risk Assessment

The "wp-oer" plugin version 0.9.3 presents a mixed security posture. On the positive side, it demonstrates good practices by utilizing prepared statements for all SQL queries and a high percentage of properly escaped output, significantly mitigating risks of SQL injection and many forms of cross-site scripting. The absence of bundled libraries and external HTTP requests is also a strength, reducing the potential attack surface from third-party code.

However, significant concerns arise from the plugin's attack surface. A substantial number of AJAX handlers (19 out of 19) lack authentication checks, creating a wide entry point for unauthorized actions. While taint analysis shows no critical or high severity unsanitized flows, the presence of 5 flows with unsanitized paths indicates a potential for vulnerabilities if not handled carefully by developers. The previous vulnerability history, specifically a medium-severity XSS issue, suggests a pattern of potential input validation weaknesses that, coupled with the numerous unprotected AJAX endpoints, could be exploited.

In conclusion, while the plugin has strengths in data handling like SQL and output, the lack of authentication on a large portion of its AJAX endpoints is a critical security weakness. The potential for unsanitized flows, though not currently critical, necessitates vigilance. The plugin requires immediate attention to secure its AJAX endpoints to move towards a more robust security profile.

Key Concerns

  • 19 AJAX handlers without auth checks
  • 5 flows with unsanitized paths
  • 1 medium severity CVE in history
  • 14 dangerous functions used
  • 7 Nonce checks present, but not on all AJAX
Vulnerabilities
1 published

WP OER Security Vulnerabilities

CVEs by Year

1 CVE in 2022
2022
Patched Has unpatched

Severity Breakdown

Medium
1

1 total CVE

WF-af4058cd-79bc-433c-96e1-fb0aad12969c-wp-oermedium · 6.1Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

WP OER <= 0.9.0 - Cross-Site Scripting

Jun 17, 2022 Patched in 0.9.1 (585d)
Code Analysis
Analyzed Apr 16, 2026

WP OER Code Analysis

Dangerous Functions
14
Raw SQL Queries
0
115 prepared
Unescaped Output
178
1218 escaped
Nonce Checks
7
Capability Checks
11
File Operations
15
External Requests
5
Bundled Libraries
0

Dangerous Functions Found

ini_setini_set('max_execution_time', 3600);Excel/oleread.php:20
unserialize$client_terms = unserialize($client_terms);includes/init.php:14
unserialize$oer_userasgnpages = unserialize($oer_userasgnpages);includes/init.php:65
unserialize$oer_userasgnblog_post = unserialize($oer_userasgnblog_post);includes/init.php:79
unserialize$oer_userasgnrsrc_post = unserialize($oer_userasgnrsrc_post);includes/init.php:93
exec$output = exec(implode(' ', $params), $lines, $val);includes/oer-functions.php:219
ini_setini_set('max_execution_time', 0);includes/oer-functions.php:640
set_time_limitset_time_limit(0);includes/oer-functions.php:641
ini_setini_set('max_execution_time', 0);includes/oer-functions.php:1038
ini_setini_set('max_input_time ', -1);includes/oer-functions.php:1039
ini_setini_set('memory_limit ', -1);includes/oer-functions.php:1040
set_time_limitset_time_limit(0);includes/oer-functions.php:1041
ini_setini_set('max_execution_time', 0);includes/oer-functions.php:1787
set_time_limitset_time_limit(0);includes/oer-functions.php:1788

SQL Query Safety

100% prepared115 total queries

Output Escaping

87% escaped1396 total outputs
Data Flows · Security
5 unsanitized

Data Flow Analysis

8 flows5 with unsanitized paths
oer_save_customfields (includes/init.php:405)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface
19 unprotected

WP OER Attack Surface

Entry Points24
Unprotected19

AJAX Handlers 19

authwp_ajax_oer_display_resource_blockblocks/resource-block/init.php:221
noprivwp_ajax_oer_display_resource_blockblocks/resource-block/init.php:222
authwp_ajax_oer_get_subject_resourcesblocks/subject-resources-block-v2/init.php:614
noprivwp_ajax_oer_get_subject_resourcesblocks/subject-resources-block-v2/init.php:615
authwp_ajax_display_subjects_indexblocks/subjects-index-block/init.php:128
noprivwp_ajax_display_subjects_indexblocks/subjects-index-block/init.php:129
authwp_ajax_oer_activation_noticeopen-educational-resources.php:206
authwp_ajax_load_moreopen-educational-resources.php:1655
noprivwp_ajax_load_moreopen-educational-resources.php:1656
authwp_ajax_sort_resourcesopen-educational-resources.php:1784
noprivwp_ajax_sort_resourcesopen-educational-resources.php:1785
authwp_ajax_load_highlightsopen-educational-resources.php:1847
noprivwp_ajax_load_highlightsopen-educational-resources.php:1848
authwp_ajax_load_highlightopen-educational-resources.php:1906
noprivwp_ajax_load_highlightopen-educational-resources.php:1907
authwp_ajax_load_searched_standardsopen-educational-resources.php:1909
authwp_ajax_load_default_standardsopen-educational-resources.php:1939
authwp_ajax_search_resourcesopen-educational-resources.php:2871
noprivwp_ajax_search_resourcesopen-educational-resources.php:2872

REST API Routes 4

GET/wp-json/oer-resource-block/v1resourcesblocks/resource-block/init.php:42
GET/wp-json/oer/v2subjectsblocks/subject-resources-block-v2/init.php:141
GET/wp-json/oer/v2resourcesblocks/subject-resources-block-v2/init.php:151
GET/wp-json/oer/v2subjectsopen-educational-resources.php:2642

Shortcodes 1

[oer_subjects_index] includes/shortcode.php:7
WordPress Hooks 79
actioninitblocks/resource-block/init.php:38
actionrest_api_initblocks/resource-block/init.php:50
actioninitblocks/subject-resources-block-v2/init.php:127
actioninitblocks/subject-resources-block-v2/init.php:129
actionrest_api_initblocks/subject-resources-block-v2/init.php:162
filterblock_categories_allblocks/subject-resources-block-v2/init.php:636
filterblock_categoriesblocks/subject-resources-block-v2/init.php:638
actionadmin_enqueue_scriptsblocks/subjects-index-block/init.php:14
actioninitblocks/subjects-index-block/init.php:50
actioninitclasses/class-wp-session.php:105
actionshutdownclasses/wp-session.php:116
actionwp_session_garbage_collectionclasses/wp-session.php:159
actionwpclasses/wp-session.php:169
actionload-edit.phpincludes/init.php:29
filterposts_whereincludes/init.php:36
filterposts_whereincludes/init.php:40
filterposts_whereincludes/init.php:44
filterposts_whereincludes/init.php:53
actionadmin_enqueue_scriptsincludes/init.php:104
actionwp_enqueue_scriptsincludes/init.php:140
actionwp_headincludes/init.php:168
actioninitincludes/init.php:182
actioninitincludes/init.php:239
filterrest_resource-grade-level_queryincludes/init.php:287
filterget_terms_argsincludes/init.php:294
actionresource-subject-area_add_form_fieldsincludes/init.php:309
actionresource-subject-area_edit_form_fieldsincludes/init.php:333
actioncreated_resource-subject-areaincludes/init.php:364
actionedited_resource-subject-areaincludes/init.php:380
actionsave_postincludes/init.php:404
actionadmin_menuincludes/init.php:745
actionadmin_action_import_resourcesincludes/init.php:780
actionadmin_action_import_lr_resourcesincludes/init.php:805
actionadmin_action_import_subjectsincludes/init.php:840
actionadmin_action_import_standardsincludes/init.php:868
actionadmin_footerincludes/init.php:917
actionadmin_footerincludes/init.php:928
actionadmin_footerincludes/init.php:939
filtergenerate_rewrite_rulesincludes/oer-functions.php:276
filterupload_dirincludes/oer-functions.php:1049
filterupload_dirincludes/oer-functions.php:1796
filterbody_classoer_template/archive-resource.php:8
filterbody_classoer_template/standards.php:5
filterbody_classoer_template/tag-resource.php:6
filterbody_classoer_template/template-notation.php:5
filterbody_classoer_template/template-standard.php:5
filterbody_classoer_template/template-substandard.php:5
actionadmin_noticesopen-educational-resources.php:218
actionplugins_loadedopen-educational-resources.php:242
actionwp_default_scriptsopen-educational-resources.php:254
filterplugin_action_linksopen-educational-resources.php:313
filtertemplate_includeopen-educational-resources.php:356
filtertemplate_includeopen-educational-resources.php:379
filtertemplate_includeopen-educational-resources.php:406
filterarchive_templateopen-educational-resources.php:432
actionwp_enqueue_scriptsopen-educational-resources.php:593
actionadmin_initopen-educational-resources.php:633
actionadmin_initopen-educational-resources.php:927
actionadmin_initopen-educational-resources.php:1065
actionadmin_initopen-educational-resources.php:1209
actionadmin_initopen-educational-resources.php:1256
actionwidgets_initopen-educational-resources.php:1550
filterbody_classopen-educational-resources.php:1553
actionparse_requestopen-educational-resources.php:1972
actionregistered_post_typeopen-educational-resources.php:2062
filterpost_type_linkopen-educational-resources.php:2189
actionregistered_taxonomyopen-educational-resources.php:2311
filterposts_searchopen-educational-resources.php:2327
filterposts_join_requestopen-educational-resources.php:2412
filterposts_distinct_requestopen-educational-resources.php:2415
actionpre_get_postsopen-educational-resources.php:2447
filtertemplate_includeopen-educational-resources.php:2463
actiontemplate_includeopen-educational-resources.php:2501
actioninitopen-educational-resources.php:2540
filterquery_varsopen-educational-resources.php:2548
actioninitopen-educational-resources.php:2551
actioninitopen-educational-resources.php:2588
actionrest_api_initopen-educational-resources.php:2654
actionwidgets_initwidgets/class-subject-area-widget.php:137

Scheduled Events 1

wp_session_garbage_collection
Maintenance & Trust

WP OER Maintenance & Trust

Maintenance Signals

WordPress version tested6.2.9
Last updatedMay 12, 2023
PHP min version7.0
Downloads11K

Community Trust

Rating100/100
Number of ratings1
Active installs10
Developer Profile

WP OER Developer Profile

Navigation North

2 plugins · 10 total installs

69
trust score
Avg Security Score
85/100
Avg Patch Time
585 days
View full developer profile
Detection Fingerprints

How We Detect WP OER

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

Asset Fingerprints

Asset Paths
/wp-content/plugins/wp-oer/css/oer-style.css/wp-content/plugins/wp-oer/css/oer-bootstrap-min.css/wp-content/plugins/wp-oer/css/oer-bootstrap-theme-min.css/wp-content/plugins/wp-oer/js/oer-script.js/wp-content/plugins/wp-oer/js/oer-admin.js
Script Paths
/wp-content/plugins/wp-oer/js/oer-script.js/wp-content/plugins/wp-oer/js/oer-admin.js
Version Parameters
wp-oer/css/oer-style.css?ver=wp-oer/css/oer-bootstrap-min.css?ver=wp-oer/css/oer-bootstrap-theme-min.css?ver=wp-oer/js/oer-script.js?ver=wp-oer/js/oer-admin.js?ver=

HTML / DOM Fingerprints

CSS Classes
oer-search-results-wrapoer-search-results-itemoer-search-results-item-titleoer-search-results-item-descriptionoer-search-results-item-linkoer-search-results-item-sourceoer-search-results-item-authoroer-search-results-item-date+23 more
Data Attributes
data-oer-search-results-wrapdata-oer-search-results-itemdata-oer-search-results-item-titledata-oer-search-results-item-descriptiondata-oer-search-results-item-linkdata-oer-search-results-item-source+25 more
JS Globals
oer_ajax_objectwp_ajax_oer_admin_debug_bootstrap_fontawesome_css+10 more
Shortcode Output
[oer_search][oer_subject_area][oer_resource_browser]
FAQ

Frequently Asked Questions about WP OER