WP Manifestindependent plugin directory

All plugins in pewae WP Registry grade D. High-severity findings · 6 findingsWP RegistryHigh-severity findings · 6 findingsOpen the reportD

把力所能修改的wordpress插件合并到同一个插件里,减少重复引用,摒弃无用功能。大部分参考的源码都是开源协议,所以我也应该开源。反正我开了,至于你能不能找到这里,是你的事。

★ 16stars
1.30.5latest · 6 years ago

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/lifishake/apip/archive/refs/heads/master.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

把力所能修改的wordpress插件合并到同一个插件里,减少重复引用,摒弃无用功能。大部分参考的源码都是开源协议,所以我也应该开源。反正我开了,至于你能不能找到这里,是你的事。

功能

没有配置项的功能

  • Ctrl+Enter提交
  • 屏蔽不必要的js
  • 屏蔽不必要的css
  • feed结尾追加版权页等
  • 追加的后台编辑快捷按钮
  • 调整默认的标签云数量和随机函数
  • 移除后台编辑页面上的作者列
  • 升级后覆盖高危文件
  • 屏蔽wp_embedd功能
  • 修改ngg-gallery,删除没用的功能,简化图片->post的格式。
  • author页跳转到404。
  • 删除留言模板中暴露的用户名
  • ngg插入图片时适应https
  • 文章和tag、cat标题自动转成utf-8编码值
  • 注释功能
  • 改用户profile不需要邮件确认
  • 设置chrome内核浏览器的tab颜色
  • 移除后台的help
  • debug时忽略wordpress.org的update检查.
  • 不记录_wp_old_date
  • 屏蔽password reset
  • 去掉feed中的危险链接
  • 增加汉译英按钮

有配置项的功能

  • 更好的中文摘要
  • 阻止自动版本
  • 阻止自动保存
  • 显示登录用户的adminbar
  • 后台英文前台中文
  • 屏蔽主题里的OpenSans
  • 默认留言小工具里不显示作者留言
  • 搜索结果只有一条时跳转到内容
  • 禁止直接访问wp_comments.php
  • 描述信息优化
  • 回复邮件提示
  • 头像使用本地缓存
  • 禁用wordpress的emoji图片转换
  • 替换广告留言用户名和网址
  • 社会化分享函数
  • 好看的标签云
  • 回复最多字数的网友作为友情链接
  • 代码高亮
  • 图片延时加载
  • 改变"上一篇""下一篇"的取值来源
  • 自定义小工具
  • 搜索结果中不显示page内容
  • 自定义的按照时间和类别的archive页
  • 可以对留言的无聊指数评分
  • 友情链接、邮件回复的颜色可以在后台定义
  • 利用heweather提供的API,保存文章发布时天气,并提供调用函数(需要主题配合)
  • 留言前先回答博文相关的问题(需要主题配合)
  • 利用yandex translate的API,手动翻译标题到英文
  • 手动输入图片信息,以类似豆瓣的效果显示
  • 特色图取主颜色功能
  • 外链转内链
  • 屏蔽后台Update提示
  • 管理本地字体

后台管理功能

  • taglist中增加private和draft的计数列

Releases

Newest 25 of 34 recorded releases.

Tag
Published
1.30.5 latest
Apr 22, 2020 6 years ago
Apr 7, 2020 6 years ago
Apr 3, 2020 6 years ago
Mar 18, 2020 6 years ago
Oct 23, 2019 7 years ago
Mar 13, 2019 7 years ago
Dec 8, 2018 7 years ago
Nov 26, 2018 7 years ago
Nov 9, 2018 7 years ago
Oct 18, 2018 8 years ago
Oct 8, 2018 8 years ago
Aug 10, 2018 8 years ago
May 28, 2018 8 years ago
Mar 26, 2018 8 years ago
Mar 20, 2018 8 years ago
Mar 15, 2018 8 years ago
Feb 14, 2018 8 years ago
Feb 7, 2018 8 years ago
Jan 26, 2018 8 years ago
Jan 12, 2018 8 years ago
Jan 11, 2018 8 years ago
Jan 8, 2018 8 years ago
Nov 2, 2017 8 years ago
Sep 26, 2017 9 years ago
Sep 13, 2017 9 years ago
All releases on GitHub →

These releases are tags only. The author does not attach a packaged zip, so there are no download counts to report.

D grade

Security

All plugins in pewae 1.30.5 · audited by WP Registry

High-severity findings.

2 high 4 medium
Audited release
1.30.5
Findings
6
Worst severity
high
Content hash
2d8e5dc3740f2d4921161dfc…

