我试图弄清楚如何在不加载整个WP堆栈的情况下保护自定义入口点。内置的AJAX入口点非常慢,实际上在有很多插件的站点上无法使用。所以我必须自己写点东西。我找到一个叫\'wp_session\'. 这基本上是确保我的终点的基础。
目前我是这样实现的:
在我的WP后端插件中,我启动WP\\U会话类并存储一些数据,以便稍后在我的端点中进行验证。
一旦客户端通过我的端点进行RPC,我就要取回我的“会话实例”,并检查该会话对象中的参数是否正常;用户当时暂时拥有特权。
在RPC URL中,我使用HMAC\\U SHA1和基于md5(用户id+用户密码)+wp\\U名称(添加时间限制)和Wordpress salt密钥(添加特定站点的salt)的密钥添加了一个在客户端计算的“签名”。客户端使用该令牌对有效负载进行“签名”。由于插件呈现(操作),这个令牌被传递给客户端。他没有登录就无法获得这样的令牌。
在我的结束语中,我正在检查客户端生成的签名是否正确并且仍然有效。
执行RPC操作。
我仍在犹豫是否能接受这种方式。有谁能建议一个更好的做法,或者只是确认一下,这些措施已经足够了?例如,wp\\u nounce是一种为Ajax调用添加一些安全性的好方法,但一旦需要为远程服务启用RPC调用,它就无法工作(例如:共享基于RPC的下载链接)。在这种情况下,我只能在没有wp\\u nounce的情况下构建令牌,并验证RPC url中的md5(user\\u id+password hash+site-salt\\u key)是否正确。这样做可以奏效,但没有时间限制。为了对令牌进行时间限制,我需要在没有WP-API的情况下将内容存储在数据库中,这也是出于性能原因。
欢迎提出任何建议。非常感谢。
SO网友:Rarst
我认为你的模式不是最优的。您是在“WordPress Ajax端点速度慢”的前提下开始的,您的解决方案是“构建备用身份验证方案”。这完全意味着麻烦。
任何安全性都应该尽可能地重用,并由人员进行编码specializing 在安全方面。为了性能而重新实现安全性的权衡是一个重大的危险信号。
回到原点。如果您的问题是“WordPress Ajax端点太慢”,那么构建一个更快的WordPress Ajax端点。您可以使用SHORTINIT
(现场有关于它的答案)有非常定制的核心负载。发布公共代码和升级带来的痛苦是一场噩梦,但对于私有高性能Ajax来说,这是一条必经之路。
PS我不确定您的Ajax需求与RPC(XML RPC?)需要,因为你提到了两者。