Наш сайт использует PHP версии 5.2.14
В последнее время наш хостер, возможно, изменил защиту от магии, и я придумал предлагаемое решение [code ниже]
// Code: function fHandleQuotes($s) { if (get_magic_quotes_gpc()) return ($s); return (addslashes($s)); } . . . // Usage: . . . $query = "UPDATE myTable SET myField = '" . fHandleQuotes($_POST['fieldName']) . "'"; . . .
В PHP 6 magic_quotes будут удалены!
Теперь вы можете использовать эту функцию.
if( ( function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc() ) || ini_get('magic_quotes_sybase') ){ foreach($_GET as $k => $v) $_GET[$k] = stripslashes($v); foreach($_POST as $k => $v) $_POST[$k] = stripslashes($v); foreach($_COOKIE as $k => $v) $_COOKIE[$k] = stripslashes($v); }
Прочтите это и почему вы не должны использовать магические цитаты:
http://php.net/manual/en/security.magicquotes.disabling.php
Используйте один из примеров на этой странице и замените stripslashes
. Но да, ваше решение, вероятно, работает. Хотя было бы быстрее и менее навязчиво использовать $_GET = array_map("addslashes", $_GET);
один раз при запуске. Еще лучше было бы использовать mysql_real_escape_string
вместо mysql_real_escape_string
. (Но для этого необходимо установить соединение с базой данных.)
Также я хотел бы сообщить вам следующее: http://sourceforge.net/p/php7framework/wiki/input/ – потому что он позволяет вам постепенно переписывать приложение для использования $_GET->q["fieldName"]
для ( не очень безопасные) магические поля с котировками или просто $_POST->sql["fieldName"]
для (более защищенных) закодированных полей.
Вы можете даже использовать $_REQUEST->sql->always()
чтобы включить фильтр по умолчанию для всех обычных $_REQUEST["fieldName"]
обращений. Хотя это может быть излишним для некоторых приложений.