Используйте SQL-запрос в str_replace - PullRequest
0 голосов
/ 27 октября 2018

У меня есть код для получения заголовка сообщения:

$content = str_replace('%title', $post->post_title, $content );

Я бы хотел использовать свой собственный заголовок из базы данных.
Я написал этот код:

        global $wpdb;
        $mycontent = $wpdb->get_var(
            'SELECT `meta_value` FROM `wp_postmeta` WHERE `post_id` = '.$post->ID.' AND `meta_key` = \'my_seo_title\';'
        );
        $content = str_replace('%my_seo_title', $mycontent , $content);


Это создает проблему безопасности?

1 Ответ

0 голосов
/ 28 октября 2018

Есть ли проблемы с безопасностью?

В том маловероятном случае, если ваш $post объект будет заменен чем-то другим (и в этот момент я считаю, что безопасность сайта уже скомпрометирована), злоумышленник может заменить значение, возвращаемое $post->ID, вредоносным запросом. строка (она же SQL-инъекция ).

Чтобы избежать этого, как уже отмечали все остальные, вы должны экранировать свой запрос, используя метод prepare () из объекта $wpdb:

$mycontent = $wpdb->get_var(
    $wpdb->prepare(
        "SELECT `meta_value` FROM `wp_postmeta` WHERE `post_id` = %d AND `meta_key` = %s;",
        array( $post->ID, 'my_seo_title' )
    )
);

Из любопытства, почему вы вручную извлекаете мета-значение из базы данных, когда у нас уже есть функция get_post_meta () (которая выполняет всю проверку безопасности автоматически для вас)? Я имею в виду, вы могли бы заменить свой код на:

$mycontent = get_post_meta( $post->ID, 'my_seo_title', true );

... и забудьте о написании запросов вручную и / или обеспечении их безопасности (когда в этом нет необходимости).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...