Как я могу обойти триггер MySQL

#php #mysql

#php #mysql

Вопрос:

Я сделал небольшой веб-сайт просто для развлечения для обмена файлами, каждая учетная запись ограничена 20 файлами в день, все данные участников хранятся в таблице MySQL. Имя пользователя, пароль и номер загрузки. Когда кто-то нажимает на загрузить, запускается функция и сохраняет 1 внутри таблицы. и начнется загрузка.

Я подумал, что все работает отлично, после того, как я увидел файл журнала на моем сервере, и я нашел кого-то, кто загружает файл, не запуская функцию и не оставляя историю внутри базы данных!

Как это возможно! и как я могу сделать то же самое, чтобы я мог заблокировать эту ошибку!

Вот код:

     if (isset($_GET['download']) amp;amp; !empty($_GET['download'])){

                if (!(isset($_GET['username']) amp;amp; !empty($_GET['username']))){
                    echo 'Only a member of this website can download this file. However, no username was specified in this download. Sorry for inconvenience.'; 
                    die;
                }

                $dl_username = $this->decrypt($_GET['username']);

                if (gator::getUser($dl_username) == false){
                    echo 'Only a member of this website can download this file. However, the username provided does not exist in the database. Sorry for inconvenience.';   
                    die;
                }

                $dl_user = gator::getUser($dl_username);
                if ($dl_user['downloads'] > 20){
                    echo 'Cannot download more files for today! You have crossed the limit of downloading 20 files.';
                    die;
                }
                gator::updateUser($dl_user['username'], array('downloads' => $dl_user['downloads']   1));

                $filename = $this->filterInput($this->decrypt($_GET['download']));

                if (in_array($filename, gatorconf::get('restricted_files'))) die;

                if (!file_exists($_SESSION['cwd'].DS.$filename)) die;

                // Set headers
                header("Cache-Control: public");
                header("Content-Description: File Transfer");
                header("Content-Disposition: attachment; filename="$filename"");
                header("Content-Type: application/octet-stream");
                header("Content-Transfer-Encoding: binary");
// output file
            set_time_limit(0);
            $file = @fopen($_SESSION['cwd'].DS.$filename,"rb");
            while(!feof($file))
            {
                print(@fread($file, 1024*8));
                ob_flush();
                flush();
            }

            gator::writeLog('download - '.$filename);
            echo 'Downloaded';


            die;
        }
  

РЕДАКТИРОВАТЬ: Существует два файла журнала, один для действий, которые записывают действия участников на веб-сайте, а другой на моем сервере Apache, который записывает все и все соединения даже для не пользователей.

И вот пример того, как выглядит ссылка на файл: «никто не может использовать горячие ссылки»

 https://www.example.com/?download=MLB 820-2186 schematic diagram.pdfamp;username=Linda
  

Комментарии:

1. Можно ли получить доступ к этим файлам напрямую через URL?

2. Это на самом деле загрузка файлов или получение данных из базы данных?

3. @JeffUK Нет, я заблокировал горячие ссылки, они не могут этого сделать.

4. @Barmar «Files» они могут загружать файлы без запуска функции, это pdf-файл, хранящийся в безопасном месте на сервере, никто не может получить к нему доступ по прямой ссылке, к тому же зашифрованный

5. Как несанкционированная загрузка отображается в файле журнала? Вы говорите, что он запускает этот скрипт, но база данных не обновляется?