Как защитить от инъекций при обновлении post_meta с помощью ajax и update_post_meta() в WordPress? Я волнуюсь, что пользователь вводит мой сайт, делает его уязвимым для инъекций и других неприятных вещей, о которых я не могу думать.Как я могу защитить от инъекций при обновлении post_meta с помощью ajax и update_post_meta() в WordPress?
Я новичок в разработке и веб-разработке WordPress.
Я создаю систему, в которой пользователь может входить в систему и обновлять различную информацию об их бизнесе, которая затем сохраняется в базе данных MySQL (в будущем я получу эти данные с помощью API-интерфейса WordPress от клиентского приложения). Поэтому я создаю страницу профиля и формирую форму для ввода пользователя, а затем отправляю данные с помощью функции ajax и WordPress update_post_meta(). Это мой обратный вызов ajax:
/**
* AJAX Callback
* Always Echos and Exits
*/
function lla_update_profil_meta_callback() {
// Ensure we have the data we need to continue
if(! isset($_POST) || empty($_POST) || ! is_user_logged_in()) {
// If we don't - return custom error message and exit
header('HTTP/1.1 400 Empty POST Values');
echo 'Could Not Verify POST Values.';
exit;
}
// Get our current post ID
$post_id = lla_get_post_id();
if($post_id != null){
//get all the values from $_POST
$um_val = sanitize_text_field($_POST['kategori_id']) ;
$selected_term_data = get_term((int)$um_val);
$new_post_title = sanitize_text_field($_POST['post_title']);
//these are the values and im guessing it should be here i protect against injection?
$new_beskrivelse = $_POST['beskrivelse'];
$new_telefon = $_POST['telefon'];
$new_email = $_POST['email'];
$new_website = $_POST['website'];
$new_vejnavn = $_POST['vejnavn'];
$new_husnummer = $_POST['husnummer'];
$new_salside = $_POST['salside'];
$new_postnummer = $_POST['postnummer'];
$new_by = $_POST['by'];
update_post_meta($post_id, 'kategori_id', $um_val);
update_post_meta($post_id, 'beskrivelse', $new_beskrivelse);
update_post_meta($post_id, 'telefon', $new_telefon);
update_post_meta($post_id, 'email', $new_email);
update_post_meta($post_id, 'website', $new_website);
update_post_meta($post_id, 'vejnavn', $new_vejnavn);
update_post_meta($post_id, 'husnummer', $new_husnummer);
update_post_meta($post_id, 'salside', $new_salside);
update_post_meta($post_id, 'postnummer', $new_postnummer);
update_post_meta($post_id, 'by', $new_by);
//make sure the category chosen is updated in the backend aswell
wp_set_object_terms($post_id, (int)$um_val, $selected_term_data->taxonomy, false);
//updating post-title
$my_post = array(
'ID' => $post_id,
'post_title' => $new_post_title,
'post_name' => $new_post_title,
);
wp_update_post($my_post);
}else{
echo "no post";
}
exit;
}
add_action('wp_ajax_nopriv_um_cb', 'lla_update_profil_meta_callback');
add_action('wp_ajax_um_cb', 'lla_update_profil_meta_callback');
Как сделать это более безопасным?
Вы можете использовать функцию 'htmlspecialchars' см - http://php.net/manual/en/ function.htmlspecialchars.php. Пример '$ new_beskrivelse = htmlspecialchars (! Empty ($ _ POST ['beskrivelse'])? $ _POST ['beskrivelse']: '')' – htmlbrewery