Prevent mysql injections
authorJean-Michel Vourgère <jvourger@greenpeace.org>
Fri, 24 Feb 2017 18:58:29 +0000 (07:58 +1300)
committerJean-Michel Vourgère <jvourger@greenpeace.org>
Thu, 9 Mar 2017 18:06:24 +0000 (18:06 +0000)
squasher.class.php
squasher.php

index 6648595d37e0e4ff4859f71ab05b69373a8c6e1d..eefe829ddbdefd5409e28f6d44605af37178ffb1 100644 (file)
@@ -33,7 +33,7 @@ function validate_user($username, $password, $salt) {
                        $creds['user_level'] = $fetched_object->user_level;
                        $creds['validated'] = true;
                        $log_hash=str_repeat("0",32); // File ID is always empty on login
-                       $q="insert into log (hash,action,user_id,user_name,ip,date) values ('{".mysql_escape_string($log_hash)."}','login','".mysql_escape_string($creds['user_id'])."','".mysql_escape_string($creds['user_name'])."','".mysql_escape_string($_SERVER['REMOTE_ADDR'])."',NOW())";
+                       $q="INSERT INTO log (hash,action,user_id,user_name,ip,date) VALUES ('".mysql_escape_string($log_hash)."','login',".$creds['user_id'].",'".mysql_escape_string($creds['user_name'])."','".mysql_escape_string($_SERVER['REMOTE_ADDR'])."',NOW())";
                        mysql_query($q);
                }
        }
