Защита от инекций

Тема в разделе "PHP", создана пользователем afonya09, 14 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. afonya09

    afonya09

    Регистр.:
    31 янв 2009
    Сообщения:
    260
    Симпатии:
    18
    $login = pg_escape_string($_POST['login']);
    pg_query($db, "SELECT id FROM people where \"login\"='".$login."' and \"password\"='".$password."'")

    Достаточно ли pg_escape_string для защиты от инекций??
     
  2. VictorVi

    VictorVi Прохожие

    Я обычно использую mysql_real_escape_string. Пока проблем не было =)
     
  3. humster

    humster Создатель

    Регистр.:
    8 апр 2008
    Сообщения:
    15
    Симпатии:
    1
    можно написать подобную фукнцию проверки на инъекции
    PHP:
    function escape_inj($text) {
      
    $text strtolower($text); // Приравниваем текст параметра к нижнему регистру
      
    if (
        !
    strpos($text"select") && // 
        
    !strpos($text"union") && //
        
    !strpos($text"select") && //
        
    !strpos($text"order") && // Ищем вхождение слов в параметре
        
    !strpos($text"where") && // 
        
    !strpos($text"char") && //
        
    !strpos($text"from"//
      
    ) {
        return 
    true// Вхождений нету - возвращаем true
      
    } else {
        return 
    false// Вхождения есть - возвращаем false
      
    }
    }

     
  4. 2pick

    2pick Постоялец

    Регистр.:
    15 мар 2009
    Сообщения:
    102
    Симпатии:
    29
    гы.. а если строка закодирована? :) urldecode еще поставить надо... да и то не панацея. Хаксеры изъ...бнутся



    Совет. Ставь все переменные в кавычки одинарные (ну тут стоит). и потом строго разделяй числовые переменные, т.е. к ф-ии что дал товарсич humster - делай preg_match на числа.
     
  5. uNknownMark

    uNknownMark

    Регистр.:
    22 сен 2007
    Сообщения:
    393
    Симпатии:
    169
    Используй регулярное выражение для логина которое пропустит только разрешенные символы, типа "А...Я A...Z 1234567890", mysql_real_escape_string, и не забывай про кавычки.
    Я обычно делал так:
    PHP:
    function PrepareStr ($str$maxLen=0) { //Тут можно добавить проверку на максимальную длину логина, что в принципе запретит всякие длинные и дурные значения. Например, длинна логина не больше 20 символов.
        /*if ($maxLen!=0) {
            if (strlen($str) > $maxLen) {
                echo "Hacker He-he!";
            }
        }*/
        
    $str= ($maxLen!=0) ? substr($str,0,$maxLen) : $str;
        return 
    myAddSlashes(trim(strip_tags($str)));
    }

    function 
    myAddSlashes($str) {
        
    $str stripslashes($str);
        return 
    addslashes($str);
    //В этой функции желательно еще добавить проверку на то включен ли magic_quotes
     
  6. nikanors

    nikanors Писатель

    Регистр.:
    5 апр 2008
    Сообщения:
    8
    Симпатии:
    0
    а куда все это вставляется? подскажите новичку ...
     
  7. NeXlafe

    NeXlafe Прохожие

    вроде в индекс
     
  8. Deller

    Deller Создатель

    Регистр.:
    24 фев 2008
    Сообщения:
    34
    Симпатии:
    16
    Пользуюсь обычно mysql_real_escape_string(htmlspecialchars($data)) но на самом деле лучше пропускать только "белые символы"
     
  9. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    а зачем вы экранируете кавычки \"login\"?
     
  10. Deller

    Deller Создатель

    Регистр.:
    24 фев 2008
    Сообщения:
    34
    Симпатии:
    16
    Запрос по привычке всегда делаю в двойных кавычках. Как следствие предпочитаю их экранировать. Да и кроме того потом, если при вводе данных в базу так фильтрануть что конечно не является универсальным, потом выводить мона спокойно данные, не фильтруя их на выходе что существенно улучшит быстродействие.
     
Статус темы:
Закрыта.