Я использую следующую функцию для защиты моего 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);
..
Не избегайте ваших переменных, избегайте их только в то время, когда вам нужно их избежать.
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.