您的代码:
$cat_data = get_option("category_$cat_id");
if ( isset($cat_data[\'extra1\'] ) ){
echo do_shortcode(\'[videojs youtube="\'.$cat_meta[\'extra1\'].\'" width="699" height="269" preload="auto" loop="true" autoplay="false" controls="false" class="responsive-video"]\');
}
这里有很多事情你没有做,或者可以做得更好:
如果get_option
找不到任何内容并返回值false
您的代码可能会出现致命错误并崩溃videojs
但您可以使用WordPress附带的oembed功能删除此依赖关系。你知道吗,如果你把youtube的URL单独放在一行内容中,它会自动神奇地转换成视频播放器您从不检查URL是否确实是URL,例如,如果URL是:"]<script>alert(\'hacked\');</script>[sldfjknv attr="
, 这可能会导致前端上运行的不安全javascript无法替换,如果不存在所述插件或短代码,则功能将失败,且不会出现回退,它不考虑空值或空格字符串,“不是有效的youtube URL,但它是有效的字符串,并且将生成无效的短代码,如果$cat_id
替换为一个非数字的变量,这可能会产生意外的后果,并且是sql注入的可能途径。记住这一点,让我们重构:
$data = get_option( \'category_\'.$cat_id );
// does the object exist?
if ( $data !== false ) {
// empty checks if the value is set, and also checks if it has something in it, not just spaces
if ( !empty( $data[\'extra1\'] ) ) {
$url = $data[\'extra1\'];
// URLs are URLs, lets escape this URL so that nothing nasty is passed along
$url = esc_url( $url );
// grab the embed html using oembed ( it has a second argument to specify width and height but it should be unnecessary )
$embed = wp_oembed_get( $url );
// set up a fallback
if ( $embed != false ) {
$embed = \'<a href="\'.$url.\'">\'.$url.\'</a>\';
}
echo $embed;
}
}
新版本检查值是否为所需的值,转义值,并使用经过良好测试的WordPress核心API,而不是第三方。响应性应该由主题/插件CSS负责。如果由于任何原因嵌入失败,它也会返回到超链接。