我正在建立WordPress与WooCommerce,其中一个要求是一个小的集成,把一个人从另一个网站直接到一个特定的产品。我在产品上设置了标签中的外部产品引用。
传入查询的一个示例是:
http://localhost/TestSite/search?q=9404
我写了一个短插件来做这件事。
我是一个普通的程序员,但对PHP、WordPress和WooCommerce非常陌生。你能看到任何潜在的错误,无效或安全问题吗?
任何洞察力都会欣然接受。
//Tag on Test Product: 98614
//example URL:
//http://localhost/TestSite/search?q=98614
function TagLinker(){
if (isset($_GET['q']))
{
$TagNumber = $_GET['q'];
$params=array(
'post_type' => 'product',
'post_status' => 'publish',
'tax_query' => array( array(
'taxonomy' => 'product_tag',
'field' => 'slug',
'terms' => $TagNumber
)
));
$wc_query = new WP_Query($params);
if ($wc_query -> have_posts() ) {
$wc_query -> the_post();
$product_id = get_the_ID($wc_query->ID);
$url = get_permalink( $product_id );
wp_reset_postdata();
if ( wp_redirect( $url ) ) {exit;}
};
}
}
add_action( 'init', 'TagLinker' );
?>发布于 2019-12-08 23:40:02
使用框架来遵循方法调用来查看实际操作是一个好主意,Wordpress是目前最受开发的框架之一,因此具有相当好的安全性改进。下面是您正在调用的Wordpress WP_Query类(假设您已经提取了最新的代码)。
看起来,__construct调用$params上的$this->查询,该查询调用wp_parse_args()。(如果已经提取了代码,Grep可以帮助查找类在代码中的位置)。https://github.com/WordPress/WordPress/blob/master/wp-includes/class-wp-query.php
就安全性而言,您主要关注的是用户提供的数据$_GET。如果您觉得WP_Query类在净化用户数据方面做得不够,那么您可以自己对其进行消毒。
在您的情况下,看起来您只想让用户提供一个整数?如果是这样的话,你可以过滤。必要时调整:
if (filter_var($_GET['q'], FILTER_VALIDATE_INT)) {
// is int
}附加提示:在您的示例中没有理由将$_GET设置为$TagNumber,因为您没有对它进行消毒。这样做只会增加内存使用量,并使代码评审复杂化。
对于是否在if和"{“之间清除,请保持一致。清除的大部分原因与重构有关,并且主要适用于类定义。
没有必要?>关闭脚本,它可以添加意外的空白。
不要缩进函数,除非它们在类中(看起来是没有原因的)。
选择一种命名变量的样式,例如snake_case;不是$TagName和$params,而是$tag_name和$params
我希望这是有用的:)
https://codereview.stackexchange.com/questions/233643
复制相似问题