gpt4 book ai didi

php - 在str_replace中使用sql查询

转载 作者:行者123 更新时间:2023-11-29 10:00:45 25 4
gpt4 key购买 nike

我有一个获取帖子标题的代码,如下所示:

$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);


这会造成安全问题吗?

最佳答案

Does it have security issue?

万一您的 $post对象被其他东西替换(此时我认为网站的安全性已经受到损害),攻击者可以替换 $post->ID 返回的值带有恶意查询字符串(又名 SQL Injection )。

为了避免这种情况,正如其他人已经指出的那样,您应该使用 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 );

...并且忘记手动编写查询和/或确保它们安全(当不需要时)。

关于php - 在str_replace中使用sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53024825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com