Фильтрация запросов

Discussion in 'PHP' started by Student :), 18 Dec 2007.

  1. Student :)

    Student :) Elder - Старейшина

    Joined:
    9 Feb 2007
    Messages:
    278
    Likes Received:
    18
    Reputations:
    -15
    Привет всем
    есть ли такое рег выражение которое не пропустит лишнее в запрос а оставит только

    A-z и _ и 0-9
    спасибо
     
  2. BlackCats

    BlackCats Elder - Старейшина

    Joined:
    1 Feb 2006
    Messages:
    642
    Likes Received:
    630
    Reputations:
    -3
    Code:
    htmlspecialchars()
    
    Не нашли? Я подскажу. Введите, например, в поле "имя" двойную кавычку и какой-нибудь текст, например, "123. Отправьте форму, и взгляните на исходный код полученной страницы. В четвертой строке будет что-то наподобие:
    Введите Ваше имя: <input type="text" name="name" value=""123">
    
    То есть - ничего хорошего. А если бы хитрый пользователь ввел JavaScript-код?
    
    Для решения этой проблемы необходимо воспользоваться функцией htmlspecialchars(), которая заменит служебные символы на их HTML-представление (например, кавычку - на &quot;):
    
      1.  <html>
       2.  <body>
       3.  <?
       4.    $name = isset($_POST['name']) ? htmlspecialchars($_POST['name']) : '';
       5.    $year = isset($_POST['year']) ? htmlspecialchars($_POST['year']) : '';
       6.  
       7.    if (isset($_POST['name'], $_POST['year'])) {
       8.      if ($_POST['name'] == '') {
       9.        echo 'Укажите имя!<br>';
      10.      } else if ($_POST['year'] < 1900 || $_POST['year'] > 2004) {
      11.        echo 'Укажите год рождения! Допустимый диапазон значений: 1900..2004<br>';
      12.      } else {
      13.        echo 'Здравствуйте, ' . $name . '!<br>';
      14.        $age = 2004 - $_POST['year'];
      15.        echo 'Вам ' . $age . ' лет<br>';
      16.      }
      17.      echo '<hr>';
      18.    }
      19.  ?>
      20.  <form method="post" action="<?=$_SERVER['PHP_SELF']?>">
      21.    Введите Ваше имя: <input type="text" name="name" value="<?=$name?>">
      22.    <br>
      23.    Введите Ваш год рождения: <input type="text" name="year" value="<?=$year?>">
      24.    <input type="submit" value="OK">
      25.  </form>
      26.  </body>
      27.  </html>
    
    Повторите опыт и убедитесь, что теперь HTML-код корректен.
    
    Запомните - функцию htmlspecialchars() необходимо использовать всегда, когда выводится содержимое переменной, в которой могут присутствовать спецсимволы HTML.
    оно?
     
    1 person likes this.
  3. Student :)

    Student :) Elder - Старейшина

    Joined:
    9 Feb 2007
    Messages:
    278
    Likes Received:
    18
    Reputations:
    -15
    ну оно но не совсем

    эта штука пропустит '
     
  4. halkfild

    halkfild Members of Antichat

    Joined:
    11 Nov 2005
    Messages:
    365
    Likes Received:
    578
    Reputations:
    313
    PHP:
    <?
    if (isset(
    $_GET['param'])) {
      
    preg_match_all('/[a-z0-9_]+/iU'$_GET['param'], $out);
      echo 
    "<PRE>";
      
    print_r($out);
      echo 
    "</PRE>";
    }
    ?>
     
    _________________________
    #4 halkfild, 18 Dec 2007
    Last edited: 18 Dec 2007
  5. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    $pattern = "/[a-zA-Z0-9_]+/iUs";

    if (!preg_match($pattern, $some_str, $matches)) die('Fuck!');
     
  6. Student :)

    Student :) Elder - Старейшина

    Joined:
    9 Feb 2007
    Messages:
    278
    Likes Received:
    18
    Reputations:
    -15
    О то что надо это можно пременить для безопасности запросов в Sql?
    или можно всётаки обойти проверку ? :)
     
  7. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    $some_str = 'mda\'';

    http://ru2.php.net/manual/ru/reference.pcre.pattern.modifiers.php для жирного

    ^([a-z0-9_])$
     
    2 people like this.
  8. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    ENT_QUOTES

    вообще достаточно просто данные в помощью mysql_escape_string или mysql_real_escape_string экранировать. другое лишнее.
     
    #8 GreenBear, 18 Dec 2007
    Last edited: 18 Dec 2007
  9. Student :)

    Student :) Elder - Старейшина

    Joined:
    9 Feb 2007
    Messages:
    278
    Likes Received:
    18
    Reputations:
    -15
    Spasibo Vsem!
     
  10. DRON-ANARCHY

    DRON-ANARCHY Отец порядка

    Joined:
    4 Mar 2005
    Messages:
    713
    Likes Received:
    142
    Reputations:
    50
    Интересно, как у автора получилось выучить работу с Sql если задает такие забавные вопросы))