За последние 24 часа нас посетили 19130 программистов и 1642 робота. Сейчас ищут 896 программистов ...

Дубль 2 защита от sql иньекции для пагинатора или для страницы с новостью.

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

  1. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Мне кажется, что лучше всего использовать подготовленные запросы.
     
  2. Unga

    Unga Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    48
    Симпатии:
    2
    Ясно а я подумал что действительно надо:)
     
  3. Unga

    Unga Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    48
    Симпатии:
    2
    А я все таки опять почитал маленько и опять свое навоял, гляньте как тут есть ошибки какието?
    PHP:
    1. <?php
    2. $id = intval($_GET['id']);
    3. if($id){
    4.     if($id == 1 or $id <= 4000){
    5.     echo "Все нормально передано число.";
    6.     }
    7.     else{
    8.     echo "Страница не найдена!";
    9.     }
    10. }else{
    11. echo "Похоже это не число.";
    12. }
    13. ?>
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @Unga функция intval всегда вернет число.
     
  5. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    is_numeric проверяет число в строке, или нет. Только для защиты от SQL-инъекций это не нужно. И даже если вставишь проверку, не надо писать "Попытка SQL-инъекции", "В get передали не число" и т.п. Любой урл, по которому не возможна отдача запрошенной информации, должен кидать статус 404 и соответствующую страничку
     
  6. Unga

    Unga Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    48
    Симпатии:
    2
    Ну выборка данных то идет по переданному get, значит его можно модефецировать.? Я уже совсем окончательно запутался.
    --- Добавлено ---
    Мне то нужно узнать что в ссылке именно число, и если это число то передавать его для запроса, а если это не число и у меня нет никаких проверок то что будет?
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    уже разжевали и на блюдочке подали, Афтар темы - хватит боятся своих выдуманных кошмаров, у тебя есть скрипт, есть руки, инструменты, коды которые посоветовали, потестировать слабо ? фантазировать мы все горазды.
    --- Добавлено ---
    PHP:
    1. ( isset ( $_GET['pg'] ) && (int)$_GET['pg'] > 1 ? (int)$_GET['pg'] : 1 );
    модифицируй..
    --- Добавлено ---
    +
    http://phpfaq.ru/pdo/pdo_wrapper
     
  8. Unga

    Unga Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    48
    Симпатии:
    2
    Просто я запутался когда вы написали по поводу ошибки, но на самом то деле ошибки опасны когда они ведны, но у меня на хостинге к примеру они выключены, даже если будет разрыв запроса никто ничего неувидит.
    PHP:
    1. <?php
    2.  
    3.  
    4. $result = is_numeric($_GET['id']);
    5. if($result){
    6. echo "Число.";
    7. }
    8.  
    9.  
    10.  
    11.  
    12. ?>
    Такой простой код так же выдаст ошибку Notice: Undefined index: id in /storage/emulated/legacy/htdocs/index.php on line 26

    Это значит что переменная get не инецеилизирована. Меня интересует вот что, если получаеться ошибки не выводяться на сайте, то такой код тоже можно использовать абсолютно безопасно или это заблуждение, вот это последний вопрос надеюсь:)
     
  9. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Blind SQL injection (Content-Based,Time-Based) Раскручиваются без вывода ошибок
     
    Unga нравится это.
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    MouseZver и Unga нравится это.
  11. Unga

    Unga Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    48
    Симпатии:
    2
    Ладно спасибо всем:)
     
  12. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    У тебя с твоими "понятными" видео всё в кашу - ошибки php, ошибки http и прочее... Тут форумом не обойтись. Лечится только внимательным прочтением книжки
     
  13. General_App

    General_App Новичок

    С нами с:
    25 янв 2016
    Сообщения:
    51
    Симпатии:
    1
    1. Проверяешь передана ли переменная.
    2. Проверяешь ее тип и инициализируешь переменную
    3. Подготавливаешь запрос типа:
    $comment = $db->real_escape_string(strip_tags($comment));
    Вот и все.
     
  14. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А теги зачем резать? Если их там быть не должно, лучше при выводе через htmlspecialchars пропустить, тогда они вёрстку не поломают
     
  15. Unga

    Unga Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    48
    Симпатии:
    2
    Всем спасибо можете тему прикрывать, проблемы давно решил.
     
  16. General_App

    General_App Новичок

    С нами с:
    25 янв 2016
    Сообщения:
    51
    Симпатии:
    1
    Да это я как пример привел из своего кода. У меня стрип тегс, нечего не ломает и текст не режет.
     
  17. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А если я зачем-то захочу в комментарий вставить тег, то ты мне его обрежешь и испортишь комментарий. Вместо того, чтобы просто заэкранировать при выводе