Доброго времени суток. Помогите решить задачу с защитой от инъекции. Мне стало известно что у меня в строке Код (Text): $query = mysql_query($q) ; Есть уязвимость. =( Как можно защититься? Помогите пожалуйста, буду при много благодарен. Заранее спасибо! Код (Text): <?PHP //подключение к базе данных include ("bd.php") ; if (isset($_POST['sound'])) // Если поле выбора трека не пустое - закачиваем его на сервер $sound_dir = "sound/" ; // Директория трека $sound_name = basename($_FILES['myfile']['name']) ; // Полное имя файла // Текст ошибок $error_by_mysql = "<label class=\"label\">Ошибка при добавлении данных в базу</span>" ; $error_by_file = "<label class=\"label\">Невозможно загрузить файл в директорию. Возможно её не существует</span>" ; // Начало if(isset($_FILES["myfile"])) { $myfile = $_FILES["myfile"]["tmp_name"] ; $myfile_name = $_FILES["myfile"]["name"] ; $myfile_size = $_FILES["myfile"]["size"] ; $myfile_type = $_FILES["myfile"]["type"] ; $error_flag = $_FILES["myfile"]["error"] ; preg_match('/([^-]*) - ([^\.]*)\.(mp3$)/',$sound_name,$mass) ; // вырезаем расширение и разбиваем на артист (-) трек $artist = $mass[1] ; // артист $track = $mass[2] ; // трек $farmat = $mass[3] ; // рсширение mp3 (на всякий случай) $farmat = ".".$farmat ; $allowed_filetypes = array('.mp3'); // Здесь мы перечисляем допустимые типы файлов if(!in_array($farmat,$allowed_filetypes)) die('Данный тип файла не поддерживается. Допускаются файлы только с форматом [.mp3]') ; // создаём имя для дериктории артист $artist_dr = str_replace(" ", "_", $artist) ; $artist_dr = str_replace("&", "end", $artist_dr) ; // создаём имя для дериктории трека $track_dr = str_replace(" ", "_", $track) ; $track_dr = str_replace("&", "end", $track_dr) ; mkdir("sound/". $artist_dr, 0777); mkdir("sound/". $artist_dr ."/". $track_dr, 0777); $sound_name_sl=str_replace(" ", "_", $sound_name) ; // создаём имя для трека $sound_name_sl=str_replace("&", "end", $sound_name_sl) ; // заменяем & на end $glo_url = "/sound/". $artist_dr ."/". $track_dr ."/". $sound_name_sl ; // заменяем & на end // Если ошибок не было if($error_flag == 0) { $DOCUMENT_ROOT = $_SERVER['DOCMENT_ROOT'] ; $upfile = getcwd() ."/sound/". $artist_dr ."/". $track_dr ."/". $sound_name_sl ; if ($_FILES['myfile']['tmp_name']) { //Если не удалось загрузить файл if (!move_uploaded_file($_FILES['myfile']['tmp_name'], $upfile)) { echo "$error_by_file" ; exit ; } } else { echo 'Проблема: возможна атака через загрузку файла. ' ; echo $_FILES['myfile']['name'] ; exit ; } $q = "INSERT INTO fpsd_sound (artist, track, url, size, data) VALUES ('$artist', '$track', '$glo_url', '$myfile_size', NOW())" ; $query = mysql_query($q) ; // Данные успешно внесены в базу данных, выводим сообщение if ($query == 'true') { echo "<div class='text'>". $artist ." с треком ". $track ." успешно добавлена на сервер!</div>"; echo "<div> <a href='add_sound.php' class='add_sound'>ДОБАВИТЬ ЕЩЕ ТРЕК</a> <a href='index.php' class='add_sound'>НА ГЛАВНУЮ</a></div>"; } else { // В противном случае, выводим ошибку при добавлении в базу данных echo "$error_by_mysql"; } } elseif ($myfile_size == 0) { echo "<label class='label'>Трек не выбрана!<br><br>Вернитесь и выберите!</label><br><a href='add_sound.php' class='add_sound'>ВЫБРАТЬ ТРЕК</a>"; } } ?>
Блин ты хоть раз ответишь или всегда только поучаешь!!! Ни чего что это раздел для новичков - что говорит о том что я новичок и пока что учусь. Лучше бы показал пример экранирования в данной ситуации.. и я бы понял и спасибо сказал... А с экранированием я ознакомился mysql_real_escape_string .. да только везде так написано что только гуру разберётся но ему это уже и не надо читать... А тупо с доступным языком с примерами в разных видах для новичков нигде ничего нет =(
только поучаю сначала покажи пример, где ты перешел от функций к объекту mysqli. примеров с функциями у меня нет. написано только одно: применяй экранирование при операциях с данными. Экранируй переменную перед тем как запихать в запрос. Добавлено спустя 27 секунд: ой ты врунишка
показываю пример использования экранирования с mysqli объетом: Код (PHP): $query = "SELECT * FROM `tbl` WHERE `login` = '".$mysqli->real_escape_string($login)."'"; уловил мысль?