sql >> データベース >  >> RDS >> Mysql

WordPressのget_results()データベース関数を使用するとSQLインジェクションが防止されますか

    tadmanが説明したように、get_resultsはSQLインジェクション攻撃を防ぎません。

    準備機能を使用する必要があります。

    SQLインジェクションを防ぐために上記のコードを書き直しました:

    global $wpdb;
    $offset = (isset($_POST["moreSearchResults"])) ? $_POST["searchOffset"] : 0;
    
    $querySearchVals = "
        SELECT DISTINCT post_title, ID
        FROM {$wpdb->prefix}posts
        WHERE (";
    
    $sVals = array();
    $sVals = explode(" ", $searchVal);
    
    $lastIndex = intval(count($sVals)) - 1;
    $orderByCaseVals = "";
    for($i = 0; $i<count($sVals);$i++)
    {
        $queryPrep = $wpdb->prepare(" post_title LIKE '%%%s%%' ", $wpdb->esc_like( $sVals[$i] ));
        $querySearchVals .= $queryPrep;
        if($i != $lastIndex)
            $querySearchVals .= " OR ";
    
        $queryPrep = $wpdb->prepare(" WHEN post_title LIKE '%%%s%%' THEN ($i + 2) ", $wpdb->esc_like( $sVals[$i] ));
        $orderByCaseVals .= $queryPrep;
    }
    
    $querySearchVals .= ") 
        AND {$wpdb->prefix}posts.post_type = 'post'
        AND post_status = 'publish' 
        ORDER BY CASE";
    
    $queryPrep = $wpdb->prepare(" WHEN post_title LIKE '%%%s%%' THEN 1 ", $wpdb->esc_like( $searchVal ));
    $querySearchVals .= $queryPrep;
    $querySearchVals .= "
            $orderByCaseVals
        END
    ";
    
    $queryPrep = $wpdb->prepare(" LIMIT %d, 12", $offset);
    $querySearchVals .= $queryPrep . ";";
    



    1. 列挙された列を使用したデータベース設計の代替手段であり、パフォーマンスが低下します

    2. PostgreSQL外部キーが存在しない、継承の問題?

    3. MySQL GaleraCluster4.0の新機能

    4. カーソルサポートの回避策は、SQL Server ParallelDataWarehousingTDSエラーの実装機能ではありません