sec(core): implementasi modul security headers, cloaking versi wp, sanitasi ketat settings api, dan direct access guard
This commit is contained in:
+67
-29
@@ -3,6 +3,8 @@
|
||||
* Modul Pengaturan Menu Admin, Toolbar, dan Settings API EduKarsa
|
||||
*/
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
function edukarsa_admin_menu() {
|
||||
add_menu_page(
|
||||
'EduKarsa',
|
||||
@@ -43,36 +45,77 @@ function edukarsa_admin_bar_shortcut( $wp_admin_bar ) {
|
||||
}
|
||||
add_action( 'admin_bar_menu', 'edukarsa_admin_bar_shortcut', 80 );
|
||||
|
||||
// SANITASI CHECKBOX (BOOLEAN ENFORCEMENT)
|
||||
function edukarsa_sanitize_checkbox( $val ) {
|
||||
return ( ! empty( $val ) && ( $val === 1 || $val === '1' || $val === true ) ) ? 1 : 0;
|
||||
}
|
||||
|
||||
// REGISTRASI SELURUH PENGATURAN DENGAN SANITASI KETAT
|
||||
function edukarsa_register_settings() {
|
||||
$options = array(
|
||||
'edukarsa_font_choice', 'edukarsa_primary_color', 'edukarsa_secondary_color', 'edukarsa_heading_color',
|
||||
// 1. Toggles & Checkboxes
|
||||
$checkboxes = array(
|
||||
'edukarsa_tampil_bilingual', 'edukarsa_lang_en', 'edukarsa_lang_ar', 'edukarsa_lang_zh', 'edukarsa_lang_ja',
|
||||
'edukarsa_tampil_accessibility',
|
||||
'edukarsa_tampil_slider', 'edukarsa_tampil_stats', 'edukarsa_tampil_about', 'edukarsa_tampil_milestone', 'edukarsa_tampil_program', 'edukarsa_tampil_video', 'edukarsa_tampil_keunggulan', 'edukarsa_tampil_cta', 'edukarsa_tampil_faq', 'edukarsa_tampil_news',
|
||||
'edukarsa_header_logo',
|
||||
'edukarsa_milestone_subtitle', 'edukarsa_milestone_title',
|
||||
'edukarsa_program_subtitle', 'edukarsa_program_title',
|
||||
'edukarsa_keunggulan_subtitle', 'edukarsa_keunggulan_title',
|
||||
'edukarsa_faq_subtitle', 'edukarsa_faq_title',
|
||||
'edukarsa_news_title',
|
||||
'edukarsa_tampil_accessibility', 'edukarsa_tampil_slider', 'edukarsa_tampil_stats', 'edukarsa_tampil_about',
|
||||
'edukarsa_tampil_milestone', 'edukarsa_tampil_program', 'edukarsa_tampil_video', 'edukarsa_tampil_keunggulan',
|
||||
'edukarsa_tampil_cta', 'edukarsa_tampil_faq', 'edukarsa_tampil_news', 'edukarsa_sidebar_tampil_search',
|
||||
'edukarsa_sidebar_tampil_cta', 'edukarsa_sidebar_tampil_html', 'edukarsa_sidebar_tampil_recent',
|
||||
'edukarsa_sidebar_tampil_cats', 'edukarsa_tampil_fb', 'edukarsa_tampil_ig', 'edukarsa_tampil_yt',
|
||||
'edukarsa_tampil_tiktok', 'edukarsa_tampil_x'
|
||||
);
|
||||
foreach ( $checkboxes as $cb ) {
|
||||
register_setting( 'edukarsa_settings_group', $cb, array( 'sanitize_callback' => 'edukarsa_sanitize_checkbox' ) );
|
||||
}
|
||||
|
||||
// 2. Colors
|
||||
$colors = array( 'edukarsa_primary_color', 'edukarsa_secondary_color', 'edukarsa_heading_color', 'edukarsa_mid_bg_color' );
|
||||
foreach ( $colors as $col ) {
|
||||
register_setting( 'edukarsa_settings_group', $col, array( 'sanitize_callback' => 'sanitize_hex_color' ) );
|
||||
}
|
||||
|
||||
// 3. URLs
|
||||
$urls = array(
|
||||
'edukarsa_header_logo', 'edukarsa_foto_kepsek', 'edukarsa_link_about', 'edukarsa_mid_bg_image',
|
||||
'edukarsa_video1_thumb', 'edukarsa_video1_url', 'edukarsa_video2_thumb', 'edukarsa_video2_url',
|
||||
'edukarsa_cta_bg', 'edukarsa_cta_btn_url', 'edukarsa_sidebar_cta_btn_url', 'edukarsa_sidebar_banner_img',
|
||||
'edukarsa_sidebar_banner_url', 'edukarsa_footer_logo', 'edukarsa_footer_fb', 'edukarsa_footer_ig',
|
||||
'edukarsa_footer_yt', 'edukarsa_footer_tiktok', 'edukarsa_footer_x'
|
||||
);
|
||||
foreach ( $urls as $url ) {
|
||||
register_setting( 'edukarsa_settings_group', $url, array( 'sanitize_callback' => 'esc_url_raw' ) );
|
||||
}
|
||||
|
||||
// 4. Numbers & Integers
|
||||
register_setting( 'edukarsa_settings_group', 'edukarsa_sidebar_recent_count', array( 'sanitize_callback' => 'absint' ) );
|
||||
|
||||
// 5. Emails
|
||||
register_setting( 'edukarsa_settings_group', 'edukarsa_footer_email', array( 'sanitize_callback' => 'sanitize_email' ) );
|
||||
|
||||
// 6. Safe HTML Textareas
|
||||
$safe_html = array(
|
||||
'edukarsa_teks_sambutan', 'edukarsa_sidebar_html_content', 'edukarsa_footer_alamat',
|
||||
'edukarsa_footer_jam', 'edukarsa_footer_desc'
|
||||
);
|
||||
foreach ( $safe_html as $html ) {
|
||||
register_setting( 'edukarsa_settings_group', $html, array( 'sanitize_callback' => 'wp_kses_post' ) );
|
||||
}
|
||||
|
||||
// 7. General Text Inputs
|
||||
$text_inputs = array(
|
||||
'edukarsa_font_choice', 'edukarsa_milestone_subtitle', 'edukarsa_milestone_title',
|
||||
'edukarsa_program_subtitle', 'edukarsa_program_title', 'edukarsa_keunggulan_subtitle',
|
||||
'edukarsa_keunggulan_title', 'edukarsa_faq_subtitle', 'edukarsa_faq_title', 'edukarsa_news_title',
|
||||
'edukarsa_stat1_angka', 'edukarsa_stat1_label', 'edukarsa_stat1_desc', 'edukarsa_stat1_icon',
|
||||
'edukarsa_stat2_angka', 'edukarsa_stat2_label', 'edukarsa_stat2_desc', 'edukarsa_stat2_icon',
|
||||
'edukarsa_stat3_angka', 'edukarsa_stat3_label', 'edukarsa_stat3_desc', 'edukarsa_stat3_icon',
|
||||
'edukarsa_foto_kepsek', 'edukarsa_nama_kepsek', 'edukarsa_subtitle_about', 'edukarsa_teks_sambutan', 'edukarsa_link_about',
|
||||
'edukarsa_video1_thumb', 'edukarsa_video1_url', 'edukarsa_video2_thumb', 'edukarsa_video2_url',
|
||||
'edukarsa_mid_bg_image', 'edukarsa_mid_bg_color',
|
||||
'edukarsa_cta_bg', 'edukarsa_cta_title', 'edukarsa_cta_btn_teks', 'edukarsa_cta_btn_url',
|
||||
'edukarsa_sidebar_tampil_search', 'edukarsa_sidebar_tampil_cta', 'edukarsa_sidebar_cta_badge', 'edukarsa_sidebar_cta_title', 'edukarsa_sidebar_cta_desc', 'edukarsa_sidebar_cta_btn_text', 'edukarsa_sidebar_cta_btn_url',
|
||||
'edukarsa_sidebar_tampil_html', 'edukarsa_sidebar_html_title', 'edukarsa_sidebar_html_content',
|
||||
'edukarsa_sidebar_tampil_recent', 'edukarsa_sidebar_recent_title', 'edukarsa_sidebar_recent_count',
|
||||
'edukarsa_sidebar_tampil_cats', 'edukarsa_sidebar_cats_title',
|
||||
'edukarsa_sidebar_banner_img', 'edukarsa_sidebar_banner_url',
|
||||
'edukarsa_footer_logo', 'edukarsa_footer_desc', 'edukarsa_footer_alamat', 'edukarsa_footer_telp', 'edukarsa_footer_email', 'edukarsa_footer_jam',
|
||||
'edukarsa_wa_btn_text', 'edukarsa_wa_default_msg',
|
||||
'edukarsa_tampil_fb', 'edukarsa_footer_fb', 'edukarsa_tampil_ig', 'edukarsa_footer_ig', 'edukarsa_tampil_yt', 'edukarsa_footer_yt', 'edukarsa_tampil_tiktok', 'edukarsa_footer_tiktok', 'edukarsa_tampil_x', 'edukarsa_footer_x',
|
||||
'edukarsa_footer_copyright', 'edukarsa_custom_css'
|
||||
'edukarsa_nama_kepsek', 'edukarsa_subtitle_about', 'edukarsa_cta_title', 'edukarsa_cta_btn_teks',
|
||||
'edukarsa_sidebar_cta_badge', 'edukarsa_sidebar_cta_title', 'edukarsa_sidebar_cta_desc',
|
||||
'edukarsa_sidebar_cta_btn_text', 'edukarsa_sidebar_html_title', 'edukarsa_sidebar_recent_title',
|
||||
'edukarsa_sidebar_cats_title', 'edukarsa_footer_telp', 'edukarsa_wa_btn_text',
|
||||
'edukarsa_wa_default_msg', 'edukarsa_footer_copyright'
|
||||
);
|
||||
foreach ( $options as $opt ) { register_setting( 'edukarsa_settings_group', $opt ); }
|
||||
foreach ( $text_inputs as $txt ) {
|
||||
register_setting( 'edukarsa_settings_group', $txt, array( 'sanitize_callback' => 'sanitize_text_field' ) );
|
||||
}
|
||||
}
|
||||
add_action( 'admin_init', 'edukarsa_register_settings' );
|
||||
|
||||
@@ -169,8 +212,6 @@ function edukarsa_settings_page_html() {
|
||||
</style>
|
||||
|
||||
<div class="wrap edukarsa-admin-wrap">
|
||||
|
||||
<!-- HEADER TOPBAR: JUDUL + INSTANT DASHBOARD LANGUAGE SWITCHER -->
|
||||
<div class="edukarsa-top-toolbar">
|
||||
<h1 style="font-weight: 800; font-size: 24px; margin: 0;">
|
||||
<?php echo esc_html( edukarsa_t( 'Pengaturan Tema EduKarsa', 'EduKarsa Theme Settings' ) ); ?>
|
||||
@@ -190,7 +231,6 @@ function edukarsa_settings_page_html() {
|
||||
<?php settings_fields( 'edukarsa_settings_group' ); ?>
|
||||
|
||||
<div class="edukarsa-admin-layout">
|
||||
|
||||
<div class="edukarsa-admin-main">
|
||||
<div class="edukarsa-top-toolbar" style="justify-content: flex-end; margin-bottom: 12px;">
|
||||
<div class="edukarsa-accordion-actions">
|
||||
@@ -771,7 +811,6 @@ function edukarsa_about_page_html() {
|
||||
if ( ! current_user_can( 'manage_options' ) ) return;
|
||||
?>
|
||||
<div class="wrap edukarsa-admin-wrap" style="max-width: 1000px; margin-top: 20px;">
|
||||
|
||||
<div style="background: linear-gradient(135deg, #0f2b5c 0%, #1a73e8 100%); color: #ffffff; padding: 45px 40px; border-radius: 16px; box-shadow: 0 15px 35px rgba(15,43,92,0.18); margin-bottom: 30px; position: relative; overflow: hidden;">
|
||||
<div style="position: absolute; top: -20px; right: -20px; font-size: 140px; opacity: 0.08; font-weight: 900; user-select: none;">🎓</div>
|
||||
<span style="display: inline-block; background: rgba(255,255,255,0.2); padding: 4px 14px; border-radius: 20px; font-size: 11px; font-weight: 800; letter-spacing: 1px; text-transform: uppercase; margin-bottom: 15px;"><?php echo esc_html( edukarsa_t( 'WordPress Theme Khusus Sekolah & Kampus', 'Dedicated WordPress Theme for Schools & Universities' ) ); ?></span>
|
||||
@@ -862,7 +901,6 @@ function edukarsa_about_page_html() {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user