[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f8nbLF88dRkPi-X6myZGOhDeS15Mea7mCRZYfynWe5dA":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":18,"tags":19,"homepage":22,"download_link":23,"security_score":24,"vuln_count":25,"unpatched_count":25,"last_vuln_date":26,"fetched_at":27,"vulnerabilities":28,"developer":29,"crawl_stats":26,"alternatives":35,"analysis":36,"fingerprints":258},"visual-recipe-index","Visual Recipe Index","1.3.1","Kremental","https:\u002F\u002Fprofiles.wordpress.org\u002Fseestheday\u002F","\u003Cul>\n\u003Cli>\u003Ca href=\"http:\u002F\u002Fkremental.com\u002Fvisual-recipe-index\" rel=\"nofollow ugc\">Sign up for early access and release pricing for the pro version\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Visual Recipe Index\u003C\u002Fstrong>\u003Cbr \u002F>\nThis plugin creates an automatically updating recipe index with pictures.\u003Cbr \u002F>\nIt uses the recipes that you already have on your blog, and the categories that you have defined.\u003C\u002Fp>\n\u003Cp>To use, follow the instructions on the admin page (Settings->Visual Recipe Index) to generate shortcodes to paste onto a page of your choice to display your recipe index.\u003C\u002Fp>\n\u003Cp>This plugin uses the featured image for the thumbnail if set, and the first image of the post if a featured image isn’t set.\u003C\u002Fp>\n\u003Cp>\u003C!--This plugin requires that a featured image be set for the thumbnail images to work properly.\n\nIf you create a visual recipe index and don't see images for some of your recipes you should check to make sure you have the featured image set.-->\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Visual Recipe Index Pro – Features being considered for development\u003C\u002Fstrong>\u003Cbr \u002F>\n* Simplified user interface\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\n\u003Cp>Pagination\u002Fendless scroll\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Drag and drop category ordering\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Faster image loading\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Beautiful styles with several themes to choose from\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Removal of dependency on cutting and pasting shortcodes on a page\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Automatic index page creation with checkbox to add to menu\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Option to automatically add multi-page index creation with hierarchy\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Option for slider gallerys with multi-page\u002Fcategory hierarchys\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>Significantly improved SEO\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n","Visual Recipe Index - Plugin to create an automatically updating recipe index with pictures.",300,11231,88,10,"2025-11-15T03:43:00.000Z","6.8.5","5.0","",[20,21,4],"food-gallery","recipe-gallery","http:\u002F\u002Fwordpress.org\u002Fextend\u002Fplugins\u002Frecipe_index\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fvisual-recipe-index.1.3.2.zip",100,0,null,"2026-03-15T15:16:48.613Z",[],{"slug":30,"display_name":7,"profile_url":8,"plugin_count":31,"total_installs":11,"avg_security_score":24,"avg_patch_time_days":32,"trust_score":33,"computed_at":34},"seestheday",1,30,94,"2026-04-05T01:03:39.624Z",[],{"attackSurface":37,"codeSignals":88,"taintFlows":148,"riskAssessment":246,"analyzedAt":257},{"hooks":38,"ajaxHandlers":78,"restRoutes":79,"shortcodes":80,"cronEvents":86,"entryPointCount":87,"unprotectedCount":25},[39,45,49,51,52,57,61,64,68,72,74,75,76,77],{"type":40,"name":41,"callback":42,"file":43,"line":44},"action","admin_post_riview_update","riview_update_options","includes\\Options.php",354,{"type":40,"name":46,"callback":47,"file":43,"line":48},"admin_init","riview_verify_options",355,{"type":40,"name":41,"callback":42,"file":50,"line":44},"trunk\\includes\\Options.php",{"type":40,"name":46,"callback":47,"file":50,"line":48},{"type":40,"name":53,"callback":54,"file":55,"line":56},"admin_menu","add_ri_settings","trunk\\visual-recipe-index.php",51,{"type":40,"name":58,"callback":59,"file":55,"line":60},"wp_enqueue_scripts","enqueue_ri_scripts",138,{"type":40,"name":58,"callback":62,"file":55,"line":63},"enqueue_ri_styles",139,{"type":40,"name":65,"callback":66,"file":55,"line":67},"wp_footer","ri_init_js",140,{"type":40,"name":69,"callback":70,"file":55,"line":71},"admin_enqueue_scripts","riview_admin_assets",141,{"type":40,"name":53,"callback":54,"file":73,"line":56},"visual-recipe-index.php",{"type":40,"name":58,"callback":59,"file":73,"line":60},{"type":40,"name":58,"callback":62,"file":73,"line":63},{"type":40,"name":65,"callback":66,"file":73,"line":67},{"type":40,"name":69,"callback":70,"file":73,"line":71},[],[],[81,85],{"tag":82,"callback":83,"file":55,"line":84},"riview","recipe_index",159,{"tag":82,"callback":83,"file":73,"line":84},[],2,{"dangerousFunctions":89,"sqlUsage":90,"outputEscaping":92,"fileOperations":145,"externalRequests":87,"nonceChecks":87,"capabilityChecks":146,"bundledLibraries":147},[],{"prepared":25,"raw":25,"locations":91},[],{"escaped":93,"rawEcho":94,"locations":95},106,28,[96,100,102,104,106,108,110,113,116,118,120,122,124,126,127,128,129,130,131,133,135,136,137,138,139,141,143,144],{"file":97,"line":98,"context":99},"includes\\RecipeIndexPost.php",47,"raw output",{"file":97,"line":101,"context":99},52,{"file":97,"line":103,"context":99},84,{"file":97,"line":105,"context":99},99,{"file":97,"line":107,"context":99},120,{"file":97,"line":109,"context":99},125,{"file":111,"line":112,"context":99},"includes\\Settings.php",61,{"file":114,"line":115,"context":99},"includes\\timthumb.php",233,{"file":114,"line":117,"context":99},433,{"file":114,"line":119,"context":99},434,{"file":114,"line":121,"context":99},1052,{"file":114,"line":123,"context":99},1252,{"file":125,"line":98,"context":99},"trunk\\includes\\RecipeIndexPost.php",{"file":125,"line":101,"context":99},{"file":125,"line":103,"context":99},{"file":125,"line":105,"context":99},{"file":125,"line":107,"context":99},{"file":125,"line":109,"context":99},{"file":132,"line":112,"context":99},"trunk\\includes\\Settings.php",{"file":134,"line":115,"context":99},"trunk\\includes\\timthumb.php",{"file":134,"line":117,"context":99},{"file":134,"line":119,"context":99},{"file":134,"line":121,"context":99},{"file":134,"line":123,"context":99},{"file":55,"line":140,"context":99},201,{"file":55,"line":142,"context":99},209,{"file":73,"line":140,"context":99},{"file":73,"line":142,"context":99},56,6,[],[149,167,184,197,205,216,227,238],{"entryPoint":150,"graph":151,"unsanitizedCount":31,"severity":166},"tryBrowserCache (includes\\timthumb.php:340)",{"nodes":152,"edges":163},[153,158],{"id":154,"type":155,"label":156,"file":114,"line":157},"n0","source","$_SERVER['SERVER_PROTOCOL']",370,{"id":159,"type":160,"label":161,"file":114,"line":157,"wp_function":162},"n1","sink","header() [Header Injection]","header",[164],{"from":154,"to":159,"sanitized":165},false,"medium",{"entryPoint":168,"graph":169,"unsanitizedCount":87,"severity":166},"serveErrors (includes\\timthumb.php:423)",{"nodes":170,"edges":181},[171,173,174,177],{"id":154,"type":155,"label":156,"file":114,"line":172},424,{"id":159,"type":160,"label":161,"file":114,"line":172,"wp_function":162},{"id":175,"type":155,"label":176,"file":114,"line":119},"n2","$_SERVER['QUERY_STRING']",{"id":178,"type":160,"label":179,"file":114,"line":119,"wp_function":180},"n3","echo() [XSS]","echo",[182,183],{"from":154,"to":159,"sanitized":165},{"from":175,"to":178,"sanitized":165},{"entryPoint":185,"graph":186,"unsanitizedCount":196,"severity":166},"\u003Ctimthumb> (includes\\timthumb.php:0)",{"nodes":187,"edges":193},[188,190,191,192],{"id":154,"type":155,"label":189,"file":114,"line":157},"$_SERVER['SERVER_PROTOCOL'] (x2)",{"id":159,"type":160,"label":161,"file":114,"line":157,"wp_function":162},{"id":175,"type":155,"label":176,"file":114,"line":119},{"id":178,"type":160,"label":179,"file":114,"line":119,"wp_function":180},[194,195],{"from":154,"to":159,"sanitized":165},{"from":175,"to":178,"sanitized":165},3,{"entryPoint":198,"graph":199,"unsanitizedCount":31,"severity":166},"tryBrowserCache (trunk\\includes\\timthumb.php:340)",{"nodes":200,"edges":203},[201,202],{"id":154,"type":155,"label":156,"file":134,"line":157},{"id":159,"type":160,"label":161,"file":134,"line":157,"wp_function":162},[204],{"from":154,"to":159,"sanitized":165},{"entryPoint":206,"graph":207,"unsanitizedCount":87,"severity":166},"serveErrors (trunk\\includes\\timthumb.php:423)",{"nodes":208,"edges":213},[209,210,211,212],{"id":154,"type":155,"label":156,"file":134,"line":172},{"id":159,"type":160,"label":161,"file":134,"line":172,"wp_function":162},{"id":175,"type":155,"label":176,"file":134,"line":119},{"id":178,"type":160,"label":179,"file":134,"line":119,"wp_function":180},[214,215],{"from":154,"to":159,"sanitized":165},{"from":175,"to":178,"sanitized":165},{"entryPoint":217,"graph":218,"unsanitizedCount":196,"severity":166},"\u003Ctimthumb> (trunk\\includes\\timthumb.php:0)",{"nodes":219,"edges":224},[220,221,222,223],{"id":154,"type":155,"label":189,"file":134,"line":157},{"id":159,"type":160,"label":161,"file":134,"line":157,"wp_function":162},{"id":175,"type":155,"label":176,"file":134,"line":119},{"id":178,"type":160,"label":179,"file":134,"line":119,"wp_function":180},[225,226],{"from":154,"to":159,"sanitized":165},{"from":175,"to":178,"sanitized":165},{"entryPoint":228,"graph":229,"unsanitizedCount":87,"severity":237},"\u003CRecipeIndexPost> (includes\\RecipeIndexPost.php:0)",{"nodes":230,"edges":235},[231,234],{"id":154,"type":155,"label":232,"file":97,"line":233},"$_GET (x2)",12,{"id":159,"type":160,"label":179,"file":97,"line":98,"wp_function":180},[236],{"from":154,"to":159,"sanitized":165},"low",{"entryPoint":239,"graph":240,"unsanitizedCount":87,"severity":237},"\u003CRecipeIndexPost> (trunk\\includes\\RecipeIndexPost.php:0)",{"nodes":241,"edges":244},[242,243],{"id":154,"type":155,"label":232,"file":125,"line":233},{"id":159,"type":160,"label":179,"file":125,"line":98,"wp_function":180},[245],{"from":154,"to":159,"sanitized":165},{"summary":247,"deductions":248},"The \"visual-recipe-index\" v1.3.1 plugin exhibits a generally strong security posture, with several positive indicators. The absence of known CVEs and a lack of critical or high-severity issues in its vulnerability history are encouraging.  The code analysis reveals a commendable use of prepared statements for all SQL queries, a good number of capability checks and nonce checks, and a high percentage of properly escaped output, all of which are crucial for preventing common web vulnerabilities. The plugin also demonstrates good practice by not bundling external libraries, reducing the risk of outdated or vulnerable dependencies.\n\nHowever, a significant concern arises from the taint analysis, which identified 8 flows with unsanitized paths. While the severity is reported as low (no critical or high), the presence of these unsanitized paths is a red flag, indicating potential vulnerabilities if these paths are ever exposed to user-controlled input without proper sanitization. The attack surface, though small with only two shortcodes and no AJAX or REST API endpoints without checks, still requires careful monitoring. The high number of file operations (56) could also be an area to scrutinize for potential misconfigurations or vulnerabilities if not handled securely.\n\nIn conclusion, while the plugin has many strengths and a clean vulnerability history, the taint analysis findings demand attention. The plugin developers should prioritize addressing the identified unsanitized path flows. Continued vigilance and regular security audits are recommended, especially given the number of file operations.",[249,252,254],{"reason":250,"points":251},"Taint analysis: 8 unsanitized path flows",16,{"reason":253,"points":146},"Output escaping: 21% not properly escaped",{"reason":255,"points":256},"File operations: 56 total, potential risk if not sanitized",4,"2026-03-16T20:00:05.350Z",{"wat":259,"direct":276},{"assetPaths":260,"generatorPatterns":267,"scriptPaths":268,"versionParams":269},[261,262,263,264,265,266],"\u002Fwp-content\u002Fplugins\u002Fvisual-recipe-index\u002Fcss\u002Fstyle.css","\u002Fwp-content\u002Fplugins\u002Fvisual-recipe-index\u002Fjs\u002Friview.js","\u002Fwp-content\u002Fplugins\u002Fvisual-recipe-index\u002Fjs\u002Fjquery.colorbox-min.js","\u002Fwp-content\u002Fplugins\u002Fvisual-recipe-index\u002Fjs\u002Feasypaginate.min.js","\u002Fwp-content\u002Fplugins\u002Fvisual-recipe-index\u002Fcss\u002Fcgview-settings.css","\u002Fwp-content\u002Fplugins\u002Fvisual-recipe-index\u002Fjs\u002Frecipe_index_options.js",[],[262,263,264,266],[270,271,272,273,274,275],"visual-recipe-index\u002Fstyle.css?ver=","visual-recipe-index\u002Friview.js?ver=","visual-recipe-index\u002Fjquery.colorbox-min.js?ver=","visual-recipe-index\u002Feasypaginate.min.js?ver=","visual-recipe-index\u002Fcgview-settings.css?ver=","visual-recipe-index\u002Frecipe_index_options.js?ver=",{"cssClasses":277,"htmlComments":280,"htmlAttributes":282,"restEndpoints":299,"jsGlobals":300,"shortcodeOutput":302},[278,279],"ri_sc","shortcode_options",[281],"SHORTCODE GENERATOR",[283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298],"data-id","data-name","data-orderby","data-order","data-num","data-excludeposts","data-offset","data-tags","data-size","data-quality","data-showtitle","data-lightbox","data-paginate","data-customfield","data-customfieldvalue","data-title",[],[301],"idcat",[303],"[riview]"]