39. Соображения безопасности | Field Forge - Произвольные поля, созданные для скорости
Скачать Войти

39. Соображения безопасности

Лучшие практики для обеспечения безопасности данных пользовательских полей в Field Forge.

Экранирование вывода

Всегда экранируйте значения полей перед выводом. Field Forge не экранирует автоматически значения, возвращаемые get_field().

php
// Text fields -- use esc_html()
echo esc_html( get_field( 'headline' ) );

// URLs -- use esc_url()
echo '<a href="' . esc_url( get_field( 'link' ) ) . '">Click</a>';

// HTML attributes -- use esc_attr()
echo '<div class="' . esc_attr( get_field( 'css_class' ) ) . '">';

// WYSIWYG fields are already sanitized via wp_kses_post()
// Safe to output directly
echo get_field( 'body_content' );

Проверка ввода

Field Forge проверяет значения при сохранении. Текстовые поля проверяют maxlength, числовые поля проверяют min/max/step, поля электронной почты проверяют формат. При программном сохранении убедитесь, что ваши значения действительны:

php
// Sanitize before update_field()
$email = sanitize_email( $_POST['user_email'] );
if ( is_email( $email ) ) {
    update_field( 'contact_email', $email, $post_id );
}

$price = floatval( $_POST['price'] );
if ( $price >= 0 ) {
    update_field( 'price', $price, $post_id );
}

Безопасность REST API

Конечные точки мутаций (POST, PUT, DELETE) требуют возможности manage_options. Конечные точки чтения (GET) требуют аутентифицированного пользователя с возможностями уровня редактора (read_private_posts или edit_posts); конечная точка значений на запись (GET /fields/{post_id}) использует current_user_can('read_post', $post_id), так что приватные записи ограничены так же, как основное ядро WordPress ограничивает метаданные записей. Анонимные запросы всегда получают 401. Группы полей, отмеченные private (или ограниченные правилами местоположения для администраторов) фильтруются из ответов GET для неадминистраторов. Публичное свойство fieldforge на конечных точках записей основного WordPress раскрывает только поля по выбору, как описано в разделе 20. См. раздел 20 для полной матрицы возможностей для каждой конечной точки.

php
// Restrict REST API access to specific fields
add_filter( 'fieldforge/rest/public_field_allowed', function( $allowed, $field, $post_id ) {
    return ( $field['name'] ?? '' ) === 'public_subtitle' ? true : $allowed;
}, 10, 3 );

Пароль и чувствительные поля

Тип поля password хранит значения в виде простого текста. Для чувствительных данных:

php
// Encrypt on save
add_action( 'fieldforge/value_updated', function( $post_id, $field_name ) {
    if ( $field_name === 'api_secret' ) {
        $raw = FIELDFORGE_Field_Values::instance()->get_value( 'api_secret', $post_id );
        $encrypted = openssl_encrypt( $raw, 'aes-256-cbc', AUTH_KEY, 0, substr( AUTH_SALT, 0, 16 ) );
        FIELDFORGE_Field_Values::instance()->update_raw( 'api_secret', $encrypted, $post_id );
    }
}, 10, 2 );

// Decrypt on load
add_filter( 'fieldforge/load_value', function( $value, $field_name ) {
    if ( $field_name === 'api_secret' && $value ) {
        return openssl_decrypt( $value, 'aes-256-cbc', AUTH_KEY, 0, substr( AUTH_SALT, 0, 16 ) );
    }
    return $value;
}, 10, 2 );

ИИ-ассистент Forge Онлайн

Привет! Я ИИ-ассистент Field Forge. Спрашивайте меня о чём угодно по плагину — настройка, возможности, устранение неполадок или разработка.

Только что
На базе Forge AI · Просмотр документации