Wordpress高级搜索表单 - 安全性

时间:2018-06-03 19:26:39

标签: php wordpress forms

我正在构建一个wordpress主题,需要一个带有单选按钮和下拉菜单的高级搜索表单。我通过使用POST方法创建表单并在“搜索”页面上提取数据来使其工作,以便在加载页面之前更新$ wp_query。这是我使用的代码。

表格

echo'<div class="header-img">
    <form method="post" class="cat-search" action="'.esc_url( home_url( '/search' ) ).'" role="search" >
        <select name="category">';
        foreach ( $categories as $category ) {
            echo'<option value="'.$category->slug.'">'.$category->name.'</option>';
        }
        echo'</select>
        <input type="radio" name="gender" value="male"> Male<br>
        <input type="radio" name="gender" value="female"> Female<br>
        <input value="Search" type="submit" />
    </form>
</div>';

搜索页面

$cat = esc_html($_POST["category"]);
$gen = esc_html($_POST["gender"]);

if($_POST["gender"]) {
    $cat_array = array($cat,$gen);
    $cat_string = implode("+", $cat_array);
} else {
    $cat_string = $cat;
}

$args = array(
    'post_type' => 'post',
    'orderby' => 'date',
    'order' => 'DESC',
    'paged' => get_query_var( 'paged' ),
    'category_name' => $cat_string,
); 

这很有用,但由于我不是PHP方面的专家,我想知道这是否是正确的方法,或者我的代码中是否存在潜在的漏洞。

旁注:

我首先尝试使用GET方法,但在提交之前我无法找到修改网址的方法。提交表单时,URL的名称/值对就像这样:/?s = a&amp; gender = male

这不起作用,因为搜索需要像这样:/?s = a + male

我知道GET方法是更好的方法,但我无法弄明白。如果有人知道如何在提交之前修改网址,我可能会更改我的代码以使用GET方法。

1 个答案:

答案 0 :(得分:0)

需要考虑的事项:

传统上,当使用 GET 方法提交表单时,输入数据将附加到请求的 URL,例如example.com/page1/form.php?name1=value1&name2=value2

我敢肯定有办法解决这个问题,但如果您的配置确实如此,您最终可能会遇到搜索引擎的一些问题。

从 SEO 的角度来看,这可能很糟糕,原因有两个:

  • 这些网址可以被缓存,任何知道该网址的人(包括搜索引擎抓取工具)都可以直接访问这些网址。
  • 如果对输入字段没有限制,则可以生成无限的唯一 URL。
  • 如果上述任何一种情况失控(或被第三方直接操纵),这可能会导致抓取效率或索引膨胀问题。

仅供参考。我意识到这已经 3 年了,所以希望您能够在提交之前解决修改 url 的潜在问题(当然还有安全方面)。