За последние 24 часа нас посетили 9602 программиста и 470 роботов. Сейчас ищут 225 программистов ...

В чем моя ошибка?

Тема в разделе "PHP для новичков", создана пользователем @Николай@, 12 окт 2017.

  1. @Николай@

    @Николай@ Новичок

    С нами с:
    29 авг 2017
    Сообщения:
    70
    Симпатии:
    9
    единичка должна в таблице files в столбике zhaloba поменяться на ноль, но этого не происходит
    Код (Text):
    1. if(isset($_GET['otkl'])){
    2. mysql_query("UPDATE `files`
    3.             SET `zhaloba` = 0
    4.             WHERE `id` = '".$_GET['otm']."'");
    5. header('Location: ?zhaloba');
    6. }
    7. <div class="commup-edit"><a href="?otkl&otm='.$post['id'].'">Отклонить жалобу12345</a></div>
     
  2. romach

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

    С нами с:
    26 окт 2013
    Сообщения:
    1.765
    Симпатии:
    287
    По порядку:
    1. Действия должны передаваться только лишь post-запросами (тут призывается @Fell-x27 с рассказом про картинку на форуме)
    2. post-запрос должен сопровождаться csrf-токеном
    3. Вот так вот взять и просто вставить любой ID по желанию?
    4. mysql_* уже выпилен.
    5. Почему не меняется - я как-то даже хз )
     
  3. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    3.229
    Симпатии:
    490
    Адрес:
    Лень
    1. у тебя уязвимость
    2. пиши абсолютные пути
    3. проверял что в гете присылается и существует ли ид в бд ?
    примеры абсолютных путей:
    /var/www/site/forum/index.php
    /img/frame.gif
    с:\windows\command.com
     
  4. @Николай@

    @Николай@ Новичок

    С нами с:
    29 авг 2017
    Сообщения:
    70
    Симпатии:
    9
    я д@#$@#$р я указал не ту ссылку /facepalm/
     
    MouseZver нравится это.
  5. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    3.229
    Симпатии:
    490
    Адрес:
    Лень
    (int)$_GET['otm']
    вся защита
     
    @Николай@ нравится это.
  6. romach

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

    С нами с:
    26 окт 2013
    Сообщения:
    1.765
    Симпатии:
    287
    Нет
     
  7. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    3.229
    Симпатии:
    490
    Адрес:
    Лень
    да
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    10.603
    Симпатии:
    1.305
    Адрес:
    :сердА
    Защита от чего? От любого валидного числового ID, какой я захочу прописать, подпихнув его в адрес картиночки на форуме, где бывает админ ресурса, которй откроет картиночку и пошлет кросс-браузерный запрос со своими привелегиями, сделав то, что хочу я, а не он? :)

    Кроме SQL-инъекций есть еще и другие уязвимости :)
     
  9. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    3.229
    Симпатии:
    490
    Адрес:
    Лень
    я имею ввиду чтобы текстовое что - либо не прошло
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    10.603
    Симпатии:
    1.305
    Адрес:
    :сердА
    А тебе говорят, что этого недостаточно.
     
    romach нравится это.
  11. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    3.229
    Симпатии:
    490
    Адрес:
    Лень
    не мой код, не заморачиваюсь. Первую помощь озвучил
     
  12. romach

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

    С нами с:
    26 окт 2013
    Сообщения:
    1.765
    Симпатии:
    287
    Ну тогда не пиши что это "вся защита", а то ведь он так и подумает, что всё нормально.
     
  13. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    3.229
    Симпатии:
    490
    Адрес:
    Лень
    вся защита по sql инъекцииo_O
     
  14. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    173
    Симпатии:
    10
    Я все время цифровые посты и геты интом обрабатываю, ну, если нужно иногда субстром обрезаю, подскажи как лучше сделать, а то вдруг я что-то упускаю?
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    10.603
    Симпатии:
    1.305
    Адрес:
    :сердА
    А ты так и не понял, почему просто прогонять через инт недостаточно? Я же выше описал пример моей любимой уязвимости.
     
  16. marsik

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

    С нами с:
    30 дек 2008
    Сообщения:
    173
    Симпатии:
    10
    Нет, не понял, как в случае с ТС обработать $_GET['otm'] ?, по мне, так int в данному случае в самый раз, если есть какие-то иные варианты, расскажи, может что-то упускаю.
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    10.603
    Симпатии:
    1.305
    Адрес:
    :сердА
    Для начала - не пересылать команды серверу через GET. Это уже закроет тебя от простейших CSRF-атак. От хитровыбоенных, через JS-инъекцию на стороннем ресурсе, оно тебя не закроет, JS хитрый, он умеет слать POST в фоне. Для таких случаев была придумана техника CSRF-токенов. Попутно она помогает отсеивать консоле ботов.

    Если кратенько, то у каждой формы или в каждом запросе (вкелючая ajax, да), пересылающим серверу запрос, по важности чуть выше, чем "покажи-ка мне главную страницу", должен быть в наличии некий уникальный идентификатор, созданный специально для этой формы.

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

    Алгоритм следующий:

    1) Генерируя страничку с формой, пихаем в нее скрытое поле с идентификатором, сгенерированным на лету.
    2) Идентификатор, параллельно, кладем в сессию.
    3) Пользователь заполнил форму и отправил ее на сервер.
    4) Первым делом проверяем наличие нашего волшебного скрытого поля среди полученных параметров.
    5) Сравниваем его значение с тем, что лежит в сессии.
    6) Совпало? Ок. Эту форму можно обработать.
    7) Не совпало или в форме вообще отсутствует наш токен? Отклоняем запрос, он был послан не нашим клиентом.

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

    При этом некоторые разрабы таки гоняют команды серверу и запросы на изменение данных через GET, да. Например, разрабы движка phpBB. Но, при этом, каждый запрос у них сдобрен длинным токеном. Это, в общем-то, тоже безопасно, но, как по мне, не красиво.