如何阻止_wpnonce和_wp_http_referer出现在URL中

时间:2012-10-09 作者:Ken

我正在尝试开发一个插件,它有一个搜索字段并使用WP\\u List\\u表。该插件严格针对后端,在数据库中搜索用户,并从其他插件返回用户以及其他元数据。

当我搜索用户时,\\u wpnance和\\u wp\\u http\\u referer的隐藏输入字段被添加到url字符串中。wpnance不是什么大问题,但是http\\u referer是个问题。

如果使用插件的用户继续执行多个搜索,则URL中的\\u wp\\u http\\u referer字符串会变得太长,从而出现错误:请求URI太大,请求的URL长度超过了此服务器的容量限制。

那么,如何阻止隐藏值出现在URL中,或者每次单击搜索按钮时重置\\u wp\\u http\\u referer?

1 个回复
SO网友:ianmjones

此问题的出现是因为几个问题:

(1)WP_List_Table::search_box() 插入默认值_wpnonce_wp_http_referer 使用字段wp_nonce_field() 没有给你覆盖和说“我已经去了一个暂时的领域谢谢”的能力。

2) 您需要使用GET 作为子类化时表单提交的方法WP_List_Table 因为WP_List_Table::print_column_headers() 仅限支票$_GET 对于当前orderbyorder 参数和用途$_SERVER[\'REQUEST_URI\'] 用于构造其标头链接。如果您不使用GET 作为form方法,在对列进行排序时,将释放search参数。

有几种方法可以阻止Request-URI Too Large The requested URL\'s length exceeds the capacity limit for this server 错误:

A) 因为所有nonce检查函数都可以使用_wp_http_referer 请求字段或回退到推荐人的相应标头,您可以删除_wp_http_referer 在处理的早期查询参数。

因此,解决此问题的一个简单方法是在prepare_items() 您的功能WP_List_Table 子类。

$_SERVER[\'REQUEST_URI\'] = remove_query_arg( \'_wp_http_referer\', $_SERVER[\'REQUEST_URI\'] );
B) 可以说更好、更安全的方法是切换到POST 表单提交方法和更新$_SERVER[\'REQUEST_URI\'] 在里面prepare_items() 一旦编译了所有您关心的参数WP_List_Table::print_column_headers() 按预期运行。

$options = array(
    \'blog_id\'     => $blog_id,
    \'s\'           => $search,
    \'record_type\' => $record_type,
    \'orderby\'     => $orderby,
    \'order\'       => $order,
);

// Update the current URI with the new options.
$_SERVER[\'REQUEST_URI\'] = add_query_arg( $options, $_SERVER[\'REQUEST_URI\'] );

结束

相关推荐

设置_Search_Query()的默认文本;

这是我搜索表单中的代码。php:<div class=\"search-box\"> <form method=\"get\" class=\"searchform\" action=\"<?php echo esc_url( home_url( \'/\' ) ); ?>\"> <label for=\"s\" class=\"assistive-text\"><?php _e( \'Search\', \'r