|
|
|
|
|
для: а-я
(24.01.2009 в 18:22)
| | Ну и в чём отличие? Я просто предложил вариант, который обрабатывает так же массивы, коли в том есть нужда. Я же не предлагал обработать всё и сразу, даже пример использования ниже написал. Другой вопрос, что я не уточнил, что обрабатывать нужно не суперглобальный массив, а каждый элемент массива по отдельности, по мере возникновения потребности. Посчитав это очевидным. Признаю свою ошибку второй раз, буду писать доходчивей, а то у многих действительно складывается впечатление, что я открываю Америку, не зная сторон света. Вот:
ДАННОЙ ФУНКЦИЕЙ НУЖНО ОБРАБАТЫВАТЬ ЛИТЕРАЛЬНЫЕ КОНСТАНТЫ (СТРОКОВЫЕ ПЕРЕМЕННЫЕ), ПОСТУПИВШИЕ ИЗ СУПЕРГЛОБАЛЬНЫХ МАССИВОВ $_GET, $_POST, $_COOKIE И $_REQUEST ДЛЯ ИСПОЛЬЗОВАНИЯ ЭТИХ ПЕРЕМЕННЫХ В SQL ЗАПРОСАХ.
PS А что мешает сделать вместо этого
<?
function XSS($A){// Защита от XSS-инъекций
return htmlspecialchars($A);
}
| просто
Зачем еще одна функция? | |
|
|
|
|
|
|
|
для: Николай2357
(23.01.2009 в 19:16)
| | Ну не знаю… я использую 2 функции..
И только там где надо.
SQL() в запросах
XSS() в разметке
Как раз таки обрабатываю каждую переменную отдельно.
<?
function SQL($A){// Защита от SQL-инъекций
return get_magic_quotes_gpc() ? $A : mysql_escape_string($A);
}
function XSS($A){// Защита от XSS-инъекций
return htmlspecialchars($A);
}
?>
|
В любой момент можно добавить или убрать, что-то в защите.. Но вроде этого вполне достаточно. | |
|
|
|
|
|
|
|
для: Николай2357
(23.01.2009 в 20:20)
| | >Где в моём коде, нет даже всем посте, есть хоть одно слово $_GET, $_POST, $_COOKIE, $_REQUEST
Если Ваш код не относится к $_GET, $_POST, $_COOKIE, $_REQUEST, тогда это полный бред. Складывается впечатление что вы не представляете себе назначение функций которыми пользуетесь. Ну про то что мануал Вы не читали я молчу - это очевидно. | |
|
|
|
|
|
|
|
для: Trianon
(23.01.2009 в 19:57)
| | Одну секундочку. Где в моём коде, нет даже всем посте, есть хоть одно слово $_GET, $_POST, $_COOKIE, $_REQUEST? И где слово панацея?
>Потому что фразой "Вот функция, которой можно действительно безопасно обработать"
Вот это выдернуто из контекста, я совсем не то имел ввиду. Если дополнить до исходного варианта
переменные перед занесением в бд .
То без труда можно понять, что я имел ввиду варианты плана
<?
$res = "SELECT * FROM table WHERE `text`='".get_decode($_POST['text'])."'";
$res = "SELECT * FROM table WHERE `text` IN (".implode(", ", get_decode($_POST['text'])).")");
| Хотя наверное действительно нужно писать более развернуто, не для всех это очевидно. | |
|
|
|
|
|
|
|
для: Николай2357
(23.01.2009 в 19:20)
| | Вы смешали в кучу два совершенно независимых процесса.
а) получение данных из суперглобальных массивов $_GET, $_POST, $_COOKIE, $_REQUEST и исправление их после работы механизма магических кавычек
б) формирование литеральных констант в тексте SQL-запроса.
Если (а) нужно не для (б) , если для (б) нужны данные вовсе не из (а) , если (б) потребуется выполнить несколько раз, предложенная Вами в качестве универсального средства функция только испортит данные.
Ничуть.
Потому что фразой "Вот функция, которой можно действительно безопасно обработать" Вы предлагаете панацею.
Панацеи нет. Нет её. Нужно лишь думать, и правильно писать программу. | |
|
|
|
|
|
|
|
для: Trianon
(23.01.2009 в 17:39)
| | Так уж и ничуть? Что тут не так, я вроде бы учитывал именно Ваши требования к обработке строковых значений. Потрудитесь пояснить. | |
|
|
|
|
|
|
|
для: а-я
(23.01.2009 в 17:17)
| | Ну фишка к примеру в том, что слэши удаляются только когда включены магические кавычки. Это для того, чтоб не суетиться при переносе на другой хостинг. | |
|
|
|
|
|
|
|
для: Николай2357
(23.01.2009 в 14:43)
| | Ваш код ничуть не лучше.
>Это применительно к строковым переменным.
Ага. Как же. | |
|
|
|
|
|
|
|
для: Николай2357
(23.01.2009 в 14:43)
| | А в чем фишка?
Сначала удаляете слэши, а потом добавляете. | |
|
|
|
|
|
|
|
для: andMegaM
(23.01.2009 в 14:32)
| | Вот Вы не слушаете меня, запустите зтот класс и огребёте кучу проблем. Вот функция, которой можно действительно безопасно обработать переменные перед занесением в бд . Буде они массивом или нет. Если добавить рекурсию, можно обработать многомерные массивы.
<?
function get_decode($data)
{
if(is_array($data))
{
if(get_magic_quotes_gpc())
$data = array_map("stripslashes", $data);
$data = array_map("mysql_escape_string", $data);
return $data;
}
else
{
if(get_magic_quotes_gpc())
$data = stripslashes($data);
$data = mysql_escape_string($data);
return $data;
}
}
| Это применительно к строковым переменным. | |
|
|
|
|