Как обезопасить поле ввода

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

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

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    есть у меня
    PHP:
    <input type="text" name="query" size="30" />
    надо ограничить так, чтобы юзер мог в это поле ввести только адрес сайта, и ничто другое. а то я переживаю что он туда пхп код свой внедрит или еще что-нить зловредное. Как обезопаситься? В безопасности пока не разбирался :)
     
  2. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
    или с помощью javascript или при проверки отравленых данных проверять при помощи регулярного выражения на соотвествие урлу
     
  3. t0wer

    t0wer BlackHerald

    Регистр.:
    24 июн 2008
    Сообщения:
    735
    Симпатии:
    424
    проверка URL на валидность:
    PHP:
    <? preg_match(/^(http(s)?:\/\/)(([^\/]+\.)+)\w{2,}(\/)?.*$/i”$url); ?>
    можно посложнее провести:
    PHP:
    <?PHP
          
    function check_url($url) {
          if (
    eregi'^Перейти по ссылке, $url)) {
          $urlArray = parse_url($url);
          if (!$urlArray[port]) $urlArray[port] = '
    80';
          if (!$urlArray[path]) $urlArray[path] = '
    /';
          $sock = fsockopen($urlArray[host], $urlArray[port], &$errnum, &$errstr);
          if (!$sock) $res = '
    DNS';
          else {
          $dump .= "GET $urlArray[path] HTTP/1.1\r\n";
          $dump .= "Host: $urlArray[host]\r\nConnection: close\r\n";
          $dump .= "Connection: close\r\n\r\n";
          fputs($sock, $dump);
          while ($str = fgets($sock, 1024)) {
          if (eregi("^http/[0-9]+.[0-9]+ ([0-9]{3}) [a-z ]*", $str))
          $res[code] = trim(eregi_replace('
    ^http/[0-9]+.[0-9]+
          ([
    0-9]{3})
          [
    a-]*', "\\1", $str));
          if (eregi("^Content-Type: ", $str))
          $res[contentType] = trim(eregi_replace("^Content-Type: ",
          "",
          $str));
          }
          fclose($sock);
          flush();
          return $res[code];
          }
          } else $res = "N/A";
          return $res;
          }
          ?>
     
    phillip нравится это.
  4. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    Либо так:
    PHP:
    <?php
    $adres 
    "microsoft.com";
    $adres strtolower($adres);
    $adres preg_replace("`^http(s)?\:\/\/([0-9A-Z\.]+)(\/)?.*$`i""\\2"$adres);
    $adres ip2long(gethostbyname($adres));
    if(!empty(
    $adres) and $adres!=-1)
        echo 
    "Адресс валидный";
    else
        echo 
    "Адресс невалидный";
    ?>
     
    phillip нравится это.
Статус темы:
Закрыта.