[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fmwtylzpc6o8mZq4e6op_pMftLI3W1rijSe08hziOKZ8":3},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":14,"last_updated":15,"tested_up_to":16,"requires_at_least":17,"requires_php":16,"tags":18,"homepage":16,"download_link":24,"security_score":25,"vuln_count":26,"unpatched_count":26,"last_vuln_date":27,"fetched_at":28,"vulnerabilities":29,"developer":30,"crawl_stats":27,"alternatives":35,"analysis":151,"fingerprints":411},"lesson-scheduler","Lesson Scheduler","1.2.0","Teruo Morimoto","https:\u002F\u002Fprofiles.wordpress.org\u002Fteruo-morimoto\u002F","\u003Cp>You can register the lesson day of your club(music,sports,etc). Member can identify the lesson schedule of other members and register attendance or absence.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fteru03\u002Flesson-scheduler\u002Fwiki\" title=\"Documentation in Japanese\" rel=\"nofollow ugc\">日本語の説明\u003C\u002Fa>\u003C\u002Fp>\n","Just another lesson schedule management plugin. Simple look and feel.",10,4009,20,1,"2019-02-13T07:01:00.000Z","","3.0",[19,20,21,22,23],"footballteam","lesson","orchestra","practice","windband","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Flesson-scheduler.1.2.0.zip",85,0,null,"2026-03-15T15:16:48.613Z",[],{"slug":31,"display_name":7,"profile_url":8,"plugin_count":14,"total_installs":11,"avg_security_score":25,"avg_patch_time_days":32,"trust_score":33,"computed_at":34},"teruo-morimoto",30,84,"2026-04-04T13:09:52.382Z",[36,61,85,109,132],{"slug":37,"name":38,"version":39,"author":40,"author_profile":41,"description":42,"short_description":43,"active_installs":44,"downloaded":45,"rating":46,"num_ratings":47,"last_updated":48,"tested_up_to":49,"requires_at_least":50,"requires_php":51,"tags":52,"homepage":58,"download_link":59,"security_score":60,"vuln_count":26,"unpatched_count":26,"last_vuln_date":27,"fetched_at":28},"plugin-check","Plugin Check (PCP)","1.8.0","WordPress.org","https:\u002F\u002Fprofiles.wordpress.org\u002Fwordpressdotorg\u002F","\u003Cp>Plugin Check is a tool for testing whether your plugin meets the required standards for the WordPress.org plugin directory. With this plugin you will be able to run most of the checks used for new submissions, and check if your plugin meets the requirements.\u003C\u002Fp>\n\u003Cp>Additionally, the tool flags violations or concerns around plugin development best practices, from basic requirements like correct usage of internationalization functions to accessibility, performance, and security best practices.\u003C\u002Fp>\n\u003Cp>The checks can be run either using the WP Admin user interface or WP-CLI:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>To check a plugin using WP Admin, please navigate to the \u003Cem>Tools > Plugin Check\u003C\u002Fem> menu. You need to be able to manage plugins on your site in order to access that screen.\u003C\u002Fli>\n\u003Cli>To check a plugin using WP-CLI, please use the \u003Ccode>wp plugin check\u003C\u002Fcode> command. For example, to check the “Hello Dolly” plugin: \u003Ccode>wp plugin check hello.php\u003C\u002Fcode>\n\u003Cul>\n\u003Cli>Note that by default when using WP-CLI, only static checks can be executed. In order to also include runtime checks, a workaround is currently necessary using the \u003Ccode>--require\u003C\u002Fcode> argument of WP-CLI, to manually load the \u003Ccode>cli.php\u003C\u002Fcode> file within the plugin checker directory before WordPress is loaded. For example: \u003Ccode>wp plugin check hello.php --require=.\u002Fwp-content\u002Fplugins\u002Fplugin-check\u002Fcli.php\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>You could use arbitrary path or URL to check a plugin. For example, to check a plugin from a URL: \u003Ccode>wp plugin check https:\u002F\u002Fexample.com\u002Fplugin.zip\u003C\u002Fcode> or to check a plugin from a path: \u003Ccode>wp plugin check \u002Fpath\u002Fto\u002Fplugin\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The checks are grouped into several categories, so that you can customize which kinds of checks you would like to run on a plugin.\u003C\u002Fp>\n\u003Cp>Keep in mind that this plugin is not a replacement for the manual review process, but it will help you speed up the process of getting your plugin approved for the WordPress.org plugin repository, and it will also help you avoid some common mistakes.\u003C\u002Fp>\n\u003Cp>Even if you do not intend to host your plugin in the WordPress.org directory, you are encouraged to use Plugin Check so that your plugin follows the base requirements and best practices for WordPress plugins.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Plugin Namer Tool\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Plugin Check now includes an AI-powered Plugin Namer tool (accessible via \u003Cem>Tools > Plugin Check Namer\u003C\u002Fem>) that helps plugin authors evaluate plugin names before submission. This tool checks for:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Similarity to existing plugins in the WordPress.org directory\u003C\u002Fli>\n\u003Cli>Potential trademark conflicts with well-known brands\u003C\u002Fli>\n\u003Cli>Compliance with WordPress plugin naming guidelines\u003C\u002Fli>\n\u003Cli>Generic or overly broad naming issues\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The Plugin Namer provides instant feedback with actionable suggestions, helping you choose a clear, unique, and policy-compliant name that stands out in the plugin directory. This feature requires AI provider configuration in the settings.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Important:\u003C\u002Fstrong> The Plugin Namer tool provides guidance only and is not definitive. All plugin name decisions are subject to final review and approval by the WordPress.org Plugins team reviewers.\u003C\u002Fp>\n","Plugin Check is a WordPress.org tool which provides checks to help plugins meet the directory requirements and follow various best practices.",7000,714618,90,31,"2025-12-28T11:57:00.000Z","6.9.4","6.3","7.4",[53,54,55,56,57],"accessibility","performance","plugin-best-practices","security","testing","https:\u002F\u002Fgithub.com\u002FWordPress\u002Fplugin-check","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fplugin-check.1.8.0.zip",100,{"slug":62,"name":63,"version":64,"author":65,"author_profile":66,"description":67,"short_description":68,"active_installs":69,"downloaded":70,"rating":71,"num_ratings":72,"last_updated":73,"tested_up_to":49,"requires_at_least":74,"requires_php":75,"tags":76,"homepage":81,"download_link":82,"security_score":83,"vuln_count":72,"unpatched_count":26,"last_vuln_date":84,"fetched_at":28},"online-lesson-booking-system","Online Lesson Booking","0.9.9","tnomi","https:\u002F\u002Fprofiles.wordpress.org\u002Ftnomi\u002F","\u003Cp>オンラインレッスン予約システム（OLB）は、マンツーマンのオンラインレッスンサイト向けにスケジューラと予約フォームを設置するものです。\u003C\u002Fp>\n\u003Cp>講師はスケジューラを使用してタイムテーブルを設定し、会員はタイムテーブルをクリックして予約を行います。\u003Cbr \u002F>\n講師と会員には、Eメールにて予約やキャンセルの通知が送られます。\u003C\u002Fp>\n\u003Cp>詳しくは、\u003Ca href=\"https:\u002F\u002Folbsys.com\" rel=\"nofollow ugc\">OLBユーザーガイド（日本語）\u003C\u002Fa>をご覧ください。\u003C\u002Fp>\n\u003Cp>Online Lesson Booking system (OLB) was made in order to equip a web site with the reservation-form and scheduler for one-to-one online lesson.\u003C\u002Fp>\n\u003Cp>Teacher (author) sets up a timetable using a scheduler, and member (subscriber) makes a reservation by clicking timetable.\u003Cbr \u002F>\nTeacher and a member are informed by e-mail in the case of reservation and cancellation.\u003C\u002Fp>\n\u003Cp>Visit \u003Ca href=\"https:\u002F\u002Folbsys.com\" rel=\"nofollow ugc\">The User’s Guide (ja)\u003C\u002Fa>\u002F\u003Ca href=\"https:\u002F\u002Folbsys.com\u002Fen\u002F\" rel=\"nofollow ugc\">(en)\u003C\u002Fa> for more info.\u003C\u002Fp>\n","このプラグインはマンツーマンのオンラインレッスン向けにスケジューラと予約フォームを提供するものです。 This plug-in supplies the reservation-form and scheduler for the one-to-one online lesson.",600,35896,80,2,"2026-01-06T09:20:00.000Z","3.5","7.0",[77,78,20,79,80],"appointment","booking","reservation","timetable","https:\u002F\u002Folbsys.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fonline-lesson-booking-system.0.9.9.zip",99,"2019-06-10 00:00:00",{"slug":86,"name":87,"version":88,"author":89,"author_profile":90,"description":91,"short_description":92,"active_installs":93,"downloaded":94,"rating":60,"num_ratings":95,"last_updated":96,"tested_up_to":97,"requires_at_least":98,"requires_php":99,"tags":100,"homepage":106,"download_link":107,"security_score":108,"vuln_count":26,"unpatched_count":26,"last_vuln_date":27,"fetched_at":28},"lesson-bookmark-tutor-lms","Lesson Bookmark for Tutor LMS","2.0.3","Lekcie","https:\u002F\u002Fprofiles.wordpress.org\u002Flekciewp\u002F","\u003Cp>Lesson Bookmark for Tutor LMS is an addon for Tutor LMS plugin that allows you to add a lesson to favorites. Concretely, an add \u002F remove to favorites button is displayed on each lesson page. You will then have a shortcode you can add to the location of your choice.\u003C\u002Fp>\n\u003Cp>Shortcode: \u003Ccode>[tllb_display_favorites]\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>Place the shortcode anywhere to display the list of lessons that you have put in your favorites.\u003C\u002Fp>\n\u003Ch4>What’s new in V2\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>You can now style your markdowns by editting the layout, the text size and color, the button size and color\u003C\u002Fli>\n\u003Cli>Overview the changes you make before saving them\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>A brief Use Case Example\u003C\u002Fh3>\n\u003Col>\n\u003Cli>Go to a lesson and click on “Bookmark”\u003C\u002Fli>\n\u003Cli>Copy and paste the shortcode \u003Ccode>[tllb_display_favorites]\u003C\u002Fcode> wherever you want\u003C\u002Fli>\n\u003Cli>You can remove the favorites by going to a lesson and clicking on “Remove bookmark”\u003C\u002Fli>\n\u003C\u002Fol>\n","Lesson Bookmark allows you to add lessons in the list of your favorite lessons and to display the favorites with [tllb_display_favorites]",400,11623,14,"2024-09-02T16:16:00.000Z","6.6.5","6.0","8.0",[101,102,103,104,105],"tutor-addon","tutor-bookmark","tutor-lms-addon","tutor-lms-bookmark","tutor-lms-lesson-bookmark","https:\u002F\u002Flekcie.com\u002Fplugins-wordpress\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Flesson-bookmark-tutor-lms.2.0.3.zip",92,{"slug":110,"name":111,"version":112,"author":113,"author_profile":114,"description":115,"short_description":116,"active_installs":117,"downloaded":118,"rating":119,"num_ratings":120,"last_updated":121,"tested_up_to":49,"requires_at_least":122,"requires_php":123,"tags":124,"homepage":130,"download_link":131,"security_score":60,"vuln_count":26,"unpatched_count":26,"last_vuln_date":27,"fetched_at":28},"lifterlms-lite-lms-progress-tracker","Lite LMS Progress Tracker by LifterLMS – Simple Course, Membership Site and Content Progress Tracking for WordPress","0.1.1","LifterLMS","https:\u002F\u002Fprofiles.wordpress.org\u002Flifterlms\u002F","\u003Cp>\u003Cstrong>Lite LMS Progress Tracker\u003C\u002Fstrong> by \u003Ca href=\"https:\u002F\u002Flifterlms.com\u002F?utm_source=Lite%20LMS%20Progress%20Tracker%Plugin&utm_medium=README&utm_campaign=Readme%20to%20Sale\" rel=\"nofollow ugc\">LifterLMS\u003C\u002Fa> is a lightweight block plugin that allows users and visitors to track their progress through content on your website.\u003C\u002Fp>\n\u003Cp>With a simple and customizable “Mark Complete” button, you can add progress tracking to any post or page on your site!\u003C\u002Fp>\n\u003Cp>You can even link the “Mark Complete” buttons anywhere you like to create learning paths, tracks, or courses through your website content.\u003C\u002Fp>\n\u003Cp>Think of it as a lightweight Learning Management System (LMS) for a website project that isn’t ready yet for all the advanced functionality in a full featured WordPress LMS plugin.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Key Benefits\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Allow users to track their progress through your website content (even if they’re not logged in)\u003C\u002Fli>\n\u003Cli>Design learning paths through your website content\u003C\u002Fli>\n\u003Cli>Avoid frustrating website visitors by allowing them to track what content they’ve already consumed\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Use Cases\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Create simple online courses\u003C\u002Fli>\n\u003Cli>Allow your membership site members to track their progress through your content\u003C\u002Fli>\n\u003Cli>Empower website visitors to come back and know what they’ve already consumed\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Who Is This For?\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Membership Site Owners\u003C\u002Fli>\n\u003Cli>Course Creators\u003C\u002Fli>\n\u003Cli>Content Creators & Site Owners\u003C\u002Fli>\n\u003Cli>WordPress Professionals\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Documentation\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Flifterlms.com\u002Fdocs\u002Flite-lms-by-lifterlms\u002F?utm_source=Lite%20LMS%20Progress%20Tracker%Plugin&utm_medium=README&utm_campaign=Readme%20to%20Sale\" rel=\"nofollow ugc\">Knowledge Base\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Optional Advanced Integrations\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Lite LMS Progress Tracker is made by \u003Ca href=\"https:\u002F\u002Flifterlms.com\u002F?utm_source=Lite%20LMS%20Progress%20Tracker%Plugin&utm_medium=README&utm_campaign=Readme%20to%20Sale\" rel=\"nofollow ugc\">LifterLMS\u003C\u002Fa>. If you choose to also use Lite LMS Progress Tracker with the \u003Cstrong>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Flifterlms\u002F\" rel=\"ugc\">free open source LifterLMS plugin\u003C\u002Fa>\u003C\u002Fstrong>, you will soon see some additional benefits:\u003Cbr \u002F>\n+ Lite LMS Progress Tracker user tracking data added to the LifterLMS reporting area (coming soon)\u003C\u002Fp>\n","The easiest way to track progress through simple online courses and other types of content on your WordPress website.",300,8145,94,3,"2025-11-27T20:55:00.000Z","5.4","7.3",[125,126,127,128,129],"block","course","elearning","lessons","progress-tracking","https:\u002F\u002Fgithub.com\u002Fgocodebox\u002Flifterlms-lite-lms-progress-tracker","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Flifterlms-lite-lms-progress-tracker.0.1.1.zip",{"slug":133,"name":134,"version":135,"author":136,"author_profile":137,"description":138,"short_description":139,"active_installs":140,"downloaded":141,"rating":26,"num_ratings":26,"last_updated":142,"tested_up_to":143,"requires_at_least":144,"requires_php":16,"tags":145,"homepage":149,"download_link":150,"security_score":25,"vuln_count":26,"unpatched_count":26,"last_vuln_date":27,"fetched_at":28},"course-wizard-for-sensei","Course Wizard for Sensei","1.7.2","Open-DSI","https:\u002F\u002Fprofiles.wordpress.org\u002Fopendsi\u002F","\u003Cp>Create, duplicate and edit Sensei courses, modules, lessons and questions. Instead of having to navigate between 5 or 6 screens full of options, the Wizard will help you design courses all within the same, intuitive interface. Last but not least, your modifications will show instantly on the right side of the wizard screen so you can preview your course, just how students will take it.\u003C\u002Fp>\n\u003Cp>Made for the \u003Ca href=\"https:\u002F\u002Fwoocommerce.com\u002Fproducts\u002Fsensei\u002F\" rel=\"nofollow ugc\">Sensei\u003C\u002Fa> Learning Management System plugin for WordPress.\u003C\u002Fp>\n","Easily design and edit courses with this Wizard for Sensei LMS.",70,4380,"2019-02-12T16:44:00.000Z","5.0.25","4.7",[126,20,146,147,148],"module","sensei","wizard","http:\u002F\u002Fgit.open-dsi.fr\u002Fwordpress-plugin\u002Fcourse-wizard-for-sensei","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcourse-wizard-for-sensei.zip",{"attackSurface":152,"codeSignals":220,"taintFlows":355,"riskAssessment":399,"analyzedAt":410},{"hooks":153,"ajaxHandlers":204,"restRoutes":210,"shortcodes":211,"cronEvents":219,"entryPointCount":120,"unprotectedCount":14},[154,160,164,168,171,175,179,183,188,192,196,199],{"type":155,"name":156,"callback":157,"file":158,"line":159},"action","init","create_lesson_schedules","lesson_scheduler.php",39,{"type":155,"name":161,"callback":162,"file":158,"line":163},"save_post","lesson_schedule_meta_update",156,{"type":155,"name":165,"callback":166,"priority":11,"file":158,"line":167},"wp_insert_post","lesson_scheduler_set_auto_title",565,{"type":155,"name":156,"callback":169,"file":158,"line":170},"lesson_scheduler_load_textdomain",622,{"type":155,"name":172,"callback":173,"file":158,"line":174},"wp_print_scripts","lesson_scheduler_add_script",642,{"type":155,"name":176,"callback":177,"file":158,"line":178},"wp_print_styles","lesson_scheduler_add_styles",659,{"type":155,"name":180,"callback":181,"file":158,"line":182},"admin_head","lesson_scheduler_myplugin_admin_menu",672,{"type":184,"name":185,"callback":186,"priority":11,"file":158,"line":187},"filter","posts_orderby","lesson_scheduler_posts_orderby",688,{"type":184,"name":189,"callback":190,"priority":11,"file":158,"line":191},"posts_where_paged","lesson_scheduler_post_where",713,{"type":184,"name":185,"callback":193,"priority":11,"file":194,"line":195},"lesson_scheduler_orderby_mobile","lesson_scheduler_mobile.php",175,{"type":184,"name":189,"callback":197,"priority":11,"file":194,"line":198},"lesson_scheduler_post_where_mobile",200,{"type":155,"name":200,"callback":201,"file":202,"line":203},"admin_menu","lesson_scheduler_add_menu","lesson_scheduler_options.php",4,[205],{"action":206,"nopriv":207,"callback":208,"hasNonce":207,"hasCapCheck":207,"file":158,"line":209},"get_lesson_detail",false,"lesson_scheduler_get_lesson_detail",739,[],[212,216],{"tag":213,"callback":214,"file":158,"line":215},"lesson scheduler","disp_lesson_scheduler",193,{"tag":217,"callback":214,"file":158,"line":218},"lesson_scheduler",194,[],{"dangerousFunctions":221,"sqlUsage":222,"outputEscaping":224,"fileOperations":26,"externalRequests":26,"nonceChecks":14,"capabilityChecks":14,"bundledLibraries":354},[],{"prepared":26,"raw":26,"locations":223},[],{"escaped":26,"rawEcho":225,"locations":226},69,[227,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,265,267,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,299,301,303,305,307,309,311,313,315,316,317,318,320,322,323,325,326,328,330,333,335,336,338,339,341,343,345,347,348,349,350,352],{"file":158,"line":228,"context":229},107,"raw output",{"file":158,"line":231,"context":229},112,{"file":158,"line":233,"context":229},114,{"file":158,"line":235,"context":229},118,{"file":158,"line":237,"context":229},127,{"file":158,"line":239,"context":229},132,{"file":158,"line":241,"context":229},141,{"file":158,"line":243,"context":229},147,{"file":158,"line":245,"context":229},149,{"file":158,"line":247,"context":229},245,{"file":158,"line":249,"context":229},302,{"file":158,"line":251,"context":229},303,{"file":158,"line":253,"context":229},305,{"file":158,"line":255,"context":229},314,{"file":158,"line":257,"context":229},322,{"file":158,"line":259,"context":229},330,{"file":158,"line":261,"context":229},339,{"file":158,"line":263,"context":229},340,{"file":158,"line":263,"context":229},{"file":158,"line":266,"context":229},344,{"file":158,"line":266,"context":229},{"file":158,"line":269,"context":229},363,{"file":158,"line":271,"context":229},364,{"file":158,"line":273,"context":229},365,{"file":158,"line":275,"context":229},366,{"file":158,"line":277,"context":229},367,{"file":158,"line":279,"context":229},411,{"file":158,"line":281,"context":229},413,{"file":158,"line":283,"context":229},415,{"file":158,"line":285,"context":229},417,{"file":158,"line":287,"context":229},419,{"file":158,"line":289,"context":229},421,{"file":158,"line":291,"context":229},423,{"file":158,"line":293,"context":229},528,{"file":158,"line":295,"context":229},552,{"file":158,"line":297,"context":229},772,{"file":194,"line":159,"context":229},{"file":194,"line":300,"context":229},60,{"file":194,"line":302,"context":229},65,{"file":194,"line":304,"context":229},67,{"file":194,"line":306,"context":229},75,{"file":194,"line":308,"context":229},82,{"file":194,"line":310,"context":229},88,{"file":194,"line":312,"context":229},96,{"file":194,"line":314,"context":229},98,{"file":194,"line":314,"context":229},{"file":194,"line":83,"context":229},{"file":194,"line":83,"context":229},{"file":194,"line":319,"context":229},172,{"file":202,"line":321,"context":229},28,{"file":202,"line":321,"context":229},{"file":202,"line":324,"context":229},37,{"file":202,"line":324,"context":229},{"file":202,"line":327,"context":229},101,{"file":202,"line":329,"context":229},178,{"file":331,"line":332,"context":229},"template-lessonscheduler.php",27,{"file":331,"line":334,"context":229},36,{"file":331,"line":324,"context":229},{"file":331,"line":337,"context":229},38,{"file":331,"line":159,"context":229},{"file":331,"line":340,"context":229},40,{"file":331,"line":342,"context":229},44,{"file":331,"line":344,"context":229},45,{"file":331,"line":346,"context":229},61,{"file":331,"line":310,"context":229},{"file":331,"line":119,"context":229},{"file":331,"line":314,"context":229},{"file":331,"line":351,"context":229},115,{"file":331,"line":353,"context":229},126,[],[356,373,381,391],{"entryPoint":357,"graph":358,"unsanitizedCount":14,"severity":372},"disp_lesson_scheduler_pc (lesson_scheduler.php:211)",{"nodes":359,"edges":370},[360,365],{"id":361,"type":362,"label":363,"file":158,"line":364},"n0","source","$_SERVER",242,{"id":366,"type":367,"label":368,"file":158,"line":247,"wp_function":369},"n1","sink","echo() [XSS]","echo",[371],{"from":361,"to":366,"sanitized":207},"medium",{"entryPoint":374,"graph":375,"unsanitizedCount":14,"severity":372},"disp_lesson_scheduler_mobile (lesson_scheduler_mobile.php:3)",{"nodes":376,"edges":379},[377,378],{"id":361,"type":362,"label":363,"file":194,"line":324},{"id":366,"type":367,"label":368,"file":194,"line":159,"wp_function":369},[380],{"from":361,"to":366,"sanitized":207},{"entryPoint":382,"graph":383,"unsanitizedCount":26,"severity":390},"\u003Clesson_scheduler> (lesson_scheduler.php:0)",{"nodes":384,"edges":387},[385,386],{"id":361,"type":362,"label":363,"file":158,"line":364},{"id":366,"type":367,"label":368,"file":158,"line":247,"wp_function":369},[388],{"from":361,"to":366,"sanitized":389},true,"low",{"entryPoint":392,"graph":393,"unsanitizedCount":14,"severity":390},"\u003Clesson_scheduler_mobile> (lesson_scheduler_mobile.php:0)",{"nodes":394,"edges":397},[395,396],{"id":361,"type":362,"label":363,"file":194,"line":324},{"id":366,"type":367,"label":368,"file":194,"line":159,"wp_function":369},[398],{"from":361,"to":366,"sanitized":207},{"summary":400,"deductions":401},"The \"lesson-scheduler\" v1.2.0 plugin presents a mixed security posture.  While it demonstrates good practices such as using prepared statements for all SQL queries and avoiding dangerous functions and file operations, there are significant areas of concern.  The presence of an unprotected AJAX handler represents a substantial entry point that could be exploited by unauthenticated users, leading to potential privilege escalation or other malicious actions.  Furthermore, the complete lack of output escaping on 69 identified output points is a critical flaw, making the plugin highly susceptible to Cross-Site Scripting (XSS) vulnerabilities.  The vulnerability history shows no known CVEs, which is positive, but this could also indicate a lack of thorough security auditing or that vulnerabilities have simply not been discovered or reported yet. The plugin's strengths lie in its avoidance of common pitfalls like raw SQL and external requests, but the identified unprotected AJAX handler and pervasive unescaped output create a notable risk.",[402,404,407],{"reason":403,"points":11},"Unprotected AJAX handler",{"reason":405,"points":406},"No output escaping",8,{"reason":408,"points":409},"Unsanitized paths in taint analysis",7,"2026-03-17T00:54:37.495Z",{"wat":412,"direct":423},{"assetPaths":413,"generatorPatterns":417,"scriptPaths":418,"versionParams":419},[414,415,416],"\u002Fwp-content\u002Fplugins\u002Flesson-scheduler\u002Flesson_scheduler_mobile.css","\u002Fwp-content\u002Fplugins\u002Flesson-scheduler\u002Flesson_scheduler.css","\u002Fwp-content\u002Fplugins\u002Flesson-scheduler\u002Flesson_scheduler.js",[],[416],[420,421,422],"lesson-scheduler\u002Flesson_scheduler.css?ver=","lesson-scheduler\u002Flesson_scheduler_mobile.css?ver=","lesson-scheduler\u002Flesson_scheduler.js?ver=",{"cssClasses":424,"htmlComments":426,"htmlAttributes":428,"restEndpoints":434,"jsGlobals":435,"shortcodeOutput":436},[217,425],"tablelesson-2",[427],"\u003C!-- 自分自身のURLを取得する -->",[429,430,431,432,433,429],"id=\"lesson_datepicker\"","name=\"lesson_schedule_field1\"","name=\"lesson_schedule_field2\"","name=\"lesson_schedule_field3\"","name=\"lesson_schedule_field4\"",[],[],[437,438],"[lesson scheduler]","[lesson_scheduler]"]