Объедините эти 2 аналогичные функции PHP - PullRequest
0 голосов
/ 24 августа 2011

Как видно из названия, мне интересно, можно ли объединить эти две похожие функции в одну:

Эта функция дезинфицирует общие входные данные:

function sanitize($input) 
 {
  if(get_magic_quotes_gpc() == true)
    {
     $input = stripslashes($input);
   }
     return htmlspecialchars($input);
}

, а эта дезинфицирует входные данные, которые обновляют базу данных.:

function sanitizeSQL($input) 
 {
  if(get_magic_quotes_gpc() == true)
    {
     $input = stripslashes($input);
   }
     return mysql_real_escape_string(htmlspecialchars($input));
}

может быть с другим оператором if или чем-то добавить или удалить * mysql_real_escape_string () *?просто не знаю, как это сделать ...

Как обычно, вся помощь приветствуется и спасибо заранее.

Ответы [ 4 ]

2 голосов
/ 24 августа 2011

Довольно просто объединить их.

function sanitize($input, $sql = false) { // $sql will default to false
    if (get_magic_quotes_gpc() === true) $input = stripslashes($input);
    $input = htmlspecialchars($input);
    return ($sql === true ? mysql_real_escape_string($input) : $input);
}

Мы просто добавляем переменную $sql, чтобы сказать, нужно ли ее очищать для SQL.

1 голос
/ 24 августа 2011

Я бы вызвал sanitizeSQL вызовом sanitize.Не повторяющийся код, но разные имена функций.

function sanitizeSQL($input) 
 {
  return mysql_real_esape_string(sanitize($input));
}

Если вы хотите, чтобы для вызова был только 1 метод, я бы передал второй параметр:

function sanitize($input, $forSql) 
 {
  if(get_magic_quotes_gpc() == true)
    {
     $input = stripslashes($input);
   }

  $input = htmlspecialchars($input);

  if($forSql == true)
    {
      $input = mysql_real_escape_string($input);
    }

  return $input.
}
1 голос
/ 24 августа 2011
function sanitizeBoth($input, $mysqlEscape) 
{
    if(get_magic_quotes_gpc() == true)
    {
        $input = stripslashes($input);
    }
    $return = htmlspecialchars($input);
    if ($mysqlEscape){
        $return = mysql_real_escape_string($return);
    }
    return $return;
}

$ mysqlEscape - это переключатель: если он равен true, он работает как sanitizeSQL, если false как sanitize

0 голосов
/ 24 августа 2011

Позвольте мне предложить другой подход.Вы должны либо отключить magic_quotes, либо удалить косые черты на всех данных get / post / cookie как можно раньше, следуя примеру # 2 здесь .

Не включайте эту часть в свой коддля подготовки HTML или SQL.Это должно быть сделано отдельно, когда вы на самом деле строите документы HTML или операторы SQL.И в этот момент все, что вам нужно, это htmlspecialchars для HTML или mysql_real_escape_string для SQL.

Не думайте, что существует "общая" функция очистки, которая будет работать для всех входных данных.На самом деле, лучше не думать об этом как о дезинфекции вообще.Обычный текст уже достаточно санитарный.Вы просто экранируете текст для определенного выходного формата (HTML, SQL, CSV, PDF и т. Д.).Каждый выходной формат имеет свой метод экранирования, поэтому нет подходов, которые бы работали для всех них.Вот почему magic_quotes такая плохая идея, и поэтому ее нужно отменить как можно скорее.

...