Findings

  • high Contributor+ SSRF and web-accessible file write via [mygame] poster attribute

    ssrf

    add_shortcode('mygame') is registered unconditionally. apip_game_detail() returns early only if apip_settings[gaintbomb_key] is empty. When id is the literal 'x', Giantbomb is skipped: thumb_url is taken from the poster shortcode attribute, file_get_contents() fetches that URL (allow_url_fopen, optional WP_HTTP_Proxy, SSL verify disabled in the stream context), and the raw body is file_put_contents()'d to ABSPATH/wp-content/gallery/game_poster/nodata_{post_id}.jpg, which is then served from APIP_GALLERY_URL. There is no host allow-list, no private-IP block, and no content-type check before the write. An Author can publish, or a Contributor can preview, [mygame id="x" poster="http://169.254.169.254/latest/meta-data/"] and then GET the resulting jpg to read the SSRF response. Requires the Giantbomb key option to be configured (the feature's normal setup).

    apip.php:2537-2629

    Recommendation

    Do not fetch URLs from shortcode attributes. If local posters are needed, accept only attachment IDs from the Media Library. If remote fetch stays, allow-list https hosts, block link-local/private/metadata ranges, use wp_remote_get with a short timeout, and write only after getimagesize() confirms a real image. Never store the raw response at a guessable public path.

  • high Stored XSS in [mygame]/[mydouban]/[myimdb] shortcode attributes echoed unescaped

    xss_stored

    Authors (unfiltered_html = false) and Contributors cannot plant raw <script> in post_content, but they can insert these shortcodes. apip_game_detail interpolates cname, jname, alias, publisher, genres, platform, year, and especially download (href) into frontend HTML with no esc_html/esc_url. [mygame] is always registered. [mydouban]/[myimdb] register when apip_douban_enable is on: apip_dou_movie_detail echoes the id attribute on the movie_not_found branch; apip_imbd_detail echoes cname; apip_dou_book_list echoes the link attribute as href. A payload such as [mygame id="x" cname="<img src=x onerror=alert(1)>" download="javascript:alert(1)"] executes for every visitor once an Author publishes, and for editors previewing a Contributor draft. Theme cooperation is not required; the_content runs the shortcode.

    apip.php:2642-2724

    Recommendation

    Escape every shortcode attribute and API field at the echo site: esc_html() for text, esc_url() for href/src (and reject javascript:/data:). Treat Douban/OMDB JSON fields as untrusted as well. Consider restricting these shortcodes to unfiltered_html roles.

  • medium Unauthenticated open redirect via unsigned /gaan/<base64> cloaker

    unsafe_input

    When apip_settings[redirect_external_link] is enabled, convert_to_internal_links rewrites off-site http(s) hrefs in content and comments to /gaan/<base64(url)>, and apip_template_redirect (hooked on template_redirect, including 404s — no rewrite rule needed) calls apip_e2i_redirect(). That function takes everything after home_url()/gaan/, base64_decodes it, and wp_redirect() 302s with no HMAC, expiry, or destination allow-list. Any visitor can open https://victim/gaan/aHR0cHM6Ly9ldmlsLmNvbQ== and leave the origin toward an arbitrary URL, which is phishing/credential-harvest material under the site's domain. wp_sanitize_redirect only strips control chars; it does not confine the target.

    apip.php:1046-1062

    Recommendation

    Sign cloaked URLs (HMAC of the destination + site_url secret) or store an allow-listed map of IDs→URLs. Reject destinations whose host is not in the original content, and block non-http(s) schemes. Do not redirect on attacker-supplied base64 alone.

  • medium Yandex Translate API key localized to every wp-admin user including Subscriber

    information_disclosure

    apip_admin_scripts is hooked to admin_enqueue_scripts with no $hook or capability gate, so it runs on Subscriber-accessible screens (profile.php, dashboard). wp_localize_script('apip-js-admin','yandexkey',$apip_options['yandex_translate_key']) prints the raw Yandex Translate API key as a JS global. A logged-in Subscriber viewing page source recovers a billed third-party credential and can call translate.yandex.net until quota/exhaustion or key revocation. The key is only needed on the post-edit slug metabox.

    apip.php:608-615

    Recommendation

    Enqueue apip-js-admin and localize the key only on post.php/post-new.php and only for users who can edit_posts. Prefer a wp_ajax proxy that attaches the key server-side so it never appears in HTML. Rotate any key that was stored while this version ran.

  • medium Core wp-comments-post.php and xmlrpc.php overwritten with die() after WordPress updates

    insecure_config

    upgrader_process_complete always calls apip_remove_default_risk_files, which copies ext/wp-go-die.php (literal <?php die();) over ABSPATH/wp-comments-post.php and xmlrpc.php after every core upgrade. This is not option-gated. register_uninstall_hook points at an empty apip_plugin_deactivation, so removing the plugin leaves comments and XML-RPC permanently dead. On a site that still uses the comment form, this is a persistent availability break and a surprise core-file modification that security scanners will flag as integrity failure. Attackers do not trigger it; WordPress auto-update does.

    apip.php:760-768

    Recommendation

    Do not overwrite WordPress core files. Disable XML-RPC via the xmlrpc_enabled filter (already present) and protect comments with capability/nonce/antispam. If the copies must stay, restore the originals from a backup on uninstall and make the behavior an explicit, default-off option.

  • medium Activation mkdir/chmod uses string '511' which is decimal 0777 on web-accessible cache dirs

    insecure_config

    apip_plugin_activation creates wp-content/gallery/{gravatar_cache,douban_cache,game_poster} with mkdir($path, '511', true) and chmod($path, '511'). PHP casts the string '511' to integer 511 decimal, which is octal 0777 (world-writable), not mode 0511. Recursive mkdir also creates wp-content/gallery itself with that mode if missing. Those directories are served as APIP_GALLERY_URL. On shared hosting another tenant can drop a PHP webshell next to cached jpgs; on a dedicated box 0777 still lets any local user write. Combined with the [mygame] write path, the cache tree is both world-writable and world-readable.

    apip.php:31-67

    Recommendation

    Pass integer octal modes (0755 or 0750), never decimal strings. Deny PHP execution in those dirs (.htaccess php_flag engine off / nginx location). Do not chmod existing directories to world-writable.

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.