sql >> Database teknologi >  >> RDS >> Mysql

Forhindrer brug af WordPress get_results()-databasefunktionen sql-injektion

Ok, så som tadman forklarede, forhindrer get_results ikke sql-injektionsangrebet.

forberedelsesfunktionen skal bruges.

Jeg har skrevet ovenstående kode igen for at forhindre sql-injektion:

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. Hvorfor gik min MySQL-database ned? Få indsigt med den nye MySQL Freeze Frame

  2. MySQL - hent en værdi fra en anden tabel, hvis kolonnen er null

  3. Udskriv rang fra sum i PHP &MySQL i 1,1,3,4 osv. rækkefølge

  4. Sådan fungerer CHAR_LENGTH() i MariaDB