Rotation Tournaments Security & Risk Analysis

wordpress.org/plugins/doubles-rotation-tournament

Do you play Singles or Doubles Tournaments? This plugin manages Rotation Tournaments where players have a different partner in each game.

10 active installs v1.5.3 PHP + WP 5.8+ Updated Dec 5, 2025
gamerankingsporttennistournament
100
A · Safe
CVEs total0
Unpatched0
Last CVENever
Safety Verdict

Is Rotation Tournaments Safe to Use in 2026?

Generally Safe

Score 100/100

Rotation Tournaments has no known CVEs and is actively maintained. It's a solid choice for most WordPress installations.

No known CVEs Updated 5mo ago
Risk Assessment

The "doubles-rotation-tournament" plugin v1.5.3 presents a mixed security posture. While it has a clean vulnerability history with no known CVEs and demonstrates good practices in SQL query preparation and output escaping, significant concerns arise from its attack surface and taint analysis. A substantial portion of its AJAX handlers and REST API routes lack proper authentication and capability checks, creating numerous potential entry points for attackers. The presence of "unserialize" as a dangerous function, combined with a concerning number of taint flows with unsanitized paths, particularly those classified as high severity, indicates a risk of deserialization vulnerabilities if untrusted data is processed. The plugin's strengths lie in its SQL and output handling, but the exposed entry points and potential for code execution via deserialization due to unsanitized taint flows are significant weaknesses.

Key Concerns

  • AJAX handlers without auth checks
  • REST API routes without permission callbacks
  • High severity taint flows with unsanitized paths
  • Dangerous function unserialize found
  • Flows with unsanitized paths
Vulnerabilities
None known

Rotation Tournaments Security Vulnerabilities

No known vulnerabilities — this is a good sign.
Version History

Rotation Tournaments Release Timeline

v1.5.3Current
v1.5.2
v1.5.1
v1.5.0
v1.4.9
v1.4.8
v1.4.7
v1.4.6
v1.4.5
v1.4.4
v1.4.3
v1.4.2
v1.4.1
v1.4.0
v1.3.0
v1.2.0
v1.1.0
v1.0.0
Code Analysis
Analyzed Mar 16, 2026

Rotation Tournaments Code Analysis

Dangerous Functions
10
Raw SQL Queries
51
118 prepared
Unescaped Output
180
1266 escaped
Nonce Checks
19
Capability Checks
2
File Operations
0
External Requests
3
Bundled Libraries
0

Dangerous Functions Found

