Plugin Directory

Changeset 3141483


Ignore:
Timestamp:
08/26/2024 08:13:45 AM (18 months ago)
Author:
coderevolution
Message:

fixed SQL injection issues

Location:
wp-pocket-urls
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • wp-pocket-urls/tags/1.0.3/classes/class-wp-pocketurl-clicks.php

    r3132893 r3141483  
    183183    public function getClickCountByPostID($ID){
    184184        global $wpdb;
    185         $sql = "SELECT count(1) FROM {$wpdb->wp_pocketurl_clicks_table} where link_id=$ID";
     185        $sql = $wpdb->prepare(
     186            "SELECT count(1) FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id = %d",
     187            $ID
     188        );
    186189        return $wpdb->get_var($sql);
    187190    }
     
    205208            'fields'        => 'ids', // Only get post IDs
    206209        ));
    207         $ids = implode(',',$post_ids);
    208         $sql = "SELECT COUNT(1) as total FROM {$wpdb->wp_pocketurl_clicks_table} where link_id IN ($ids)";
    209         $sum = $wpdb->get_var($sql);
     210        if (!empty($post_ids))
     211        {
     212            $placeholders = array_fill(0, count($post_ids), '%d');
     213            $format = implode(',', $placeholders);
     214            $query = "SELECT COUNT(1) as total FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id IN ($format)";
     215            $sql = call_user_func_array(array($wpdb, 'prepare'), array_merge(array($query), $post_ids));
     216            $sum = $wpdb->get_var($sql);
     217        }
     218        else
     219        {
     220            $sum = 0; // No posts, so count is 0
     221        }
    210222        return $sum;
    211223    }
     
    213225    * get clicks details by link ID
    214226    * return array of rows
    215     */
    216     public function getClicksDetailsByID($ID,$start,$end){
    217         global $wpdb;
    218         $sql = "SELECT * FROM {$wpdb->wp_pocketurl_clicks_table} where link_id=$ID ORDER BY click_date DESC LIMIT $start, 10";
     227    */public function getClicksDetailsByID($ID, $start, $end){
     228        global $wpdb;
     229        $sql = $wpdb->prepare(
     230            "SELECT * FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id = %d ORDER BY click_date DESC LIMIT %d, %d",
     231            $ID, $start, 10
     232        );
    219233        $result = $wpdb->get_results($sql);
    220         return $result; 
     234        return $result;   
    221235    }
    222236    /*
     
    226240    public function getClicksDetailsTotalBYID($ID){
    227241        global $wpdb;
    228         $sql = "SELECT count(1) FROM {$wpdb->wp_pocketurl_clicks_table} where link_id=$ID";
     242        $sql = $wpdb->prepare(
     243            "SELECT count(1) FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id = %d",
     244            $ID
     245        );
    229246        $result = $wpdb->get_var($sql);
    230         return $result; 
     247        return $result;   
    231248    }
    232249    /*
     
    236253    public function getClicksCountBYID($ID){
    237254        global $wpdb;
    238         $sql = "SELECT count(1) FROM {$wpdb->wp_pocketurl_clicks_table} where link_id=$ID";
     255        $sql = $wpdb->prepare(
     256            "SELECT count(1) FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id = %d",
     257            $ID
     258        );
    239259        $result = $wpdb->get_var($sql);
    240         return $result; 
     260        return $result;   
    241261    }
    242262
     
    246266    public function delete_clicks_count($id){
    247267        global $wpdb;
    248         $wpdb->query("DELETE FROM {$wpdb->wp_pocketurl_clicks_table} where link_id=$id");
    249     }
    250    
     268        $sql = $wpdb->prepare(
     269            "DELETE FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id = %d",
     270            $id
     271        );
     272        $wpdb->query($sql);
     273    }
    251274}
  • wp-pocket-urls/tags/1.0.3/classes/class-wp-pocketurl-reports.php

    r3132893 r3141483  
    139139  public function wp_pocketurl_links_by_country($code){
    140140    global $wpdb;
    141     $sql = "SELECT DISTINCT(link_id) as ID from {$wpdb->wp_pocketurl_clicks_table} WHERE click_country_code = {$code}";
     141    $sql = $wpdb->prepare(
     142        "SELECT DISTINCT(link_id) as ID FROM {$wpdb->wp_pocketurl_clicks_table} WHERE click_country_code = %s",
     143        $code
     144    );
    142145    return (array) $wpdb->get_col($sql);
    143146  }
     
    162165  * get clicks count grouped by date
    163166  */
    164   public function wp_pocketurl_get_clicks_report($cmonth=null, $cat=null, $country=null,$link=null ){
    165     global $wpdb;$and=0;
    166     $sql = "SELECT count(1) as clicks, DATE(click_date) as date  FROM {$wpdb->wp_pocketurl_clicks_table}";
    167     if($country || $cmonth || $cat || $link){
    168       $sql .=" WHERE";
    169     }
    170 
    171     if($country){
    172       $sql .=" click_country_code ='$country'";
    173       $and=1;
    174     }
    175 
    176     if($cmonth){
    177       if($and){
    178         $sql.=" AND";
    179       }
    180       $year = date('Y',strtotime($cmonth));
    181       $month = date('m',strtotime($cmonth));
    182       $sql .=" YEAR(click_date)='$year' AND MONTH(click_date)='$month'";
    183       $and=1;
    184     }
    185 
    186     if($cat){
    187       if($and){
    188         $sql.=" AND";
    189       }
    190       $IDs = implode(',', $this->wp_pocketurl_get_links_ids_by_cat_id($cat) );
    191       $sql.=" link_id IN ({$IDs})";
    192       $and=1;
    193     }
    194     if($link){
    195       if($and){
    196         $sql.=" AND";
    197       }
    198       $sql.=" link_id = {$link}";
    199       $and=1;
    200     }
    201     $sql .=" GROUP BY DATE(click_date) ORDER BY click_date ASC";
     167  public function wp_pocketurl_get_clicks_report($cmonth = null, $cat = null, $country = null, $link = null){
     168    global $wpdb;
     169    $sql = "SELECT count(1) as clicks, DATE(click_date) as date FROM {$wpdb->wp_pocketurl_clicks_table}";
     170
     171    $where_clauses = [];
     172
     173    if ($country) {
     174        $where_clauses[] = $wpdb->prepare("click_country_code = %s", $country);
     175    }
     176
     177    if ($cmonth) {
     178        $year = date('Y', strtotime($cmonth));
     179        $month = date('m', strtotime($cmonth));
     180        $where_clauses[] = $wpdb->prepare("YEAR(click_date) = %d AND MONTH(click_date) = %d", $year, $month);
     181    }
     182
     183    if ($cat) {
     184        $IDs = implode(',', array_map('absint', $this->wp_pocketurl_get_links_ids_by_cat_id($cat)));
     185        if (!empty($IDs)) {
     186            $where_clauses[] = "link_id IN ({$IDs})";
     187        }
     188    }
     189
     190    if ($link) {
     191        $where_clauses[] = $wpdb->prepare("link_id = %d", $link);
     192    }
     193
     194    if (!empty($where_clauses)) {
     195        $sql .= " WHERE " . implode(' AND ', $where_clauses);
     196    }
     197
     198    $sql .= " GROUP BY DATE(click_date) ORDER BY click_date ASC";
     199
    202200    $result = $wpdb->get_results($sql);
    203201    return $result;
    204   }
     202}
    205203 
    206204  /*
  • wp-pocket-urls/tags/1.0.3/classes/class-wp-pocketurl.php

    r3132893 r3141483  
    265265        global $wpdb;
    266266        global $post_type;   
    267     if ( $post_type != 'wp_pocketurl_link' ) return;
    268         $sql = "DELETE FROM {$wpdb->wp_pocketurl_clicks_table}  WHERE link_id={$postID}";   
     267        if ($post_type != 'wp_pocketurl_link') return;
     268        $sql = $wpdb->prepare(
     269            "DELETE FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id = %d",
     270            $postID
     271        );
    269272        $rows = $wpdb->query($sql);
    270273    }
  • wp-pocket-urls/trunk/classes/class-wp-pocketurl-clicks.php

    r2359978 r3141483  
    183183    public function getClickCountByPostID($ID){
    184184        global $wpdb;
    185         $sql = "SELECT count(1) FROM {$wpdb->wp_pocketurl_clicks_table} where link_id=$ID";
     185        $sql = $wpdb->prepare(
     186            "SELECT count(1) FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id = %d",
     187            $ID
     188        );
    186189        return $wpdb->get_var($sql);
    187190    }
     
    205208            'fields'        => 'ids', // Only get post IDs
    206209        ));
    207         $ids = implode(',',$post_ids);
    208         $sql = "SELECT COUNT(1) as total FROM {$wpdb->wp_pocketurl_clicks_table} where link_id IN ($ids)";
    209         $sum = $wpdb->get_var($sql);
     210        if (!empty($post_ids))
     211        {
     212            $placeholders = array_fill(0, count($post_ids), '%d');
     213            $format = implode(',', $placeholders);
     214            $query = "SELECT COUNT(1) as total FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id IN ($format)";
     215            $sql = call_user_func_array(array($wpdb, 'prepare'), array_merge(array($query), $post_ids));
     216            $sum = $wpdb->get_var($sql);
     217        }
     218        else
     219        {
     220            $sum = 0; // No posts, so count is 0
     221        }
    210222        return $sum;
    211223    }
     
    213225    * get clicks details by link ID
    214226    * return array of rows
    215     */
    216     public function getClicksDetailsByID($ID,$start,$end){
    217         global $wpdb;
    218         $sql = "SELECT * FROM {$wpdb->wp_pocketurl_clicks_table} where link_id=$ID ORDER BY click_date DESC LIMIT $start, 10";
     227    */public function getClicksDetailsByID($ID, $start, $end){
     228        global $wpdb;
     229        $sql = $wpdb->prepare(
     230            "SELECT * FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id = %d ORDER BY click_date DESC LIMIT %d, %d",
     231            $ID, $start, 10
     232        );
    219233        $result = $wpdb->get_results($sql);
    220         return $result; 
     234        return $result;   
    221235    }
    222236    /*
     
    226240    public function getClicksDetailsTotalBYID($ID){
    227241        global $wpdb;
    228         $sql = "SELECT count(1) FROM {$wpdb->wp_pocketurl_clicks_table} where link_id=$ID";
     242        $sql = $wpdb->prepare(
     243            "SELECT count(1) FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id = %d",
     244            $ID
     245        );
    229246        $result = $wpdb->get_var($sql);
    230         return $result; 
     247        return $result;   
    231248    }
    232249    /*
     
    236253    public function getClicksCountBYID($ID){
    237254        global $wpdb;
    238         $sql = "SELECT count(1) FROM {$wpdb->wp_pocketurl_clicks_table} where link_id=$ID";
     255        $sql = $wpdb->prepare(
     256            "SELECT count(1) FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id = %d",
     257            $ID
     258        );
    239259        $result = $wpdb->get_var($sql);
    240         return $result; 
     260        return $result;   
    241261    }
    242262
     
    246266    public function delete_clicks_count($id){
    247267        global $wpdb;
    248         $wpdb->query("DELETE FROM {$wpdb->wp_pocketurl_clicks_table} where link_id=$id");
    249     }
    250    
     268        $sql = $wpdb->prepare(
     269            "DELETE FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id = %d",
     270            $id
     271        );
     272        $wpdb->query($sql);
     273    }
    251274}
  • wp-pocket-urls/trunk/classes/class-wp-pocketurl-reports.php

    r3132892 r3141483  
    139139  public function wp_pocketurl_links_by_country($code){
    140140    global $wpdb;
    141     $sql = "SELECT DISTINCT(link_id) as ID from {$wpdb->wp_pocketurl_clicks_table} WHERE click_country_code = {$code}";
     141    $sql = $wpdb->prepare(
     142        "SELECT DISTINCT(link_id) as ID FROM {$wpdb->wp_pocketurl_clicks_table} WHERE click_country_code = %s",
     143        $code
     144    );
    142145    return (array) $wpdb->get_col($sql);
    143146  }
     
    162165  * get clicks count grouped by date
    163166  */
    164   public function wp_pocketurl_get_clicks_report($cmonth=null, $cat=null, $country=null,$link=null ){
    165     global $wpdb;$and=0;
    166     $sql = "SELECT count(1) as clicks, DATE(click_date) as date  FROM {$wpdb->wp_pocketurl_clicks_table}";
    167     if($country || $cmonth || $cat || $link){
    168       $sql .=" WHERE";
    169     }
    170 
    171     if($country){
    172       $sql .=" click_country_code ='$country'";
    173       $and=1;
    174     }
    175 
    176     if($cmonth){
    177       if($and){
    178         $sql.=" AND";
    179       }
    180       $year = date('Y',strtotime($cmonth));
    181       $month = date('m',strtotime($cmonth));
    182       $sql .=" YEAR(click_date)='$year' AND MONTH(click_date)='$month'";
    183       $and=1;
    184     }
    185 
    186     if($cat){
    187       if($and){
    188         $sql.=" AND";
    189       }
    190       $IDs = implode(',', $this->wp_pocketurl_get_links_ids_by_cat_id($cat) );
    191       $sql.=" link_id IN ({$IDs})";
    192       $and=1;
    193     }
    194     if($link){
    195       if($and){
    196         $sql.=" AND";
    197       }
    198       $sql.=" link_id = {$link}";
    199       $and=1;
    200     }
    201     $sql .=" GROUP BY DATE(click_date) ORDER BY click_date ASC";
     167  public function wp_pocketurl_get_clicks_report($cmonth = null, $cat = null, $country = null, $link = null){
     168    global $wpdb;
     169    $sql = "SELECT count(1) as clicks, DATE(click_date) as date FROM {$wpdb->wp_pocketurl_clicks_table}";
     170
     171    $where_clauses = [];
     172
     173    if ($country) {
     174        $where_clauses[] = $wpdb->prepare("click_country_code = %s", $country);
     175    }
     176
     177    if ($cmonth) {
     178        $year = date('Y', strtotime($cmonth));
     179        $month = date('m', strtotime($cmonth));
     180        $where_clauses[] = $wpdb->prepare("YEAR(click_date) = %d AND MONTH(click_date) = %d", $year, $month);
     181    }
     182
     183    if ($cat) {
     184        $IDs = implode(',', array_map('absint', $this->wp_pocketurl_get_links_ids_by_cat_id($cat)));
     185        if (!empty($IDs)) {
     186            $where_clauses[] = "link_id IN ({$IDs})";
     187        }
     188    }
     189
     190    if ($link) {
     191        $where_clauses[] = $wpdb->prepare("link_id = %d", $link);
     192    }
     193
     194    if (!empty($where_clauses)) {
     195        $sql .= " WHERE " . implode(' AND ', $where_clauses);
     196    }
     197
     198    $sql .= " GROUP BY DATE(click_date) ORDER BY click_date ASC";
     199
    202200    $result = $wpdb->get_results($sql);
    203201    return $result;
    204   }
     202}
    205203 
    206204  /*
  • wp-pocket-urls/trunk/classes/class-wp-pocketurl.php

    r2393200 r3141483  
    265265        global $wpdb;
    266266        global $post_type;   
    267     if ( $post_type != 'wp_pocketurl_link' ) return;
    268         $sql = "DELETE FROM {$wpdb->wp_pocketurl_clicks_table}  WHERE link_id={$postID}";   
     267        if ($post_type != 'wp_pocketurl_link') return;
     268        $sql = $wpdb->prepare(
     269            "DELETE FROM {$wpdb->wp_pocketurl_clicks_table} WHERE link_id = %d",
     270            $postID
     271        );
    269272        $rows = $wpdb->query($sql);
    270273    }
Note: See TracChangeset for help on using the changeset viewer.