Ввод текста санитария и безопасность - PullRequest
2 голосов
/ 27 марта 2012

Я пытаюсь убедиться, что все мои входные данные защищены, защищая сервер и атаки XSS.Проверка ввода с strip_tags и htmlentities надежной системой?Мне сказали, что это было и хотел бы подтвердить.то есть, например:

$re = htmlentities(strip_tags($_GET['re']), ENT_COMPAT, "UTF-8");

это должно предотвратить любые команды linux и правильные ссылки html?Есть ли уязвимости, которые не были рассмотрены с этим?

Ответы [ 3 ]

5 голосов
/ 27 марта 2012

Это совсем не то, для чего htmlentities. Используйте htmlentites для кодирования выходных данных перед их отправкой в ​​браузер. Это не имеет никакого отношения к дезинфекции. Единственное, о чем вам следует беспокоиться, когда обработка ввода правильно экранирует данные, интерполированные в запросы SQL, для предотвращения внедрения SQL. Подробнее см. Объекты данных PHP .

strip_tags является спорным полезным, но вы не должны использовать оба strip_tags и htmlentities. Вся цель htmlentites состоит в том, что он предотвращает интерпретацию тегов. Единственный правильный способ думать об этом: сохранить содержимое, введенное пользователем, и сделать его безопасным. Не удаляйте их теги, просто кодируйте их, чтобы они выглядели так, как они были напечатаны. В противном случае вы можете удалить такие вещи, как теги <sarcasm> и <rant>. Целью пользователя было не вводить HTML.

«Команды Linux» не имеют ничего общего с HTML. Невозможно выполнить произвольные команды Linux с помощью внедрения HTML / скрипта.

Я имею в виду что-то вроде "; ls -la"

Если вы на самом деле берете вводимые пользователем данные и выполняете их через system или что-то в этом духе, у вас уже есть проблемы. Это ужасная идея, и вы не должны это делать.

4 голосов
/ 27 марта 2012

Вы всегда должны выбрать правильный инструмент для работы. Это сказанное $re = htmlentities(strip_tags($_GET['re']), ENT_COMPAT, "UTF-8"); никогда не должно использоваться ни для чего. Команда избыточна, что означает, что вы не понимаете, что она делает. Это не очень хорошо предотвращает xss, потому что xss - проблема вывода .

Для очистки аргументов оболочки вы должны использовать escpaeshellarg () . Для XSS вы должны использовать: htmlspecialchars($_GET['re'], ENT_QUOTES, "UTF-8");. Однако это не останавливает все XSS и ничего не делает для остановки SQL-инъекций.

Использовать параметризованные запросы для sql.

И все это просто царапает поверхность, читайте OWASP top 10 .

0 голосов
/ 27 марта 2012

это то, как я фильтрую свои данные перед тем, как вставить их в свою базу данных

 <?php
      function sanitize($data){
          $result = trim($data);
          $result = htmlspecialchars($data);
          $result = mysql_real_escape_string($data);
          return $result;
      }
 ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...