unserialize$statistics = doroto_create_statistics_table($tournament, unserialize($tournament->players), intval(includes\doroto-endpoints.php:849
unserialize$players = unserialize($result->players);includes\doroto-repeated-functions.php:207
unserialize$admin_users = unserialize($tournament->admin_users);includes\doroto-repeated-functions.php:388
unserialize$special_group = unserialize($special_group);includes\doroto-repeated-functions.php:495
unserializeif (doroto_is_admin($tournament_id) < 1 && !in_array($user_id, unserialize($tournament->players))) {includes\doroto-shortcodes.php:1717
unserializeif (doroto_is_admin($tournament_id) < 1 && !in_array($user_id, unserialize($tournament->players))) {includes\doroto-shortcodes.php:1889
unserialize$statistics = doroto_create_statistics_table($tournament, unserialize($tournament->players), intval(includes\doroto-shortcodes.php:3372
unserialize$players = unserialize($row->players);includes\doroto-shortcodes.php:3594
unserialize$output .= esc_html(count(unserialize($row->players)));includes\doroto-shortcodes.php:3618
unserialize$admin_users = unserialize($row->admin_users);includes\doroto-shortcodes.php:3628

SQL Query Safety

70% prepared169 total queries

Output Escaping

88% escaped1446 total outputs
Data Flows · Security
23 unsanitized

Data Flow Analysis

25 flows23 with unsanitized paths
doroto_prepare_filtered_tournaments (includes\doroto-tournament-management.php:2886)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface
35 unprotected

Rotation Tournaments Attack Surface

Entry Points86
Unprotected35

AJAX Handlers 16

authwp_ajax_doroto_register_playerincludes\doroto-players-management.php:239
noprivwp_ajax_doroto_register_playerincludes\doroto-players-management.php:240
authwp_ajax_doroto_toggle_registrationincludes\doroto-players-management.php:241
authwp_ajax_doroto_add_current_user_to_adminincludes\doroto-players-management.php:339
noprivwp_ajax_doroto_add_current_user_to_adminincludes\doroto-players-management.php:340
authwp_ajax_doroto_player_filter_helpincludes\doroto-players-management.php:393
noprivwp_ajax_doroto_player_filter_helpincludes\doroto-players-management.php:394
authwp_ajax_get_tournament_idincludes\doroto-shortcodes.php:4387
noprivwp_ajax_get_tournament_idincludes\doroto-shortcodes.php:4388
authwp_ajax_doroto_toggle_tournamentincludes\doroto-tournament-management.php:2155
authwp_ajax_doroto_create_tournament_recordincludes\doroto-tournament-management.php:2771
noprivwp_ajax_doroto_create_tournament_recordincludes\doroto-tournament-management.php:2772
authwp_ajax_doroto_choose_tournamentincludes\doroto-tournament-management.php:2852
noprivwp_ajax_doroto_choose_tournamentincludes\doroto-tournament-management.php:2853
authwp_ajax_doroto_hide_notice_round_endincludes\doroto-tournament-management.php:3352
authwp_ajax_doroto_next_notice_round_endincludes\doroto-tournament-management.php:3403

REST API Routes 39

POST/wp-json/player/registerincludes\doroto-endpoints.php:13
POST/wp-json/player/loginincludes\doroto-endpoints.php:87
POST/wp-json/doroto/v1/refresh-tokenincludes\doroto-endpoints.php:144
GET/wp-json/doroto/v1/tournamentsincludes\doroto-endpoints.php:264
GET/wp-json/doroto/v1/settingsincludes\doroto-endpoints.php:408
GET/wp-json/doroto/v1/tournaments/(?P<id>\d+)includes\doroto-endpoints.php:429
GET/wp-json/doroto/v1/tournament-detail/(?P<id>\d+)includes\doroto-endpoints.php:480
POST/wp-json/doroto/v1/tournament-saveincludes\doroto-endpoints.php:670
POST/wp-json/doroto/v1/add-tournamentincludes\doroto-endpoints.php:905
POST/wp-json/doroto/v1/tournament-register/(?P<id>\d+)includes\doroto-endpoints.php:976
GET/wp-json/doroto/v1/website-infoincludes\doroto-endpoints.php:1087
GET/wp-json/doroto/v1/users-allincludes\doroto-endpoints.php:1140
POST/wp-json/doroto/v1/add-playerincludes\doroto-endpoints.php:1260
POST/wp-json/doroto/v1/remove-playerincludes\doroto-endpoints.php:1386
POST/wp-json/doroto/v1/match-resultincludes\doroto-endpoints.php:1487
POST/wp-json/doroto/v1/round-end-actionincludes\doroto-endpoints.php:1611
GET/wp-json/doroto/v1/tournament-toggleincludes\doroto-endpoints.php:1689
GET/wp-json/doroto/v1/tournament-add-adminincludes\doroto-endpoints.php:1807
GET/wp-json/doroto/v1/admin-candidatesincludes\doroto-endpoints.php:1879
POST/wp-json/player/forgot-passwordincludes\doroto-endpoints.php:1977
POST/wp-json/player/google-loginincludes\doroto-endpoints.php:2020
GET/wp-json/doroto/v1/edit-profileincludes\doroto-endpoints.php:2147
GET/wp-json/doroto/v1/get-profileincludes\doroto-endpoints.php:2222
GET/wp-json/doroto/v1/disable-player-candidatesincludes\doroto-endpoints.php:2257
POST/wp-json/doroto/v1/tournament-disable-playerincludes\doroto-endpoints.php:2264
GET/wp-json/doroto/v1/restore-player-candidatesincludes\doroto-endpoints.php:2428
POST/wp-json/doroto/v1/tournament-restore-playerincludes\doroto-endpoints.php:2435
GET/wp-json/doroto/v1/payment-candidatesincludes\doroto-endpoints.php:2567
POST/wp-json/doroto/v1/tournament-enter-paymentincludes\doroto-endpoints.php:2574
GET/wp-json/doroto/v1/remove-payment-candidatesincludes\doroto-endpoints.php:2683
POST/wp-json/doroto/v1/tournament-remove-paymentincludes\doroto-endpoints.php:2690
GET/wp-json/doroto/v1/check-update/(?P<id>\d+)includes\doroto-endpoints.php:2791
POST/wp-json/doroto/v1/change-match-resultincludes\doroto-endpoints.php:2817
POST/wp-json/doroto/v1/setup-example-tournamentincludes\doroto-endpoints.php:2940
GET/wp-json/doroto/v1/special-group-candidatesincludes\doroto-endpoints.php:3044
POST/wp-json/doroto/v1/add-to-special-groupincludes\doroto-endpoints.php:3052
GET/wp-json/doroto/v1/remove-special-group-candidatesincludes\doroto-endpoints.php:3187
POST/wp-json/doroto/v1/remove-from-special-groupincludes\doroto-endpoints.php:3195
POST/wp-json/doroto/v1/delete-profileincludes\doroto-endpoints.php:3321

Shortcodes 31

[doroto_help_main_page] includes\doroto-frontend-pages.php:240
[doroto_info_messsages] includes\doroto-repeated-functions.php:68
[doroto_display_tournament_progress] includes\doroto-shortcodes.php:115
[doroto_display_player_statistics] includes\doroto-shortcodes.php:265
[doroto_change_game] includes\doroto-shortcodes.php:398
[doroto_refresh_page] includes\doroto-shortcodes.php:565
[doroto_display_players] includes\doroto-shortcodes.php:841
[doroto_player_filter] includes\doroto-shortcodes.php:931
[doroto_add_player] includes\doroto-shortcodes.php:1082
[doroto_remove_special_group] includes\doroto-shortcodes.php:1244
[doroto_add_special_group] includes\doroto-shortcodes.php:1406
[doroto_add_admin] includes\doroto-shortcodes.php:1603
[doroto_temporary_disable_player] includes\doroto-shortcodes.php:1760
[doroto_temporary_enable_player] includes\doroto-shortcodes.php:1932
[doroto_remove_player] includes\doroto-shortcodes.php:2110
[doroto_display_games] includes\doroto-shortcodes.php:2378
[doroto_games_to_play] includes\doroto-shortcodes.php:2604
[doroto_tournament_parameters] includes\doroto-shortcodes.php:3396
[doroto_tournament_log_link] includes\doroto-shortcodes.php:3506
[doroto_table] includes\doroto-shortcodes.php:3722
[doroto_add_tournament] includes\doroto-shortcodes.php:3770
[doroto_enter_payment_manually] includes\doroto-shortcodes.php:3876
[doroto_remove_payment_manually] includes\doroto-shortcodes.php:4039
[doroto_filter_tournaments] includes\doroto-shortcodes.php:4149
[doroto_allow_presentation] includes\doroto-shortcodes.php:4221
[doroto_display_div_first] includes\doroto-shortcodes.php:4250
[doroto_display_div_last] includes\doroto-shortcodes.php:4268
[doroto_display_other_background_first] includes\doroto-shortcodes.php:4296
[doroto_display_other_background_last] includes\doroto-shortcodes.php:4315
[doroto_floating_help] includes\doroto-shortcodes.php:4353
[doroto_register_add_player] includes\doroto-shortcodes.php:4514
WordPress Hooks 94
actioninitblocks\log-link\log-link.php:32
actioninitdoubles-rotation-tournament.php:43
actionsend_headersdoubles-rotation-tournament.php:56
actionwp_enqueue_scriptsdoubles-rotation-tournament.php:63
actionadmin_enqueue_scriptsdoubles-rotation-tournament.php:69
actionwp_enqueue_scriptsdoubles-rotation-tournament.php:84
actionadmin_enqueue_scriptsdoubles-rotation-tournament.php:107
actioninitdoubles-rotation-tournament.php:136
actioninitdoubles-rotation-tournament.php:218
actionadmin_enqueue_scriptsdoubles-rotation-tournament.php:240
actionwp_enqueue_scriptsdoubles-rotation-tournament.php:241
actionwp_enqueue_scriptsdoubles-rotation-tournament.php:386
actionadmin_enqueue_scriptsdoubles-rotation-tournament.php:387
actionwp_enqueue_scriptsdoubles-rotation-tournament.php:399
actionadmin_noticesdoubles-rotation-tournament.php:689
actionadmin_initdoubles-rotation-tournament.php:767
actionadmin_noticesdoubles-rotation-tournament.php:768
actionadmin_menuincludes\doroto-backend-pages.php:199
actionadmin_initincludes\doroto-backend-pages.php:1285
actionadmin_initincludes\doroto-backend-pages.php:1527
actionadmin_noticesincludes\doroto-backend-pages.php:1595
actionadmin_initincludes\doroto-backend-pages.php:1624
actionwp_dashboard_setupincludes\doroto-backend-pages.php:1706
actionrest_api_initincludes\doroto-endpoints.php:12
actionrest_api_initincludes\doroto-endpoints.php:86
actionrest_api_initincludes\doroto-endpoints.php:143
actionrest_api_initincludes\doroto-endpoints.php:263
actionrest_api_initincludes\doroto-endpoints.php:407
actionrest_api_initincludes\doroto-endpoints.php:428
actionrest_api_initincludes\doroto-endpoints.php:479
actionrest_api_initincludes\doroto-endpoints.php:669
actionrest_api_initincludes\doroto-endpoints.php:904
actionrest_api_initincludes\doroto-endpoints.php:975
actionrest_api_initincludes\doroto-endpoints.php:1086
actionrest_api_initincludes\doroto-endpoints.php:1139
actionrest_api_initincludes\doroto-endpoints.php:1259
actionrest_api_initincludes\doroto-endpoints.php:1385
actionrest_api_initincludes\doroto-endpoints.php:1486
actionrest_api_initincludes\doroto-endpoints.php:1610
actionrest_api_initincludes\doroto-endpoints.php:1688
actionrest_api_initincludes\doroto-endpoints.php:1806
actionrest_api_initincludes\doroto-endpoints.php:1878
actionrest_api_initincludes\doroto-endpoints.php:1976
actionrest_api_initincludes\doroto-endpoints.php:2019
actionrest_api_initincludes\doroto-endpoints.php:2146
actionrest_api_initincludes\doroto-endpoints.php:2221
actionrest_api_initincludes\doroto-endpoints.php:2256
actionrest_api_initincludes\doroto-endpoints.php:2427
actionrest_api_initincludes\doroto-endpoints.php:2566
actionrest_api_initincludes\doroto-endpoints.php:2682
actionrest_api_initincludes\doroto-endpoints.php:2790
actionrest_api_initincludes\doroto-endpoints.php:2816
actionrest_api_initincludes\doroto-endpoints.php:2939
actionrest_api_initincludes\doroto-endpoints.php:3043
actionrest_api_initincludes\doroto-endpoints.php:3186
actionrest_api_initincludes\doroto-endpoints.php:3317
actionsend_headersincludes\doroto-frontend-pages.php:562
actionadmin_post_doroto_change_game_resultincludes\doroto-shortcodes.php:529
actionadmin_post_nopriv_doroto_change_game_resultincludes\doroto-shortcodes.php:530
actionadmin_post_doroto_add_player_to_tournamentincludes\doroto-shortcodes.php:1148
actionadmin_post_nopriv_doroto_add_player_to_tournamentincludes\doroto-shortcodes.php:1149
actionadmin_post_doroto_remove_special_group_to_tournamentincludes\doroto-shortcodes.php:1311
actionadmin_post_nopriv_doroto_remove_special_group_to_tournamentincludes\doroto-shortcodes.php:1312
actionadmin_post_doroto_add_special_group_to_tournamentincludes\doroto-shortcodes.php:1473
actionadmin_post_nopriv_doroto_add_special_group_to_tournamentincludes\doroto-shortcodes.php:1474
actionadmin_post_doroto_add_admin_to_tournamentincludes\doroto-shortcodes.php:1604
actionadmin_post_nopriv_doroto_add_admin_to_tournamentincludes\doroto-shortcodes.php:1605
actionadmin_post_doroto_disable_player_in_tournamentincludes\doroto-shortcodes.php:1835
actionadmin_post_nopriv_doroto_disable_player_in_tournamentincludes\doroto-shortcodes.php:1836
actionadmin_post_doroto_enable_player_in_tournamentincludes\doroto-shortcodes.php:2007
actionadmin_post_nopriv_doroto_enable_player_in_tournamentincludes\doroto-shortcodes.php:2008
actionadmin_post_doroto_remove_player_from_tournamentincludes\doroto-shortcodes.php:2151
actionadmin_post_nopriv_doroto_remove_player_from_tournamentincludes\doroto-shortcodes.php:2152
actionadmin_post_doroto_submit_match_resultincludes\doroto-shortcodes.php:2606
actionadmin_post_nopriv_doroto_submit_match_resultincludes\doroto-shortcodes.php:2607
actionadmin_post_doroto_tournament_parametersincludes\doroto-shortcodes.php:3397
actionadmin_post_nopriv_doroto_tournament_parametersincludes\doroto-shortcodes.php:3398
actionadmin_post_doroto_tournament_parameters_saveincludes\doroto-shortcodes.php:3399
actionadmin_post_nopriv_doroto_tournament_parameters_saveincludes\doroto-shortcodes.php:3400
actionadmin_post_doroto_move_among_tournamentsincludes\doroto-shortcodes.php:3723
actionadmin_post_nopriv_doroto_move_among_tournamentsincludes\doroto-shortcodes.php:3724
actionadmin_post_doroto_enter_payment_in_tournamentincludes\doroto-shortcodes.php:3939
actionadmin_post_nopriv_doroto_enter_payment_in_tournamentincludes\doroto-shortcodes.php:3940
actionadmin_post_doroto_remove_payment_in_tournamentincludes\doroto-shortcodes.php:4102
actionadmin_post_nopriv_doroto_remove_payment_in_tournamentincludes\doroto-shortcodes.php:4103
actioninitincludes\doroto-shortcodes.php:4183
actionadmin_post_doroto_register_add_player_to_tournamentincludes\doroto-shortcodes.php:4609
actionadmin_post_nopriv_doroto_register_add_player_to_tournamentincludes\doroto-shortcodes.php:4610
actionwp_loadedincludes\doroto-tournament-management.php:1309
actionadmin_post_doroto_add_tournament_saveincludes\doroto-tournament-management.php:1371
actionadmin_post_nopriv_doroto_add_tournament_saveincludes\doroto-tournament-management.php:1372
actioninitincludes\doroto-tournament-management.php:1479
actionadmin_post_doroto_submit_final_resultincludes\doroto-tournament-management.php:1630
actionadmin_post_nopriv_doroto_submit_final_resultincludes\doroto-tournament-management.php:1631
Maintenance & Trust

Rotation Tournaments Maintenance & Trust

Maintenance Signals

WordPress version tested6.8.5
Last updatedDec 5, 2025
PHP min version
Downloads4K

Community Trust

Rating0/100
Number of ratings0
Active installs10
Developer Profile

Rotation Tournaments Developer Profile

globus2008

2 plugins · 10 total installs

94
trust score
Avg Security Score
100/100
Avg Patch Time
30 days
View full developer profile
Detection Fingerprints

How We Detect Rotation Tournaments

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

Asset Fingerprints

Asset Paths
/wp-content/plugins/doubles-rotation-tournament/includes/doroto-frontend-styles.css/wp-content/plugins/doubles-rotation-tournament/includes/doroto-backend-styles.css/wp-content/plugins/doubles-rotation-tournament/includes/doroto-frontend-scripts.js/wp-content/plugins/doubles-rotation-tournament/includes/doroto-backend-scripts.js
Script Paths
https://unpkg.com/leaflet@1.9.4/dist/leaflet.jshttps://unpkg.com/leaflet@1.9.4/dist/leaflet.css
Version Parameters
doroto-frontend-scripts?ver=1.0.0

HTML / DOM Fingerprints

CSS Classes
tournament-invitation
Data Attributes
data-tournamentiddata-tournamentnamedata-hideinvitationdata-hidetournamentnamedata-hideplayercountdata-backgroundcolor+1 more
JS Globals
dorotoMapData
REST Endpoints
/wp-json/doroto/v1/tournaments
Shortcode Output
[doroto_tournament[doroto_player_list[doroto_log_link
FAQ

Frequently Asked Questions about Rotation Tournaments