Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Защита сайта от взлома
 
 автор: andMegaM   (23.01.2009 в 13:32)   письмо автору
 
 

Здравствуйте.
Прочитал статью http://www.kamaikin.ru/artical/protected/2/9/
в конце приводится полный код класса, но у меня на строке

static public post_decode(){


выдает ошибку:

Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE in........

Как исправить?
С классами до сегодняшнего дня не работал, прошу сильно не ругать.

  Ответить  
 
 автор: elenaki   (23.01.2009 в 13:36)   письмо автору
 
   для: 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(){

  Ответить  
 
 автор: andMegaM   (23.01.2009 в 14:00)   письмо автору
 
   для: elenaki   (23.01.2009 в 13:36)
 

точка с запятой у меня стоит

  Ответить  
 
 автор: Николай2357   (23.01.2009 в 13:36)   письмо автору
 
   для: andMegaM   (23.01.2009 в 13:32)
 

Ругать надо не Вас, а тех, кто эту ересь пишет. Выкиньте сейчас же эту гадость и забудьте как страшный сон.

  Ответить  
 
 автор: andMegaM   (23.01.2009 в 14:04)   письмо автору
 
   для: Николай2357   (23.01.2009 в 13:36)
 

А почему это ересь и почему нужно забыть как страшный сон?

  Ответить  
 
 автор: Temnovit   (23.01.2009 в 14:19)   письмо автору
 
   для: andMegaM   (23.01.2009 в 13:32)
 

public static function post_decode(){

  Ответить  
 
 автор: andMegaM   (23.01.2009 в 14:32)   письмо автору
 
   для: 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 .....

  Ответить  
 
 автор: Николай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;   
    }   
}
Это применительно к строковым переменным.

  Ответить  
 
 автор: а-я   (23.01.2009 в 17:17)   письмо автору
 
   для: Николай2357   (23.01.2009 в 14:43)
 

А в чем фишка?
Сначала удаляете слэши, а потом добавляете.

  Ответить  
 
 автор: Николай2357   (23.01.2009 в 19:16)   письмо автору
 
   для: а-я   (23.01.2009 в 17:17)
 

Ну фишка к примеру в том, что слэши удаляются только когда включены магические кавычки. Это для того, чтоб не суетиться при переносе на другой хостинг.

  Ответить  
 
 автор: а-я   (24.01.2009 в 18:22)   письмо автору
 
   для: Николай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   (24.01.2009 в 18:32)   письмо автору
 
   для: а-я   (24.01.2009 в 18:22)
 

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

ДАННОЙ ФУНКЦИЕЙ НУЖНО ОБРАБАТЫВАТЬ ЛИТЕРАЛЬНЫЕ КОНСТАНТЫ (СТРОКОВЫЕ ПЕРЕМЕННЫЕ), ПОСТУПИВШИЕ ИЗ СУПЕРГЛОБАЛЬНЫХ МАССИВОВ $_GET, $_POST, $_COOKIE И $_REQUEST ДЛЯ ИСПОЛЬЗОВАНИЯ ЭТИХ ПЕРЕМЕННЫХ В SQL ЗАПРОСАХ.

PS А что мешает сделать вместо этого
<?
function XSS($A){// Защита от XSS-инъекций 
  
return htmlspecialchars($A); 
  }
просто
<?
htmlspecialchars
($A); 
Зачем еще одна функция?

  Ответить  
 
 автор: Trianon   (23.01.2009 в 17:39)   письмо автору
 
   для: Николай2357   (23.01.2009 в 14:43)
 

Ваш код ничуть не лучше.

>Это применительно к строковым переменным.
Ага. Как же.

  Ответить  
 
 автор: Николай2357   (23.01.2009 в 19:20)   письмо автору
 
   для: Trianon   (23.01.2009 в 17:39)
 

Так уж и ничуть? Что тут не так, я вроде бы учитывал именно Ваши требования к обработке строковых значений. Потрудитесь пояснить.

  Ответить  
 
 автор: Trianon   (23.01.2009 в 19:57)   письмо автору
 
   для: Николай2357   (23.01.2009 в 19:20)
 

Вы смешали в кучу два совершенно независимых процесса.
а) получение данных из суперглобальных массивов $_GET, $_POST, $_COOKIE, $_REQUEST и исправление их после работы механизма магических кавычек
б) формирование литеральных констант в тексте SQL-запроса.

Если (а) нужно не для (б) , если для (б) нужны данные вовсе не из (а) , если (б) потребуется выполнить несколько раз, предложенная Вами в качестве универсального средства функция только испортит данные.

Ничуть.
Потому что фразой "Вот функция, которой можно действительно безопасно обработать" Вы предлагаете панацею.
Панацеи нет. Нет её. Нужно лишь думать, и правильно писать программу.

  Ответить  
 
 автор: Николай2357   (23.01.2009 в 20:20)   письмо автору
 
   для: 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'])).")");
Хотя наверное действительно нужно писать более развернуто, не для всех это очевидно.

  Ответить  
 
 автор: Loki   (24.01.2009 в 18:03)   письмо автору
 
   для: Николай2357   (23.01.2009 в 20:20)
 

>Где в моём коде, нет даже всем посте, есть хоть одно слово $_GET, $_POST, $_COOKIE, $_REQUEST
Если Ваш код не относится к $_GET, $_POST, $_COOKIE, $_REQUEST, тогда это полный бред. Складывается впечатление что вы не представляете себе назначение функций которыми пользуетесь. Ну про то что мануал Вы не читали я молчу - это очевидно.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования