模板中的AJAX请求

时间:2012-08-27 作者:dcolumbus

在这里,我试图对来自模板的安全ajax请求做出准确的决定。

AJAX总是让我感到害怕的是,被调用的脚本位置是公共的:

http://www.mydomain.com/wp-content/themes/mytheme/inc/myscript.php
我只是对这种公共知识感到不舒服。

在仍然能够自信地进行AJAX调用的同时,有没有一种合适的方法可以让窥探者远离该脚本?

2 个回复
最合适的回答,由SO网友:Brian Fegter 整理而成

默默无闻的安全不是一个好的模式。您必须有一个URL才能进行XHR或JSONP调用。任何了解使用开发人员工具、Firebug等搜索DOM的人。。。可以轻松找到远程脚本URL。对我来说,这是一个错误的问题。

与安全性更相关的问题是,如何强化AJAX处理程序脚本,防止不必要的入侵?

这个问题的简单答案是使用WordPress nonces来验证请求的真实性。

使用在表单中创建nonce字段wp_create_nonce()check_ajax_referer()如果您想确保请求来自wp admin,或者只需在没有API函数的情况下直接验证nonce,则可以使用其他函数。

退房this page 有关WP Nonces的更多信息,请参阅Codex。

您还可以使用以下条件current_user_can() 为特权AJAX请求添加额外的安全层。如果发现有人滥用该脚本,请开始记录IP。如果多次尝试后请求未能满足标准,请阻止有问题的IP地址。

底线是确保您的代码是安全的。隐藏或隐藏脚本并不是适当安全性的好选择。如果有足够的动机,窥探者会找到他们想要的东西。

SO网友:Chris_O

是的,不要使用该脚本,请使用WordPress为您提供的安全脚本。

wp-admin/admin-ajax.php

请阅读AJAX in Plugins

In response to comments.

您可以使用wp-admin/admin-ajax。前端的php。您只需确保它被定义为ajaxurl,然后您的php函数需要挂接到add_action( \'wp_ajax_nopriv_your_action\', \'your_callback_function\' );

nopriv标志使其可以从前端访问。

结束

相关推荐

在wp_ajax函数中获取post_id

我编写了一个自定义AJAX函数,其中我将一个帖子类型指定为另一个帖子类型的子类。在一个函数中,我循环浏览这些子帖子,我想更新数据库以反映post\\u父级(子帖子所属的帖子)。问题是,我无法从任何地方获取该帖子的ID来更新db。有什么建议吗?以下是jQuery函数:$.ajax({ url: ajaxurl, type: \'POST\', async: true, cache: false, dataType: \'json