За последние 24 часа нас посетили 17985 программистов и 1716 роботов. Сейчас ищут 1859 программистов ...

База данных mySQL - как правильно подключиться и сделать запрос?

Тема в разделе "PHP и базы данных", создана пользователем miltorg, 22 июл 2019.

Статус темы:
Закрыта.
  1. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Предлагаете нам копать карьер детской лопаткой для песочницы?

    Да вроде технарь. Потому использовал устоявшийся термин (во всем мире, в т.ч. и русскоговорящих странах) и даже привел его определение.
     
  2. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Потому что я вообще на Друпале пишу. в основном - там вся эта фигня с безопасностью и с использованием различных баз - из коробки.
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    @miltorg, т.е. вместо двух регулярок целую CMS? :)))
     
  4. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Провинциальный Политех в начале 2000-х?
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Если пишешь на друпале, надо использовать средства для работы с базами данных drupal, а не напрямую php
     
  6. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Нет. Там проектик большой. С 14 года я его пишу. Написал почти всё. И по нескольку раз
     
  7. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    20, 30 лет (http://prohorov-andrej.ru/rabota).

    upload_2019-7-22_18-32-0.png
    С таким опытом не вы должны задавать вопросы, а давать ответы на такие вопросы как у этой темы.
     
  8. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    ??? А где я писал что я их не использую? У вас какое образование?
    --- Добавлено ---
    Я ведь написал в начале - Подходы к работе с базой данных меняются постоянно. Постоянно.
     
  9. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Талантливый человек - талантлив во всём. С идиотами такая же ситуация.
     
    romach и villiwalla нравится это.
  10. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Тогда и диалога с вами, не может быть, если на протяжении 30 лет в программирование вы стоите на месте. 10 натянутых шаблончиков, с нулевой посещаемостью, а их содержании не представляет интереса для злоумышлиника, естественно вы никогда не ловили sql-инъекции, тем самым ясно, что бы аргументировать эффективность вашего подхода, но ваш подход это велосипед на коленке т.к есть filter_*
     
  11. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    не совсем.

    если передать в $_POST['familija'] что-нибудь типа "1';DROP TABLE test;'" то сами понимаете, ваш заказчик с вами быстро расстанется.

    да. я понимаю что это просто опечатка, но в этом и заключается минус вашего варианта. ЛЮБАЯ ошибка СРАЗУ приводит к очень серьезным проблемам. а использовали бы PDO с его плейсхолдерами и другими плюшками, и нет проблем.
     
  12. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Но тут ведь все крутые и с опытом - вот я и просил сломать мой код. Но никто не сломал - что-то им мешает.
    --- Добавлено ---
    И что будет? - Ничего не будет.
    Я правда не вижу. В чём опечатка?
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    @miltorg На самом деле, если бы мне заказчик поставил условие проверять имя и фамилию на символы, я бы поставил похожие регулярки (ну если бы с какого-то перепугу решил писать на чистом php). Но, всё равно, в базу бы вставлял через подготовленные запросы. Потому что завтра заказчику в поддержку напишут "А почему я не могу зарегистрироваться как д'Артаньян?", или ещё какой-нибудь вариант, делающий регулярку непригодной. В моём случае я поправлю только регулярку, поскольку работа с базой и так защищена, а в твоём случае надо ещё вспомнить, что там запрос теперь незащищённый стал.
     
  14. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    PHP:
    1. <?
    2. $id=$_POST['id'];
    3. $imja=$_POST['imja'];
    4. $familija=$_POST['familija'];
    5.  
    6. if (preg_match('/\D/', $id)) $id=103;
    7. if (preg_match('/\W/u', $imja)) $imja='Vasja';
    8. if (preg_match('/\W/u', $familija)) $id='Pupkin'; <<-- вот тут !!!!
    9.  
    10. $mysqli = new mysqli("localhost", "user", "password", "database");
    11. $mysqli->query("UPDATE test SET imja='$imja', familija='$familija' where id=$id");
    12. $r = $mysqli->query("SELECT * FROM test where id=$id")->fetch_object();
    13. ?>
    14. <form method="post">
    15. <input name="imja" value="<?=$r->imja?>">
    16. <input name="familija" value="<?=$r->familija?>">
    17. <input name="id" type="hidden" value="<?=$r->id?>">
    18. <input type="submit">
    19. </form>
    Вот ваш код.
    а теперь посмотрите внимательно на $familija

    Код взломан?
     
  15. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Резко отличающиеся результаты не должны учитываться - это закон. Нас так учили в авиационном институте в 1992 году окончания
    --- Добавлено ---
    Не говорите загадками. Я ничего не вижу.
     
  16. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Код (Text):
    1. if (preg_match('/\W/u', $familija)) $id='Pupkin';
    проверяете $familija, а исправляете $id.
     
  17. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Господи. Да таких косяков может быть мульён. Для этого и есть Тестирование и Отладка.
    Вы никогда не писали код?
     
  18. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Это не результаты, а входные данные. Это раз. Два, что должно и что не должно учитываться определяет заказчик. Если заказчик не оговорил ограничение имени, я его ставить не буду, пусть хоть китайскими буквами пишет.
     
  19. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Подправил код. Спасибо Ноду.

    PHP:
    1. <?
    2. $id=$_POST['id'];
    3. $imja=$_POST['imja'];
    4. $familija=$_POST['familija'];
    5.  
    6. if (preg_match('/\D/', $id)) $id=103;
    7. if (preg_match('/\W/u', $imja)) $imja='Vasja';
    8. if (preg_match('/\W/u', $familija)) $familija='Pupkin';
    9.  
    10. $mysqli = new mysqli("localhost", "user", "password", "database");
    11. $mysqli->query("UPDATE test SET imja='$imja', familija='$familija' where id=$id");
    12. $r = $mysqli->query("SELECT * FROM test where id=$id")->fetch_object();
    13. ?>
    14.  
    15. <form method="post">
    16. <input name="imja" value="<?=$r->imja?>">
    17. <input name="familija" value="<?=$r->familija?>">
    18. <input name="id" type="hidden" value="<?=$r->id?>">
    19. <input type="submit">
    20. </form>
     
  20. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    То что у вас их мульён, не сомневаюсь. но сути дела это не меняет.

    Вы привели свой эталонный код, в котором были уверены.
    далее неоднократно писали, Взломайте кто сможет. Никто не сможет. и тд..
    я нашел опечатку, он же баг, позволяющий взломать.

    Отказываетесь признавать это вариантом взлома?
     
  21. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Пусть.
    --- Добавлено ---
    как только посмотрю ваш полный запрос.
     
  22. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Переменная из POST попадает неизменной в SQL запрос. это чистая SQL инъекция..
    приводить запросы несобираюсь, ибо понимающим и так всё уже ясно.

    вы и ваша тема потеряла для меня интерес. удачи.
     
  23. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Взлом - методом опечатки. Ещё можно меня поймать и побить - тогда я сам уничтожу свою таблицу в базе :)
     
  24. miltorg

    miltorg Активный пользователь

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    У меня получился такой запрос:

    UPDATE test SET imja='fedja', familija='"1';DROP TABLE test;'"' where id=Pupkin

    А где можно проверить синтексис?
    --- Добавлено ---
    Не проходит:
    --- Добавлено ---
    Значит взлома не получилось
     
  25. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Код (Text):
    1. UPDATE test SET imja='fedja', familija='"1';DROP TABLE test; --"' where id=Pupkin
     
Статус темы:
Закрыта.