PHP, возвращающий входные переменные

Я использую следующую функцию для защиты моего db от инъекционных атак и т. Д. Для получения.

 function filter($data) { global $db; $data = trim(htmlentities(strip_tags($data))); if (get_magic_quotes_gpc()) $data = stripslashes($data); $data = $db->real_escape_string($data); return $data; } foreach($_GET as $key => $value) { $data[$key] = filter($value); } 

Вопрос в том, что я хочу фильтровать не только $_GET но и $_POST . Как это сделать?

И можно ли переопределить значение $_GET или $_POST после фильтрации? Я имею в виду $_GET[$key] = filter($value); вместо $data[$key] = filter($value); ..

Не избегайте ваших переменных, избегайте их только в то время, когда вам нужно их избежать.

  • Если вы преждевременно избегаете своей переменной, вы никогда не узнаете, какая переменная экранирована, а какая нет.
  • Перед выполнением строковых манипуляций вам придется отключать переменные, а после
  • Переменные, поступающие из разных источников (например, из API, из файла или даже из вашей базы данных), не будут экранированы. Вы забудете их избежать.
  • Вам придется отказаться от всех переменных перед их печатью (вы не хотите печатать «, я думаю)
  • Вы не можете избежать переменной для каждой возможной ситуации. Как насчет того, чтобы ускользнуть от них с помощью escapeshellcmd?

PHP сделал это в прошлом. Он назывался magic_quotes_gpc .

Но это настолько плохая практика, что теперь она устарела, и она будет удалена из следующей версии PHP.

Лучше просто избегать всего в то время, когда вам нужно. Вы печатаете переменную? избегайте этого. Вам не нужно помнить, если это уже ускользнуло или нет: это не так.

эта функция не имеет смысла.
и он ничего не фильтрует.
и его нельзя использовать таким образом.

чтобы защитить ваш дБ от инъекций, вы не должны делать большую часть вещей, присутствующих в этой функции, и должны делать много вещей, которые там не присутствуют.

для защиты только строк (блоков данных, заключенных в кавычки) от атак на атаку вам нужно использовать $ db-> real_escape_string и ничего больше.
для защиты других частей запроса вам нужно использовать другие процедуры, поскольку real_escape_string становится для них совершенно бесполезным

для защиты вашего приложения от «и т. д.» вы должны сначала определить, что это такое и т. д.

 array_walk($_GET,'filter'); array_walk($_POST,'filter'); array_walk($_COOKIE,'filter'); 

Вероятно, вы должны также фильтровать ключ $, если вы используете его в запросе позже, но если это возможно, вы должны использовать подготовленные инструкции mysql и связывать переменные.

http://www.ultramegatech.com/blog/2009/07/using-mysql-prepared-statements-in-php/

Вы можете изменить $ _GET и $ _POST.