WordPress with phpMyAdmin - 404无处不在



所以我一直在尝试对自定义WordPress主题进行一些更改,该主题引入了对Dashboard的全面检修。我一直发现我需要修复的原始主题的一些小问题(导入新帖子时没有正确检查重复的帖子,帖子元数据没有正确存储,帖子没有按正确的类别排序,等等)

当我一直在处理这个问题时,我需要无数次地查看和修改数据库,看看主题对数据库做了什么,或者修复它搞砸的东西。不幸的是,我无法安装phpMyAdmin,所以我一直在进行更改,直接键入SQL并将其插入主题的适当位置,然后使用脚本die(),这样我就可以看到SQL的输出。

突然间,我想到我可以找到一个插件,将phpMyAdmin功能集成到WordPress中。所以我安装了wp-phpMyAdmin。

一切似乎都很顺利,直到我尝试做任何事情。我可以查看表、行和所有内容。但是,当我试图编辑一行或删除一行时,我会被重定向到404错误,说我碰巧访问的phpMyAdmin的任何部分(例如tbl_row_action.php)都不存在。如果我直接转到这些页面,而没有提交表单来编辑或删除行,那么它们工作得很好,并且我收到一条错误消息,说我的SQL查询为空。

其他人经历过这种情况吗?我真的不知道它到底为什么或在哪里发送404。这简直太荒谬了。

编辑-更多信息:

我已经了解到,当phpMyAdmin使用sql_query参数集调用sql.php时,我只有会得到404错误

编辑(再次)-进一步更新:

只有当sql_query包含有效查询时,我才会得到404错误。通过查看sql.php(请注意,我没有花太多时间查看),我确实注意到它似乎可以解析查询,并确定您是SELECTing、DROPing还是DELETEing等,这样他们就可以检查您的用户权限。它可能与此解析代码有关。

以下查询没有给我404分:

test
SELECT test
SELECT test FROM test
SELECT test FROM post_meta
DELETE
DROP
DROP test

下面给了我一个404:

SELECT * FROM test
SELECT * FROM post_meta
DELETE FROM
DELETE FROM test
DELETE FROM post_meta
DROP TABLE
DROP TABLE test

更多编辑-

因此,在sql.php的顶部,我放置了以下代码行:

die("Test");

当我进行上面列出的错误查询时,它不会死。它直接进入404消息。显然,这与WordPress的重定向脚本有关,而与phpMyAdmin 无关

最终编辑-

我做了更多的研究,对WordPress做了很大的改进。

我高度怀疑我有这个问题是由于一些新的WordPress安全功能。WordPress的旧版本显然允许将SQL输入URL,这带来了巨大的安全风险。因此,他们现在不允许SQL通过URL传递是可以理解的。就在模板之前,is_404()的值被设置为true。它被设置在WP::parse_request()(由WP::main()调用,由wp()调用,wp-blog-header.php调用)中

每当在请求的URI中出现可疑的SQL查询ANYWHERE时,我都会被踢到404页面。我想改变这种行为,同时尽可能少地修改WordPress核心。我需要一个真正擅长WordPress的人来帮助我。我认为存在一个涉及$wp_rewrite变量的答案,该变量包含大量URL重写规则。

问题终于发现-

对于任何有兴趣发现这篇文章或关注它或有类似问题的人,我终于找到了404个错误的来源。WordPress根本没有撒谎。问题出在mod_security上,这是一个Apache模块,它可以防止任何看起来可疑的请求(包括请求URI中包含SQL的请求)

请始终记住正确设置mod_security设置。

WordPress不应该干扰phpMyAdmin,因为插件会在一个独立的iframe中加载它。

作为他的项目规范之一,他只想在他的服务器上安装WordPress。。。

尽管如此,该插件仍然phpMyAdmin(尽管"包装"在WordPress UI中)。换句话说,您已经安装了它;)

为了避免更新和维护其他软件的麻烦。。。

在谈论网络应用程序时,"软件"可能是一个危险的术语——这并不是说根本不要使用它,但对一些人来说,它可能会让人想起蓝屏和运行时错误;)

换句话说,只需强调PMA只是服务器上的一个文件集合——它没有自己的数据库,实际上是无状态的,删除就像RMD /phpmyadmin一样简单。

他希望能够从WordPress Dashboard 进行所有必要的管理更改

尽管我已经提出了这些观点,但如果仪表板中有数据库管理访问是绝对重要的,我将编写一个使用phpMiniAdmin的快速替代方案(奇怪的是,这就是我偶然发现这个问题的原因!),我很乐意与您分享,供您试用。

正如@molnarm在评论中指出的,为什么不删除phpMyAdmin并通过SSH连接到MySQL,使用MySQL Workbench或Sequel Pro之类的东西呢。

您将有一种更简单、更快的方式与MySQL交互,并可以删除phpMyAdmin这一噩梦。

最新更新