@@ -89,7 +89,7 @@ function update_history() {
 }
 
 function get_users($user_level) {
-       $q = "SELECT * FROM users WHERE user_level < '".$user_level."' order by user_name asc";
+       $q = "SELECT * FROM users WHERE user_level < ".$user_level." ORDER BY user_name ASC";
        $r = mysql_query($q);
 
        while ($o = mysql_fetch_object($r)) {
@@ -108,32 +108,32 @@ function get_logs($type='all') {
                $q="SELECT log.* FROM log WHERE log.user_id != 'x' ";
        switch($type) {
        case "delete":
-               $q.= " and log.action = 'delete'";
+               $q.= " AND log.action = 'delete'";
                break;
        case "download":
-               $q.= " and log.action = 'download'";
+               $q.= " AND log.action = 'download'";
                break;
        case "login":
-               $q.= " and log.action = 'login'";
+               $q.= " AND log.action = 'login'";
                break;
        case "debug":
-               $q.= " and log.action = 'debug'";
+               $q.= " AND log.action = 'debug'";
                break;
        default:
                $q.= "";
                break;
        }
 
-       $today     =" and date > date(date_add(now(), interval -0 day)) ";
-       $yesterday =" and date < date(date_add(now(), interval -0 day)) and date > date(date_add(now(), interval -1 day)) ";
-       $lastweek  =" and date < date(date_add(now(), interval -1 day)) and date > date(date_add(now(), interval -6 day)) ";
-       $older     =" and date < date(date_add(now(), interval -7 day)) and date > date(date_add(now(), interval -30 day)) ";
+       $today     =" AND date > date(date_add(now(), interval -0 day)) ";
+       $yesterday =" AND date < date(date_add(now(), interval -0 day)) AND date > date(date_add(now(), interval -1 day)) ";
+       $lastweek  =" AND date < date(date_add(now(), interval -1 day)) AND date > date(date_add(now(), interval -6 day)) ";
+       $older     =" AND date < date(date_add(now(), interval -7 day)) AND date > date(date_add(now(), interval -30 day)) ";
 
-       $order=" order by log.log_id desc ";
+       $order=" ORDER BY log.log_id desc ";
        $r = mysql_query($q.$today.$order);
        $return = array();
        while($a = mysql_fetch_array($r)) {
-               $qu="select users.user_name from users left join log on users.user_id = log.user_id where log.ip='{".$a['ip']."}' group by users.user_name";
+               $qu="SELECT users.user_name FROM users LEFT JOIN log ON users.user_id = log.user_id WHERE log.ip='".mysql_escape_string($a['ip'])."' GROUP BY users.user_name";
                $ru = mysql_query($qu);
                $a['users_from_ip'] = " | ";
                while($au = mysql_fetch_array($ru))
@@ -142,7 +142,7 @@ function get_logs($type='all') {
        }
        $r = mysql_query($q.$yesterday.$order);
        while($a = mysql_fetch_array($r)) {
-               $qu="select users.user_name from users left join log on users.user_id = log.user_id where log.ip='{".$a['ip']."}' group by users.user_name";
+               $qu="SELECT users.user_name FROM users LEFT JOIN log ON users.user_id = log.user_id WHERE log.ip='".mysql_escape_string($a['ip'])."' GROUP BY users.user_name";
                $ru = mysql_query($qu);
                $a['users_from_ip'] = " | ";
                while($au = mysql_fetch_array($ru))
@@ -151,7 +151,7 @@ function get_logs($type='all') {
        }
        $r = mysql_query($q.$lastweek.$order);
        while($a = mysql_fetch_array($r)) {
-               $qu="select users.user_name from users left join log on users.user_id = log.user_id where log.ip='{".$a['ip']."}' group by users.user_name";
+               $qu="SELECT users.user_name FROM users LEFT JOIN log ON users.user_id = log.user_id WHERE log.ip='".mysql_escape_string($a['ip'])."' GROUP BY users.user_name";
                $ru = mysql_query($qu);
                $a['users_from_ip'] = " | ";
                while($au = mysql_fetch_array($ru))
@@ -160,7 +160,7 @@ function get_logs($type='all') {
        }
        $r = mysql_query($q.$older.$order);
        while($a = mysql_fetch_array($r)) {
-               $qu="select users.user_name from users left join log on users.user_id = log.user_id where log.ip='{".$a['ip']."}' group by users.user_name";
+               $qu="SELECT users.user_name FROM users LEFT JOIN log ON users.user_id = log.user_id WHERE log.ip='".mysql_escape_string($a['ip'])."' GROUP BY users.user_name";
                $ru = mysql_query($qu);
                $a['users_from_ip'] = " | ";
                while($au = mysql_fetch_array($ru))
@@ -172,39 +172,60 @@ function get_logs($type='all') {
 }
 
 function insert_users($u, $admin_level) {
-       $q = "INSERT INTO users (user_name,user_pass,user_level) VALUES ('".$u['user_name']."','".md5($u['user_pass'])."','".$u['user_level']."')";
+       $user_name = $u['user_name'];
+       $user_pass = $u['user_pass'];
+       $user_level = (int)$u['user_level'];
+
+       $q = "INSERT INTO users (user_name,user_pass,user_level) VALUES ('".mysql_escape_string($user_name)."', '".mysql_escape_string(md5($user_pass))."', ".$user_level.")";
        $r = mysql_query($q);
 }
 
 function update_users($u) {
-       if (@$u['user_name']) {
-               $q = "UPDATE users SET user_name = '".$u['user_name']."' WHERE user_id = '".$u['user_id']."'";
+       $user_id = (int)$u['user_id'];
+       $user_name = @$u['user_name'];
+       $user_pass = @$u['user_pass'];
+       $user_level = (int)@$u['user_level'];
+       if ($user_name) {
+               $q = "UPDATE users SET user_name = '".mysql_escape_string($user_name)."' WHERE user_id = ".$user_id;
                $r = mysql_query($q);
        }
-       if (@$u['user_pass']) {
-               $q = "UPDATE users SET user_pass = '".md5($u['user_pass'])."' WHERE user_id = '".$u['user_id']."'";
+       if ($user_pass) {
+               $q = "UPDATE users SET user_pass = '".mysql_escape_string(md5($user_pass))."' WHERE user_id = ".$user_id;
                $r = mysql_query($q);
        }
-       if (@$u['user_level']) {
-               $q = "UPDATE users SET user_level = '".$u['user_level']."' WHERE user_id = '".$u['user_id']."'";
+       if ($user_level) {
+               $q = "UPDATE users SET user_level = ".$user_level." WHERE user_id = ".$user_id;
                $r = mysql_query($q);
        }
 }
 
 function disable_users($u) {
-       $q = "UPDATE users SET user_name = '".$u['user_name']."', user_pass = '', user_level = '".$u['user_level']."' WHERE user_id = '".$u['user_id']."'";
+       $user_id = (int)$u['user_id'];
+       $user_name = @$u['user_name'];
+       $user_level = (int)@$u['user_level'];
+       if ($user_name) {
+               $q = "UPDATE users SET user_name = '".mysql_escape_string($user_name)."' WHERE user_id = ".$user_id;
+               $r = mysql_query($q);
+       }
+       $q = "UPDATE users SET user_pass = '' WHERE user_id = ".$user_id;
+       $r = mysql_query($q);
+       if ($user_level) {
+               $q = "UPDATE users SET user_level = ".$user_level." WHERE user_id = ".$user_id;
+               $r = mysql_query($q);
+       }
        $r = mysql_query($q);
 }
 
 function remove_users($u) {
-       $q = "DELETE FROM users WHERE user_id = '".$u['user_id']."'";
+       $user_id = (int)$u['user_id'];
+       $q = "DELETE FROM users WHERE user_id = ".$user_id;
        $r = mysql_query($q);
 }
 
 function get_rights($user_id) {
        $result = array();
 
-       $q = "SELECT folder_path, access FROM user_rights WHERE user_id = '".$user_id."'";
+       $q = "SELECT folder_path, access FROM user_rights WHERE user_id = ".(int)$user_id;
        $r = mysql_query($q);
        while ($o = mysql_fetch_object($r)) {
 
@@ -238,19 +259,19 @@ function give_rights($user_id, $type='folderrights') {
 }
 
 function update_rights($edited_user, $m, $admin_level) {
-       $q = "SELECT count(*) result FROM users WHERE user_id = '".$edited_user."' AND user_level < '".$admin_level."'";
+       $q = "SELECT count(*) result FROM users WHERE user_id = ".(int)$edited_user." AND user_level < ".(int)$admin_level;
        $r = mysql_query($q);
        $o = mysql_fetch_object($r);
 
        if ($o->result) {
                foreach ($m AS $path => $access) {
-                       $p_q = "SELECT count(*) result FROM user_rights WHERE user_id = '".$edited_user."' AND folder_path = '".$path."'";
+                       $p_q = "SELECT count(*) result FROM user_rights WHERE user_id = ".(int)$edited_user." AND folder_path = '".mysql_escape_string($path)."'";
                        $p_r = mysql_query($p_q);
                        $p_o = mysql_fetch_object($p_r);
                        if ($p_o->result == 1)
-                               mysql_query("UPDATE user_rights SET access = ".$access." WHERE folder_path = '".$path."' AND user_id = '".$edited_user."'");
+                               mysql_query("UPDATE user_rights SET access = ".(int)$access." WHERE folder_path = '".mysql_escape_string($path)."' AND user_id = ".(int)$edited_user);
                        if ($p_o->result == 0)
-                               mysql_query("INSERT INTO user_rights (user_id,folder_path,access) values ('".$edited_user."','".$path."','".$access."') ");
+                               mysql_query("INSERT INTO user_rights (user_id,folder_path,access) values (".(int)$edited_user.",'".mysql_escape_string($path)."',".(int)$access.") ");
                }
        }
 }
@@ -621,7 +642,7 @@ function check_stats($h) {
                        $m_subject = "Squasher Debug: File Removed";
                        $m_body = "Upload removed: \n File: ".$config['path']."/".$config[2]." \n Status: ".$config['status']." \n Chunks: ".$count." out of ".$config[5];
                        mail('jasper@netformatie.nl', $m_subject, $m_body, "From: support@netformatie.nl");
-                       $qlog = "insert into log (hash,file,action,user_id,user_name,ip,date) values ('{$h}','{$filepath}','debug','-1','squasher-web','cleanup',NOW())";
+                       $qlog = "INSERT INTO log (hash,file,action,user_id,user_name,ip,date) VALUES ('".mysql_escape_string($h)."','".mysql_escape_string($filepath)."','debug',-1,'squasher-web','cleanup',NOW())";
                        mysql_query($qlog);
                } else {
                        //do move
@@ -646,13 +667,13 @@ function check_stats($h) {
                        if ($ship[2] == 'myas' || $ship[2] == 'myez' || $ship[2] == 'myrw')
                                mail('ro1@'.$ship[2].'.greenpeace.org','Squasher: '.$config[2].' resume request','The squasher server has detected an upload error. Please resume the squasher transmission for '.$config[2].' to correct this problem.',"From: support@netformatie.nl\nX-Priority: 1");
 
-                       $qlog = "insert into log (hash,file,action,user_id,user_name,ip,date) values ('{$h}','{$filepath}','debug','-1','squasher-web','retry',NOW())";
+                       $qlog = "INSERT INTO log (hash,file,action,user_id,user_name,ip,date) VALUES ('".mysql_escape_string($h)."','".mysql_escape_string($filepath)."','debug',-1,'squasher-web','retry',NOW())";
                        mysql_query($qlog);
 
                }
        } elseif ($config['status']=='Completed' && $count == $config[5]) {
                if ($this->history[$h]['completed']==0)
-                       mysql_query("UPDATE file_hash SET completed = 1 WHERE md5_hash = '".$h."'");
+                       mysql_query("UPDATE file_hash SET completed = 1 WHERE md5_hash = '".mysql_escape_string($h)."'");
        }
 }
 
@@ -660,7 +681,7 @@ function update_hash($hash, $path) {
        $check_hash_query = "select * from file_hash where md5_hash = '".$hash."'";
        $check_hash_result = mysql_query($check_hash_query);
        if(mysql_num_rows($check_hash_result) == 0) {
-               $insert_hash_query = "INSERT INTO file_hash (md5_hash,file) values ('".$hash."','".$path."')";
+               $insert_hash_query = "INSERT INTO file_hash (md5_hash,file) values ('".mysql_escape_string($hash)."','".mysql_escape_string($path)."')";
                mysql_query($insert_hash_query);
        }
 }
@@ -688,7 +709,7 @@ function populate_stats($path, $h) {
        ***/
        $config = $this->configs[$h];
 
-       $q = "SELECT * FROM file_hash WHERE md5_hash = '{$h}'";
+       $q = "SELECT * FROM file_hash WHERE md5_hash = '".mysql_escape_string($h)."'";
        $r = mysql_query($q);
        $o = mysql_fetch_object($r);
        $validated_chunks = $o->validated_chunks;
@@ -708,7 +729,7 @@ function populate_stats($path, $h) {
                                $this->configs[$h]['stats'][$i] = "1.00";
                } else {
                        //failsafe voor verwijderde bestanden
-                       mysql_query("UPDATE file_hash SET completed = 0 WHERE md5_hash = '".$h."'");
+                       mysql_query("UPDATE file_hash SET completed = 0 WHERE md5_hash = '".mysql_escape_string($h)."'");
                }
        } else {
                $keep_validating = true;
@@ -748,7 +769,7 @@ function populate_stats($path, $h) {
                                }
                        }
                }
-               mysql_query("UPDATE file_hash SET validated_chunks = '{$validated_chunks}' WHERE md5_hash = '".$h."'");
+               mysql_query("UPDATE file_hash SET validated_chunks = '".mysql_escape_string($validated_chunks)."' WHERE md5_hash = '".mysql_escape_string($h)."'");
        }
 }
 
@@ -915,9 +936,9 @@ function delete_file($h, $s) {
        }
 
        #Update DB
-       $q = "delete from file_hash where file_hash = '{$h}'";
+       $q = "DELETE FROM file_hash WHERE file_hash = '".mysql_escape_string($h)."'";
        mysql_query($q);
-       $q = "insert into log (hash,file,action,user_id,user_name,ip,date) values ('{$h}','{$filepath}','delete','".$s['user_id']."','".$s['user_name']."','".$_SERVER['REMOTE_ADDR']."',NOW())";
+       $q = "INSERT INTO log (hash,file,action,user_id,user_name,ip,date) VALUES ('".mysql_escape_string($h)."','".mysql_escape_string($filepath)."','delete',".(int)$s['user_id'].",'".mysql_escape_string($s['user_name'])."','".mysql_escape_string($_SERVER['REMOTE_ADDR'])."',NOW())";
        mysql_query($q);
 
        #Send debug mail
index 2e71b8f66db2550d7975ddd3c1711e2ea5c7ded6..c8006469b46053282b5b16f5edeb5332e5a38fb7 100644 (file)
@@ -40,12 +40,12 @@ if (@$_GET['f']) {
 }
 
 if (@$_GET['f']) {
-       $f_q = "SELECT * FROM file_hash WHERE md5_hash = '".$_GET['f']."'";
+       $f_q = "SELECT * FROM file_hash WHERE md5_hash = '".mysql_escape_string($_GET['f'])."'";
        $f_r = mysql_query($f_q);
        $f_o = mysql_fetch_object($f_r);
 
        //log downloads
-       @mysql_query("INSERT INTO log (hash,file,action,user_id,user_name,ip,date) VALUES ('".$_GET['f']."','{$f_o->file}','download','".$_SESSION['creds']['user_id']."','".$_SESSION['creds']['user_name']."','".$_SERVER['REMOTE_ADDR']."',NOW())");
+       @mysql_query("INSERT INTO log (hash,file,action,user_id,user_name,ip,date) VALUES ('".mysql_escape_string($_GET['f'])."','".mysql_escape_string($f_o->file)."','download','".mysql_escape_string($_SESSION['creds']['user_id'])."','".mysql_escape_string($_SESSION['creds']['user_name'])."','".mysql_escape_string($_SERVER['REMOTE_ADDR'])."',NOW())");
 
        $_hpath_arr=explode("/", $f_o->file);
        $file=array_pop($_hpath_arr); //Remove filename