всем привет! есть код, в котором ничего не фильтруется, то есть можно сделать инъекцию PHP: mysql_query('UPDATE `news` SET `menu` = "yes" WHERE `id` = "'.$_GET[id].'"'); такой вопрос у меня, как с помощью этого параметра id можно сделать следующий запрос (посмотрите внимательнее, там другая таблица PHP: mysql_query("UPDATE `journal` SET `readed` = 171 WHERE `id` = 1"); или меня надурили и это невозможно?
1. Устранить возможность инъекции 2. Прочесть что это такое и с чем их едят. 3. Что типа того Код (Text): 1';update . ... Ваш запрос... поиграться с кавычками итд --- Добавлено --- ?id=1';......
Из-за какой именно ошибки то? Понятное дело что все передавать как html сущности, всякие там кавычки и точки с запятыми. Проверки того что в параметре id у тс нет... А передать туда можно что угодно
Это неважно. Инъекция всё равно возможна. А её быть категорически не должно. Любая модификация запроса - это полный пздц и быть такой возможности не должно. 1. mysql_ гребаное стрье, про которое давно пора забыть и использовать хотя бы mysqli_ Форумчане давно отчаялись это всем повторять. 2. Для исключения инъекции запомни два простых правила. 2.1 Приводи ожидаемое числовое значение к числовому значению. Если в запросе ожидается целое число, то приводишь к целому числу PHP: mysqli_query($conn, "UPDATE `news` SET `menu` = "yes" WHERE `id` = '" . (int)$_GET['id'] . "'") Если ожидается число с плавающей точкой (реже, но бывает) PHP: mysqli_query($conn, "UPDATE `news` SET `coefficient` = '" . (float)$coefficient . "' WHERE `id` = '" . (int)$_GET['id'] . "'") 2.2 Если ожидается строка, то фильтруешь с помощью встроенного инструмента. Для mysqli это mysqli_real_escape_string PHP: mysqli_query($conn, "UPDATE `news` SET `text` = '" . mysqli_real_escape_string($conn, $text) . "' WHERE `id` = '" . (int)$_GET['id'] . "'")
спасибо. я как раз для этого функции сделал. PHP: function filter($m){ /* FILTER от sql инъекций!*/ if(!is_numeric($m)){ $m = htmlspecialchars($m); } else { $m = intval($m); $m = abs($m); } return $m;} function text($m){ /* Фильтрует текст */ $m = htmlspecialchars($m); $m = mysqli_real_escape_string($m); return $m;} function num($m){ /* Фильтрует цифры */ $m = intval($m); $m = abs($m); return $m;}
@Пэлт выкинь все свои функции и ознакомься с https://www.php.net/manual/ru/mysqli.prepare.php --- Добавлено --- Из-за большой и толстой с названием const