Дезинфицирующее средство ввода PHP? - PullRequest
4 голосов
/ 30 апреля 2010

Какие хорошие дезинфицирующие средства для HTML (входные) PHP?

Желательно, если что-то встроено - мне бы это хотелось.

UPDATE

В соответствии с запросом, посредством комментариев, ввод должен не разрешать HTML (и, очевидно, предотвращать инъекции XSS и SQL и т. Д.).

Ответы [ 4 ]

3 голосов
/ 30 апреля 2010

html очиститель -> http://htmlpurifier.org/

0 голосов
/ 30 апреля 2010

использование

 $input_var=sanitize_input($_POST);
Функции

и находятся ниже, почти дезинфицируют все, что вам нужно

function sanitize($var, $santype = 1){
     if ($santype == 1) {return strip_tags($var);}
     if ($santype == 2) {return htmlentities(strip_tags($var),ENT_QUOTES,'UTF-8');}
     if ($santype == 3) 
     {
      if (!get_magic_quotes_gpc()) {
       return addslashes(htmlentities(strip_tags($var),ENT_QUOTES,'UTF-8'));
      } 
      else {
         return htmlentities(strip_tags($var),ENT_QUOTES,'UTF-8');
      }
     }
    }

    function sanitize_input($input,$escape_mysql=false,$sanitize_html=true,
             $sanitize_special_chars=true,$allowable_tags='<br><b><strong><p>')
    {
      unset($input['submit']); //we use 'submit' variable for all of our form

      $input_array = $input;

      //array is not referenced when passed into foreach
      //this is why we create another exact array
      foreach ($input as $key=>$value)
      {
       if(!empty($value))
       {
        $input_array[$key]=strtolower($input_array[$key]);
        //stripslashes added by magic quotes
        if(get_magic_quotes_gpc()){$input_array[$key]=sanitize($input_array[$key]);} 

        if($sanitize_html){$input_array[$key] = strip_tags($input_array[$key],$allowable_tags);}

        if($sanitize_special_chars){$input_array[$key] = htmlspecialchars($input_array[$key]);}    

        if($escape_mysql){$input_array[$key] = mysql_real_escape_string($input_array[$key]);}
       }
      }

      return $input_array;

    }

Помните : он не будет очищать многомерный массив, вам нужно рекурсивно его модифицировать.

0 голосов
/ 30 апреля 2010

Если вы хотите выполнить запрос, использующий, скажем, $_GET['user'], хорошим решением было бы сделать что-то подобное, используя mysql_real_escape_string () :

<?php

    $user = mysql_real_escape_string($_GET['user']);
    $SQL = "SELECT * FROM users WHERE username = '$name'";

    //run $SQL now
    ...
?>

Если вы хотите сохранить текст в базе данных, а затем распечатать его на веб-странице, рассмотрите вариант использования htmlentities

[Edit] Или, как сказал awshepard, вы можете использовать addlashes () и stripslashes () функции [/ Edit]

Вот небольшой пример очистки, когда речь идет о предотвращении атак XSS:

<?php
    $str = "A 'quote' is <b>bold</b>";

    //Outputs: A 'quote' is <b>bold</b>
    echo $str;

    // Outputs: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
    echo htmlentities($str);

    // Outputs: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;
    echo htmlentities($str, ENT_QUOTES);
?>
0 голосов
/ 30 апреля 2010

Я всегда использовал функции PHP addlashes () и stripslashes (), но я также только что видел встроенную функцию filter_var () ( link ). Похоже, что есть довольно много встроенных фильтров .

...