Вот некоторый рабочий код для промо-модала, но является ли это безопасным и подходящим способом использования одноразового слова wordpress в запросе ajax?
Создайте одноразовый номер в tmp: $ ajax_nonce = wp_create_nonce («mynonce»);
Пример URL: www.mysite.com/#345345
var asdf = location.hash.match(/^#?(.*)$/)[1];
if (asdf) {
$productID = asdf;
if ($.cookie("modalshow") === undefined) {
var expiryDate = new Date();
var minutes = 0.20; //12 seconds
expiryDate.setTime(expiryDate.getTime() + (minutes * 60 * 1000));
$.cookie("modalshow", "exists", { path: '/', expires: expiryDate });
var data = {
action: 'my_action',
product_id: $productID,
security: '<?php echo $ajax_nonce; ?>'
};
var ajaxurl = '/wp-admin/admin-ajax.php';
$.post(ajaxurl, data, function(response) {
$(".modal-content").append(response);
$('#Modal').modal({ show:true });
});
} //no cookie
};//if match
Плагин:
add_action( 'wp_ajax_my_action', 'my_action_function' );
function my_action_function() {
check_ajax_referer( 'mynonce', 'security' );
if( isset($_POST['product_id']) ) {
$my_report_num = $_POST['product_id']; // splash 443
$myposttype = get_post_type( $my_product_num );
if ( get_post_status( $my_product_num ) == 'publish' && $myposttype == "df_product" ) {
//we're good
$theid = $my_product_num;
} else {
$theid = "876";
}
//fedtch content using $theid
die();
} // end if
die;
}
В приведенном выше php get_post_type () использует get_post (), который использует sanitize_post () — так что некоторая проверка выполняется, и в настоящее время я планирую, что если что-либо вредоносное добавляется к URL-адресу или отправляется каким-либо другим способом в клиенте, что $ theid будет установлен в мой белый номер «876» — так что мне нужно сделать дополнительную проверку либо в клиенте, либо в php?
Любая помощь приветствуется, спасибо!
Задача ещё не решена.
Других решений пока нет …