Предлагаете нам копать карьер детской лопаткой для песочницы? Да вроде технарь. Потому использовал устоявшийся термин (во всем мире, в т.ч. и русскоговорящих странах) и даже привел его определение.
Потому что я вообще на Друпале пишу. в основном - там вся эта фигня с безопасностью и с использованием различных баз - из коробки.
Если пишешь на друпале, надо использовать средства для работы с базами данных drupal, а не напрямую php
20, 30 лет (http://prohorov-andrej.ru/rabota). С таким опытом не вы должны задавать вопросы, а давать ответы на такие вопросы как у этой темы.
??? А где я писал что я их не использую? У вас какое образование? --- Добавлено --- Я ведь написал в начале - Подходы к работе с базой данных меняются постоянно. Постоянно.
Тогда и диалога с вами, не может быть, если на протяжении 30 лет в программирование вы стоите на месте. 10 натянутых шаблончиков, с нулевой посещаемостью, а их содержании не представляет интереса для злоумышлиника, естественно вы никогда не ловили sql-инъекции, тем самым ясно, что бы аргументировать эффективность вашего подхода, но ваш подход это велосипед на коленке т.к есть filter_*
не совсем. если передать в $_POST['familija'] что-нибудь типа "1';DROP TABLE test;'" то сами понимаете, ваш заказчик с вами быстро расстанется. да. я понимаю что это просто опечатка, но в этом и заключается минус вашего варианта. ЛЮБАЯ ошибка СРАЗУ приводит к очень серьезным проблемам. а использовали бы PDO с его плейсхолдерами и другими плюшками, и нет проблем.
Но тут ведь все крутые и с опытом - вот я и просил сломать мой код. Но никто не сломал - что-то им мешает. --- Добавлено --- И что будет? - Ничего не будет. Я правда не вижу. В чём опечатка?
@miltorg На самом деле, если бы мне заказчик поставил условие проверять имя и фамилию на символы, я бы поставил похожие регулярки (ну если бы с какого-то перепугу решил писать на чистом php). Но, всё равно, в базу бы вставлял через подготовленные запросы. Потому что завтра заказчику в поддержку напишут "А почему я не могу зарегистрироваться как д'Артаньян?", или ещё какой-нибудь вариант, делающий регулярку непригодной. В моём случае я поправлю только регулярку, поскольку работа с базой и так защищена, а в твоём случае надо ещё вспомнить, что там запрос теперь незащищённый стал.
PHP: <? $id=$_POST['id']; $imja=$_POST['imja']; $familija=$_POST['familija']; if (preg_match('/\D/', $id)) $id=103; if (preg_match('/\W/u', $imja)) $imja='Vasja'; if (preg_match('/\W/u', $familija)) $id='Pupkin'; <<-- вот тут !!!! $mysqli = new mysqli("localhost", "user", "password", "database"); $mysqli->query("UPDATE test SET imja='$imja', familija='$familija' where id=$id"); $r = $mysqli->query("SELECT * FROM test where id=$id")->fetch_object(); ?> <form method="post"> <input name="imja" value="<?=$r->imja?>"> <input name="familija" value="<?=$r->familija?>"> <input name="id" type="hidden" value="<?=$r->id?>"> <input type="submit"> </form> Вот ваш код. а теперь посмотрите внимательно на $familija Код взломан?
Резко отличающиеся результаты не должны учитываться - это закон. Нас так учили в авиационном институте в 1992 году окончания --- Добавлено --- Не говорите загадками. Я ничего не вижу.
Код (Text): if (preg_match('/\W/u', $familija)) $id='Pupkin'; проверяете $familija, а исправляете $id.
Господи. Да таких косяков может быть мульён. Для этого и есть Тестирование и Отладка. Вы никогда не писали код?
Это не результаты, а входные данные. Это раз. Два, что должно и что не должно учитываться определяет заказчик. Если заказчик не оговорил ограничение имени, я его ставить не буду, пусть хоть китайскими буквами пишет.
Подправил код. Спасибо Ноду. PHP: <? $id=$_POST['id']; $imja=$_POST['imja']; $familija=$_POST['familija']; if (preg_match('/\D/', $id)) $id=103; if (preg_match('/\W/u', $imja)) $imja='Vasja'; if (preg_match('/\W/u', $familija)) $familija='Pupkin'; $mysqli = new mysqli("localhost", "user", "password", "database"); $mysqli->query("UPDATE test SET imja='$imja', familija='$familija' where id=$id"); $r = $mysqli->query("SELECT * FROM test where id=$id")->fetch_object(); ?> <form method="post"> <input name="imja" value="<?=$r->imja?>"> <input name="familija" value="<?=$r->familija?>"> <input name="id" type="hidden" value="<?=$r->id?>"> <input type="submit"> </form>
То что у вас их мульён, не сомневаюсь. но сути дела это не меняет. Вы привели свой эталонный код, в котором были уверены. далее неоднократно писали, Взломайте кто сможет. Никто не сможет. и тд.. я нашел опечатку, он же баг, позволяющий взломать. Отказываетесь признавать это вариантом взлома?
Переменная из POST попадает неизменной в SQL запрос. это чистая SQL инъекция.. приводить запросы несобираюсь, ибо понимающим и так всё уже ясно. вы и ваша тема потеряла для меня интерес. удачи.
У меня получился такой запрос: UPDATE test SET imja='fedja', familija='"1';DROP TABLE test;'"' where id=Pupkin А где можно проверить синтексис? --- Добавлено --- Не проходит: --- Добавлено --- Значит взлома не получилось