WP Manifestindependent plugin directory
manifest / developer / dilaz-panel

Dilaz Panel WP Registry grade D+. High-severity findings · 2 findingsWP RegistryHigh-severity findings · 2 findingsOpen the reportD+

A WordPress plugin that adds an options panel framework for WordPress themes and plugins.

★ 23stars
11release downloads
v3.0.3latest · 1 year ago

Install

Download dilaz-panel.zip From the v2.8.43 release on GitHub, Aug 16, 2023

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/rodgath/dilaz-panel/releases/download/v2.8.43/dilaz-panel.zip
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

The best and the easiest WordPress options panel for themes and plugins.

Feel free to use this admin options panel in your premium and commercial projects.

Demo Screenshot

How to use

  1. Download and install Dilaz Panel plugin.
  2. Download Dilaz Panel Options and add it into your WordPress project (theme or plugin).

Example of how to use Dilaz Panel in a theme

Download and install Dilaz Demo Theme to see a useful example on how to integrate this dilaz panel into your WordPress theme development project.

Example of how to use Dilaz Panel in a plugin

Download and install Dilaz Demo Plugin to see a useful example on how to integrate this dilaz panel into your WordPress plugin development project.

Features

  • Fault Tolerant - Continues to working effectively even when a component is faulty.
  • Backward Compatible - Fairly interoperable with WP older legacy versions and your own option settings.
  • Extendability - Easy to update or create new functionality. Future growth considered.
  • Reliability - Full operational under stated WP conditions. No surprises.
  • Maintainability - Easy to maintain, update, correct defects or repair faulty parts.
  • Easy updating - Your settings will not be part of core files.
  • AddOns availability - Ability to create AddOns using Dilaz Panel (hooks and filters).
  • Both Plugins & Themes - Can be used in/with any WordPress theme or plugin.

Option Fields

  • Heading
  • Sub-heading
  • Info
  • Text
  • Textarea
  • Dropdown Select
  • Multiselect/Multiple Select
  • Post Select
  • Term/Taxonomy/Category Select
  • User Select
  • Radio Select
  • Image Select
  • Button & Buttonset
  • Switch Buttons
  • Checkbox
  • Multicheck/Multiple Checkboxes
  • Slider Select
  • Range Slider Select
  • Color Picker
  • Multiple Color Picker
  • Font Select
  • File Upload - Image, Audio, Video, Document, Spreadsheet, Interactive, Text, Archive, Code
  • Background Select
    • Files - Image, Audio, Video, Document, Spreadsheet, Interactive, Text, Archive, Code
    • Attributes - Size, Repeat, Position, Attachment, Origin, Color
  • WordPress Editor
  • Import
  • Export

File Structure

wp-content/plugins/dilaz-panel/  # → Dilaz panel root directory
├── assets/                      # → Plugin ssets
│   ├── css/                     # → Stylesheets
│   ├── fonts/                   # → Fonts
│   ├── images/                  # → Images
│   └── js/                      # → JavaScripts
├── includes/                    # → Includes
│   ├── defaults.php             # → Defaults (never edit)
│   ├── export.php               # → Export and Import file for panel options (never edit)
│   ├── fields.php               # → Panel option fields (never edit)
│   └── functions.php            # → Panel functions (never edit)
└── dilaz-panel.php              # → Index file (never edit)

Download

To get a local working copy of the development repository, do:

git clone https://github.com/Rodgath/dilaz-panel.git

Alternatively, you can download the latest development version as a tarball as follows:

wget --content-disposition https://github.com/Rodgath/dilaz-panel/tarball/main

OR

curl -LJO https://github.com/Rodgath/dilaz-panel/tarball/main

Releases

