|
|
|
| Здравствуйте.
Прочитал статью http://www.kamaikin.ru/artical/protected/2/9/
в конце приводится полный код класса, но у меня на строке
static public post_decode(){
|
выдает ошибку:
Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE in........
Как исправить?
С классами до сегодняшнего дня не работал, прошу сильно не ругать. | |
|
|
|
|
|
|
|
для: andMegaM
(23.01.2009 в 13:32)
| |
<?php final class protection {
static public $_get;
static public $_post
static public post_decode(){ }
static public get_decode(){ } }?>
|
если это из этого куска. то там пропущена точка с запятой ПЕРЕД строкой static public post_decode(){ | |
|
|
|
|
|
|
|
для: elenaki
(23.01.2009 в 13:36)
| | точка с запятой у меня стоит | |
|
|
|
|
|
|
|
для: andMegaM
(23.01.2009 в 13:32)
| | Ругать надо не Вас, а тех, кто эту ересь пишет. Выкиньте сейчас же эту гадость и забудьте как страшный сон. | |
|
|
|
|
|
|
|
для: Николай2357
(23.01.2009 в 13:36)
| | А почему это ересь и почему нужно забыть как страшный сон? | |
|
|
|
|
|
|
|
для: andMegaM
(23.01.2009 в 13:32)
| | public static function post_decode(){ | |
|
|
|
|
|
|
|
для: Temnovit
(23.01.2009 в 14:19)
| | Одной ошибки уже нет. Спасибо. Но вот появилась другая, в строке
static public get_decode()
|
Parse error: syntax error, unexpected T_PUBLIC, expecting T_VARIABLE in .....
Заменил эту строку на
public static function get_decode()
|
На этой строке выходит ошибка :
Parse error: syntax error, unexpected T_PUBLIC in ..... | |
|
|
|
|
|
|
|
для: 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;
}
}
| Это применительно к строковым переменным. | |
|
|
|
|
|
|
|
для: Николай2357
(23.01.2009 в 14:43)
| | А в чем фишка?
Сначала удаляете слэши, а потом добавляете. | |
|
|
|
|
|
|
|
для: а-я
(23.01.2009 в 17:17)
| | Ну фишка к примеру в том, что слэши удаляются только когда включены магические кавычки. Это для того, чтоб не суетиться при переносе на другой хостинг. | |
|
|
|
|
|
|
|
для: Николай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);
}
?>
|
В любой момент можно добавить или убрать, что-то в защите.. Но вроде этого вполне достаточно. | |
|
|
|
|
|
|
|
для: а-я
(24.01.2009 в 18:22)
| | Ну и в чём отличие? Я просто предложил вариант, который обрабатывает так же массивы, коли в том есть нужда. Я же не предлагал обработать всё и сразу, даже пример использования ниже написал. Другой вопрос, что я не уточнил, что обрабатывать нужно не суперглобальный массив, а каждый элемент массива по отдельности, по мере возникновения потребности. Посчитав это очевидным. Признаю свою ошибку второй раз, буду писать доходчивей, а то у многих действительно складывается впечатление, что я открываю Америку, не зная сторон света. Вот:
ДАННОЙ ФУНКЦИЕЙ НУЖНО ОБРАБАТЫВАТЬ ЛИТЕРАЛЬНЫЕ КОНСТАНТЫ (СТРОКОВЫЕ ПЕРЕМЕННЫЕ), ПОСТУПИВШИЕ ИЗ СУПЕРГЛОБАЛЬНЫХ МАССИВОВ $_GET, $_POST, $_COOKIE И $_REQUEST ДЛЯ ИСПОЛЬЗОВАНИЯ ЭТИХ ПЕРЕМЕННЫХ В SQL ЗАПРОСАХ.
PS А что мешает сделать вместо этого
<?
function XSS($A){// Защита от XSS-инъекций
return htmlspecialchars($A);
}
| просто
Зачем еще одна функция? | |
|
|
|
|
|
|
|
для: Николай2357
(23.01.2009 в 14:43)
| | Ваш код ничуть не лучше.
>Это применительно к строковым переменным.
Ага. Как же. | |
|
|
|
|
|
|
|
для: Trianon
(23.01.2009 в 17:39)
| | Так уж и ничуть? Что тут не так, я вроде бы учитывал именно Ваши требования к обработке строковых значений. Потрудитесь пояснить. | |
|
|
|
|
|
|
|
для: Николай2357
(23.01.2009 в 19:20)
| | Вы смешали в кучу два совершенно независимых процесса.
а) получение данных из суперглобальных массивов $_GET, $_POST, $_COOKIE, $_REQUEST и исправление их после работы механизма магических кавычек
б) формирование литеральных констант в тексте SQL-запроса.
Если (а) нужно не для (б) , если для (б) нужны данные вовсе не из (а) , если (б) потребуется выполнить несколько раз, предложенная Вами в качестве универсального средства функция только испортит данные.
Ничуть.
Потому что фразой "Вот функция, которой можно действительно безопасно обработать" Вы предлагаете панацею.
Панацеи нет. Нет её. Нужно лишь думать, и правильно писать программу. | |
|
|
|
|
|
|
|
для: 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 в 20:20)
| | >Где в моём коде, нет даже всем посте, есть хоть одно слово $_GET, $_POST, $_COOKIE, $_REQUEST
Если Ваш код не относится к $_GET, $_POST, $_COOKIE, $_REQUEST, тогда это полный бред. Складывается впечатление что вы не представляете себе назначение функций которыми пользуетесь. Ну про то что мануал Вы не читали я молчу - это очевидно. | |
|
|
|