Использование и проверка ввода RTF после использования FILTER_SANITIZE_FULL_SPECIAL_CHARS - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь проверить ввод форматированного текста, предоставляемый редактором TinyMCE. Я прекрасно понимаю, что могу оставить себя открытым для XSS et c, и хочу сделать это правильно.

Я очищаю данные POST перед тем, как что-либо делать с ними, с помощью следующего кода:

//sanitise POST array
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_FULL_SPECIAL_CHARS);

Затем у меня есть собственный класс проверки для проверки каждого ввода поля, теперь он очищен, но ... Я не уверен, как проверить очищенный ввод RTF. Например, я использую ctype-alpha для проверки альфа-входов и filter_var ($ this-> currentObject-> value, FILTER_VALIDATE_EMAIL для проверки действительных адресов электронной почты, но я не уверен, что использовать для очищенного поля tinyMCE.

Я думаю, что мне нужно, возможно, регулярное выражение? Кто-нибудь знает правильное выражение для проверки ввода TinyMCE RTF? Правильно ли я делаю это?

Если использовать регулярное выражение, я могу затем используйте приведенную ниже функцию, чтобы узнать, действительна ли она:

//used to send a custom regex
function regex($regex, $errorMsg = null)
{
  if ($this->isValid && (!empty($this->currentObject->value))) {
    $this->isValid = (filter_var($this->currentObject->value, FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => "$regex")))) ? true : false;

    if (!$this->isValid) {
      $this->setErrorMsg($errorMsg, self::$error_regex);
    }
  }
  return $this;
}

Я думаю, это сработает, но не хватает ли мне каких-либо символов?

^[a-zA-Z0-9\s&amp;|&\.\!?\;\\\-\<\>\/]*$

1 Ответ

1 голос
/ 09 мая 2020

Вы можете использовать следующие функции для очистки пользовательского ввода. Пользовательские функции регулярных выражений могут иметь несколько угловых случаев.

sanitize
---------
htmlspecialchars(filter_var($string, FILTER_SANITIZE_STRING), ENT_QUOTES, 'UTF-8');

wordsanitize
------------
  $string =  preg_replace('~\W+~', '', $string);
  htmlspecialchars(filter_var($string, FILTER_SANITIZE_STRING), ENT_QUOTES, 'UTF-8');


charactersanitize
-----------------
  $string =  preg_replace('~[^A-Za-z_.]~', '', $string);
  htmlspecialchars(filter_var($string, FILTER_SANITIZE_STRING), ENT_QUOTES, 'UTF-8');


numbersanitize
--------------
  $string =  preg_replace('~\D+~', '', $string);
  htmlspecialchars(filter_var($string, FILTER_SANITIZE_STRING), ENT_QUOTES, 'UTF-8');
...