Newest 25 of 38 recorded releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v3.0.3 latest
Sep 19, 2025 1 year ago
tag only
—
Aug 2, 2025 1 year ago
tag only
—
May 1, 2025 1 year ago
tag only
—
Feb 3, 2025 1 year ago
tag only
—
Aug 16, 2023 3 years ago
dilaz-panel.zip
11
Aug 14, 2022 4 years ago
tag only
—
Jun 1, 2021 5 years ago
tag only
—
Aug 8, 2019 7 years ago
tag only
—
Jul 22, 2019 7 years ago
tag only
—
Jul 1, 2019 7 years ago
tag only
—
Jun 7, 2019 7 years ago
tag only
—
Apr 21, 2019 7 years ago
tag only
—
Apr 16, 2019 7 years ago
tag only
—
Apr 13, 2019 7 years ago
tag only
—
Apr 2, 2019 7 years ago
tag only
—
Mar 20, 2019 7 years ago
tag only
—
Mar 11, 2019 7 years ago
tag only
—
Jan 31, 2019 7 years ago
tag only
—
Jan 29, 2019 7 years ago
tag only
—
Jan 28, 2019 7 years ago
tag only
—
Jan 26, 2019 7 years ago
tag only
—
Jan 16, 2019 7 years ago
tag only
—
Jan 14, 2019 7 years ago
tag only
—
Jan 14, 2019 7 years ago
tag only
—
Jan 14, 2019 7 years ago
tag only
—
All releases on GitHub →
D+ grade

Security

Dilaz Panel 2.8.43 · audited by WP Registry

High-severity findings.

2 high
Audited release
2.8.43
Findings
2
Worst severity
high
Content hash
da61b66bb55a9035f5ad7593…

Findings

  • high CSRF on save/reset/import/export because nonce checks are isset() || wp_verify_nonce()

    csrf

    saveOptions, resetOptions, exportOptions, and importOptions all treat a present nonce field as success: `if (isset($form_data['security']) || wp_verify_nonce(...))` (and the same OR for dilaz_export_nonce / dilaz_import_nonce). PHP short-circuits, so wp_verify_nonce is never consulted when the attacker includes security=1 (or any value). saveOptions is the handler that still has an options_save_cap loop, so a Subscriber is normally denied, but any user who does have that cap (typically an Administrator) can be CSRF'd from a third-party page: parse_str($_POST['form_data']) then update_option($this->optionName, $merged_options). code and editor fields keep raw HTML for current_user_can('unfiltered_html') (true for admins), so the CSRF writes script into options the consuming theme echoes on the frontend. Export/import nonces are additionally minted with basename(includes/fields.php) and verified with basename(dilaz-panel.php), so a legitimate nonce would not verify even with &&. Observable consequence: cross-site change of the Dilaz option (and, via the same pattern, the reset/import option writes already rated critical).

    dilaz-panel.php:1326,1375,1804,1840

    Recommendation

    Use check_ajax_referer() or `if (!wp_verify_nonce(...)) wp_die()`. Never combine isset() with || against a verify call. Mint and verify the same nonce action in one file. Pair every state-changing AJAX handler with current_user_can(options_save_cap).

  • high PHP object injection and unauthenticated-as-subscriber data queries in querySelect

    object_injection

    DilazPanelFunctions (loaded from DilazPanel::init) registers wp_ajax_dilaz_panel_query_select and wp_ajax_dilaz_panel_get_post_titles with no nonce and no current_user_can. querySelect takes $_POST['query_args'], base64-decodes it, and unserialize()s the result with no allowed_classes restriction, then wp_parse_args's that into get_posts / get_users / get_terms. Any logged-in user, including Subscriber, can POST a crafted serialized object (object injection / POP if a gadget exists in WordPress or another plugin) or a serialized array that lists all users (query_type=user, returns ID+nickname) or private/draft posts. getPostTitles accepts selected[] post IDs and returns titles for publish/draft/pending/future/private posts of type 'any' with posts_per_page=-1. Observable consequence: user enumeration, private-content title disclosure, and unserialize of attacker-controlled bytes on every Subscriber session. The LIKE concatenation of esc_like($_POST['q']) into posts_where is additionally unsafe construction (magic-quotes still apply; not rated as SQLi).

    includes/functions.php:24-175

    Recommendation

    Add check_ajax_referer and current_user_can(options_view_cap or edit_posts) to both handlers. Replace unserialize(base64_decode($query_args)) with json_decode or unserialize(..., ['allowed_classes' => false]) of a server-side allowlisted argument set — do not accept arbitrary WP_Query/get_users args from the client. Restrict getPostTitles to posts the user can read. Use $wpdb->prepare for the LIKE clause.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.