[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fyQw4hucl_BdKzNsDGhVuwy-B18dtslXSCosDZBsl59Q":3},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":11,"num_ratings":11,"last_updated":13,"tested_up_to":14,"requires_at_least":15,"requires_php":16,"tags":17,"homepage":21,"download_link":22,"security_score":23,"vuln_count":11,"unpatched_count":11,"last_vuln_date":24,"fetched_at":25,"vulnerabilities":26,"developer":27,"crawl_stats":24,"alternatives":35,"analysis":58,"fingerprints":218},"wp-mkd-air-quality","MKD Air Quality","1.1.2","Darko G.","https:\u002F\u002Fprofiles.wordpress.org\u002Fdarkog\u002F","\u003Cp>The Air Quality data is provided by the Ministry of environment and physical planning of R. Macedonia and will only work for the country.\u003C\u002Fp>\n\u003Cp>The data is measured by physical stations across the country and is provided via RESTful service. More information can be found on the AIR Quality portal:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"http:\u002F\u002Fair.moepp.gov.mk\u002F?page_id=1351&lang=en\" rel=\"nofollow ugc\">Governemnt Air Quality Portal\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The data is cached for 30 minutes by the plugin and it’s refreshed hourly.\u003C\u002Fp>\n\u003Cp>Friendly Note: The plugin is country specific and will not work with any other countries.\u003C\u002Fp>\n\u003Ch3>Examples\u003C\u002Fh3>\n\u003Cp>Just a few examples out of a lot combinations 🙂\u003C\u002Fp>\n\u003Ch3>Line Chart\u003C\u002Fh3>\n\u003Cp>Defaults: (\u003Ccode>stations_selector=1\u003C\u002Fcode>, \u003Ccode>station=Centar\u003C\u002Fcode>, \u003Ccode>timemode=Week\u003C\u002Fcode>, \u003Ccode>date=today\u003C\u002Fcode>, \u003Ccode>unit=PM10\u003C\u002Fcode>, \u003Ccode>xlabels=0\u003C\u002Fcode>)\u003C\u002Fp>\n\u003Cul>\n\u003Cli>PM10 data for today, show the time labels on the X axis. Default station is Centar.\u003Cbr \u002F>\n[mkdaiq_chart timemode=’Day’ xlabels=1]\u003C\u002Fli>\n\u003Cli>PM10 data for the last 7 days, hide the time labels on the X axis. Default station is Rektorat\u003Cbr \u002F>\n[mkdaiq_chart station=’Rektorat’ unit=’PM10′ timemode=’Week’]\u003C\u002Fli>\n\u003Cli>Show Carbon monoxide levels from Kicevo for the past 7 days. Hide the other stations dropdown\u003Cbr \u002F>\n[mkdaiq_chart station=’Kicevo’ stations_selector=0  unit=’CO’ timemode=’Week’]\u003C\u002Fli>\n\u003Cli>PM10 from Bitola1 on the 2020 New Year’s day. show the time labels on the X axis.\u003Cbr \u002F>\n[mkdaiq_chart station=’Bitola1′ unit=’PM10′ timemode=’Day’ date=’2020-01-01′ xlabels=1]\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>MAP\u003C\u002Fh3>\n\u003Cp>Defaults: (\u003Ccode>date=today\u003C\u002Fcode>, \u003Ccode>unit=PM10\u003C\u002Fcode>, \u003Ccode>zoom=8\u003C\u002Fcode>, \u003Ccode>units_selector=1\u003C\u002Fcode>)\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Draw PM10 map for today, hide the units selector.\u003Cbr \u002F>\n[mkdaiq_map date=’today’ units_selector=0 unit=’PM10′]\u003C\u002Fli>\n\u003Cli>Draw PM10 map with zoom 8 for 2020 New Year’s day and show units field.\u003Cbr \u002F>\n[mkdaiq_map date=’2020-01-01′ zoom=8]\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>RANK\u003C\u002Fh3>\n\u003Cp>Defaults: (\u003Ccode>date=today\u003C\u002Fcode>, \u003Ccode>unit=PM10\u003C\u002Fcode>, \u003Ccode>type=last\u003C\u002Fcode>, \u003Ccode>order=1\u003C\u002Fcode>)\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Draw PM10 rank table for today based on the last known result ordered by most polluted\u003Cbr \u002F>\n[mkdaiq_rank date=’today’ timemode=’Day’ type=’last’ order=’1′]\u003C\u002Fli>\n\u003Cli>Draw PM10 rank table for the last 7 days based on the average result ordered by most polluted\u003Cbr \u002F>\n[mkdaiq_rank date=’today’ timemode=’Week’ type=’average’ order=’1′]\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Credits\u003C\u002Fh3>\n\u003Cp>Icons by flaticon\u003C\u002Fp>\n","Show air quality data for multiple air quality stations in Macedonia",0,1019,"2022-06-26T11:29:00.000Z","6.0.11","4.5.0","5.4",[18,19,20],"airquality","macedonia","skopje","https:\u002F\u002Fdarkog.com\u002Fblog\u002Fair-quality-mk\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp-mkd-air-quality.1.1.2.zip",85,null,"2026-03-15T14:54:45.397Z",[],{"slug":28,"display_name":7,"profile_url":8,"plugin_count":29,"total_installs":30,"avg_security_score":31,"avg_patch_time_days":32,"trust_score":33,"computed_at":34},"darkog",4,10200,89,30,86,"2026-04-04T09:21:06.397Z",[36],{"slug":37,"name":38,"version":39,"author":40,"author_profile":41,"description":42,"short_description":43,"active_installs":44,"downloaded":45,"rating":11,"num_ratings":11,"last_updated":46,"tested_up_to":47,"requires_at_least":48,"requires_php":49,"tags":50,"homepage":55,"download_link":56,"security_score":23,"vuln_count":11,"unpatched_count":11,"last_vuln_date":24,"fetched_at":57},"mk-to-lat","MK to Lat","2.0","spiritfly","https:\u002F\u002Fprofiles.wordpress.org\u002Fspiritfly\u002F","\u003Cp>It converts the Macedonian cyrillic characters of the title posts into latin to build better, readable and Search Engine Friendly urls.\u003C\u002Fp>\n\u003Cp>For example:\u003C\u002Fp>\n\u003Cp>Lets say you want your wordpress to be in Macedonian. So you intall wordpress, install the Macedonian language files, translate the template menus and stuff to Macedonian, but after your first post with title: “Здраво Свет!” you noticed that the url of that post has become something like:\u003C\u002Fp>\n\u003Cp>http:\u002F\u002Fwww.mkwordpress.com\u002F%C7%E4%F0%E0%E2%EE%20%D1%E2%E5%F2\u003C\u002Fp>\n\u003Cp>instead of the good for eyes url:\u003C\u002Fp>\n\u003Cp>http:\u002F\u002Fwww.mkwordpress.com\u002Fzdravo-svet\u002F\u003C\u002Fp>\n\u003Cp>This happens because cyrillic characters are not supported in urls and so the code translates them into browser readable language. Now this has two main disadvantages:\u003C\u002Fp>\n\u003Col>\n\u003Cli>It’s not good for visitors, because it doesn’t look human, and some may even think they have been hacked (yup, there still are paranoic people out there 🙂 )\u003C\u002Fli>\n\u003Cli>It is bad for search engines. Let say someone writes the phrase “zdravo svet” on google and if you have your urls set up with this plugin then you will rank higher.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>A brief Markdown Example\u003C\u002Fh3>\n\u003Cp>Ordered list:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Build Search Engine Friendly URLS\u003C\u002Fli>\n\u003Cli>Don’t scare other Macedonian citizens by providing long and unreadable urls\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Here’s a link to \u003Ca href=\"http:\u002F\u002Fwww.technoish.com\u002F\" title=\"A site dedicated for helping people with any issues with technology you might have\" rel=\"nofollow ugc\">Technoish\u003C\u002Fa>. You can use the Contact Us button or the Forums to get in touch.\u003C\u002Fp>\n\u003Cp>Pozdrav! :))\u003C\u002Fp>\n","This plugin convert macedonian cyrillic characters in post titles into latin characters. You can use this plugin for creating human-readable links.",100,71088,"2008-05-20T13:36:00.000Z","2.5.1","2.0.2","",[51,52,19,53,54],"convert","cyrillic","macedonian","mk","http:\u002F\u002Fwordpress.org\u002Fextend\u002Fplugins\u002Fmk-to-lat\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmk-to-lat.2.0.zip","2026-03-15T15:16:48.613Z",{"attackSurface":59,"codeSignals":111,"taintFlows":162,"riskAssessment":204,"analyzedAt":217},{"hooks":60,"ajaxHandlers":81,"restRoutes":94,"shortcodes":95,"cronEvents":109,"entryPointCount":110,"unprotectedCount":29},[61,67,70,73,76,78],{"type":62,"name":63,"callback":64,"file":65,"line":66},"action","plugins_loaded","anonymous","includes\\class-mkd-air-quality.php",179,{"type":62,"name":68,"callback":64,"file":65,"line":69},"plugin_locale",180,{"type":62,"name":71,"callback":64,"file":65,"line":72},"admin_menu",197,{"type":62,"name":74,"callback":64,"file":65,"line":75},"wp_enqueue_scripts",214,{"type":62,"name":74,"callback":64,"file":65,"line":77},215,{"type":62,"name":79,"callback":64,"file":65,"line":80},"init",234,[82,86,89,92],{"action":83,"nopriv":84,"callback":64,"hasNonce":84,"hasCapCheck":84,"file":65,"line":85},"mkdaiq_query",false,217,{"action":83,"nopriv":87,"callback":64,"hasNonce":84,"hasCapCheck":84,"file":65,"line":88},true,218,{"action":90,"nopriv":84,"callback":64,"hasNonce":84,"hasCapCheck":84,"file":65,"line":91},"mkdaiq_query_map_data",220,{"action":90,"nopriv":87,"callback":64,"hasNonce":84,"hasCapCheck":84,"file":65,"line":93},221,[],[96,101,105],{"tag":97,"callback":98,"file":99,"line":100},"mkdaiq_chart","shortcode_linechart","public\\class-mkd-air-quality-public.php",81,{"tag":102,"callback":103,"file":99,"line":104},"mkdaiq_map","shortcode_map",82,{"tag":106,"callback":107,"file":99,"line":108},"mkdaiq_rank","shortcode_rank",83,[],7,{"dangerousFunctions":112,"sqlUsage":113,"outputEscaping":116,"fileOperations":11,"externalRequests":160,"nonceChecks":160,"capabilityChecks":160,"bundledLibraries":161},[],{"prepared":114,"raw":11,"locations":115},5,[],{"escaped":117,"rawEcho":118,"locations":119},10,21,[120,124,127,129,131,133,135,137,139,140,142,143,146,147,148,149,150,152,155,156,158],{"file":121,"line":122,"context":123},"admin\\class-mkd-air-quality-admin.php",126,"raw output",{"file":125,"line":126,"context":123},"public\\partials\\linechart.php",13,{"file":125,"line":128,"context":123},14,{"file":125,"line":130,"context":123},15,{"file":125,"line":132,"context":123},16,{"file":125,"line":134,"context":123},17,{"file":125,"line":136,"context":123},18,{"file":125,"line":138,"context":123},25,{"file":125,"line":138,"context":123},{"file":125,"line":141,"context":123},28,{"file":125,"line":141,"context":123},{"file":144,"line":145,"context":123},"public\\partials\\map.php",9,{"file":144,"line":145,"context":123},{"file":144,"line":145,"context":123},{"file":144,"line":132,"context":123},{"file":144,"line":132,"context":123},{"file":144,"line":151,"context":123},23,{"file":153,"line":154,"context":123},"public\\partials\\rank.php",29,{"file":153,"line":32,"context":123},{"file":153,"line":157,"context":123},31,{"file":153,"line":159,"context":123},38,1,[],[163,182,192],{"entryPoint":164,"graph":165,"unsanitizedCount":11,"severity":181},"\u003Cclass-mkd-air-quality-ajax> (includes\\class-mkd-air-quality-ajax.php:0)",{"nodes":166,"edges":179},[167,173],{"id":168,"type":169,"label":170,"file":171,"line":172},"n0","source","$_GET (x8)","includes\\class-mkd-air-quality-ajax.php",37,{"id":174,"type":175,"label":176,"file":171,"line":177,"wp_function":178},"n1","sink","query() [SQLi]",44,"query",[180],{"from":168,"to":174,"sanitized":87},"low",{"entryPoint":183,"graph":184,"unsanitizedCount":29,"severity":191},"query (includes\\class-mkd-air-quality-ajax.php:31)",{"nodes":185,"edges":189},[186,188],{"id":168,"type":169,"label":187,"file":171,"line":172},"$_GET (x4)",{"id":174,"type":175,"label":176,"file":171,"line":177,"wp_function":178},[190],{"from":168,"to":174,"sanitized":84},"high",{"entryPoint":193,"graph":194,"unsanitizedCount":203,"severity":191},"query_map_data (includes\\class-mkd-air-quality-ajax.php:55)",{"nodes":195,"edges":201},[196,199],{"id":168,"type":169,"label":197,"file":171,"line":198},"$_GET (x3)",62,{"id":174,"type":175,"label":176,"file":171,"line":200,"wp_function":178},71,[202],{"from":168,"to":174,"sanitized":84},3,{"summary":205,"deductions":206},"The wp-mkd-air-quality plugin version 1.1.2 presents a mixed security posture. While it demonstrates good practices such as exclusively using prepared statements for SQL queries and avoiding file operations, there are significant concerns regarding its attack surface and data sanitization. The presence of four unprotected AJAX handlers is a major vulnerability, as these entry points can be accessed by any user, potentially leading to unauthorized actions.  Furthermore, the taint analysis revealed two high-severity flows with unsanitized paths, indicating that user-supplied data might be processed without adequate validation, posing a risk of arbitrary code execution or data manipulation.\n\nThe plugin's lack of a vulnerability history might suggest a history of responsible development or simply a lack of past discoveries. However, it's crucial to note that this doesn't guarantee future security. The combination of a significant unprotected attack surface and high-severity taint flows outweighs the positive aspects. Therefore, while the SQL handling is secure, the plugin requires immediate attention to secure its AJAX endpoints and address the identified data sanitization issues to mitigate potential exploitation.",[207,209,212,215],{"reason":208,"points":117},"Unprotected AJAX handlers",{"reason":210,"points":211},"High severity unsanitized taint flows",12,{"reason":213,"points":214},"Low percentage of properly escaped output",8,{"reason":216,"points":110},"Limited nonce\u002Fcapability checks on entry points","2026-03-17T06:09:11.690Z",{"wat":219,"direct":228},{"assetPaths":220,"generatorPatterns":223,"scriptPaths":224,"versionParams":225},[221,222],"\u002Fwp-content\u002Fplugins\u002Fwp-mkd-air-quality\u002Fadmin\u002Fcss\u002Fstyle.css","\u002Fwp-content\u002Fplugins\u002Fwp-mkd-air-quality\u002Fadmin\u002Fjs\u002Fscript.js",[],[222],[226,227],"wp-mkd-air-quality\u002Fadmin\u002Fcss\u002Fstyle.css?ver=","wp-mkd-air-quality\u002Fadmin\u002Fjs\u002Fscript.js?ver=",{"cssClasses":229,"htmlComments":231,"htmlAttributes":232,"restEndpoints":233,"jsGlobals":234,"shortcodeOutput":235},[230],"mkdaiq-admin",[],[],[],[],[]]