2017-02-21 36 views
0

Как защитить от инъекций при обновлении 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'); 

Как сделать это более безопасным?

+0

Вы можете использовать функцию 'htmlspecialchars' см - http://php.net/manual/en/ function.htmlspecialchars.php. Пример '$ new_beskrivelse = htmlspecialchars (! Empty ($ _ POST ['beskrivelse'])? $ _POST ['beskrivelse']: '')' – htmlbrewery

ответ

0

использовать такие функции как:

esc_sql(); 
esc_attr(); 
esc_html(); 

Также см Validating Sanitizing and Escaping User Data
Пример:

$new_beskrivelse = esc_sql($_POST['beskrivelse']); 
$new_telefon = esc_sql($_POST['telefon']); 
$new_email = esc_sql($_POST['email']); 
$new_website = esc_sql($_POST['website']); 

 Смежные вопросы

  • Нет связанных вопросов^_^