Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

वर्डप्रेस get_results() डेटाबेस फ़ंक्शन का उपयोग एसक्यूएल इंजेक्शन को रोकता है

ठीक है, जैसा कि टैडमैन ने समझाया कि 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस से फ़ाइलों को jsp . में उनके पथ से पुनर्प्राप्त करना

  2. कैसे Extbase में एक क्वेरी डिबग करने के लिए?

  3. मैसकल चेतावनी प्रश्न?

  4. Mysql में डायनेमिक कॉलम चुनें

  5. लारवेल क्वेरी बिल्डर और लेफ्ट जॉइन के साथ पंक्तियों को हटाएं