【问题标题】:Wordpress Advanced Search Form - SecurityWordpress 高级搜索表单 - 安全性
【发布时间】:2018-11-13 04:13:12
【问题描述】:

我正在构建一个 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 的方法。提交表单时,URL 是名称/值对,如下所示:/?s=a&gender=male

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

我知道 GET 方法是更好的方法,但我就是想不通。如果有人知道如何在提交之前修改 url,我可能会更改我的代码以使用 GET 方法。

【问题讨论】:

    标签: php wordpress forms


    【解决方案1】:

    需要考虑的事项:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 2023-01-16
      • 2014-09-02
      相关资源
      最近更新 更多