Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: SQL-инъекции

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Haos616
Отправлено: 01 Октября, 2010 - 23:03:02
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Есть путь типа site.ru/blogs/name_page
Вопрос каким способом исключить иньекции меня интересует 100% способ и быстрый.
У меня два варианта.
1. Регулярные выражения
2. Хранить хеш названия. И вести поиск по хешам названий.
 
 Top
Uchkuma
Отправлено: 01 Октября, 2010 - 23:08:38
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




И как в этот путь вставить sql-инъекцию?
 
 Top
Haos616
Отправлено: 01 Октября, 2010 - 23:14:09
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Такой адрес через htaccess перенаправляется и обрабатывается и после передается на модуль а тот пытается найти страницу в базах данных
 
 Top
Uchkuma
Отправлено: 01 Октября, 2010 - 23:20:31
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Кажется, вы просто не понимаете, что такое sql-инъекция. Проверяйте входные параметры get и post-запросов и приводите к нужному типу. intval для чисел и mysql_real_escape_string для строк.
 
 Top
Haos616
Отправлено: 01 Октября, 2010 - 23:58:22
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




sql-инъекции я понимаю.
mysql_real_escape_string не полностью подойдет.
Например
есть пареманная $page_name
есть запрос типа SELECT * FROM `pages` WHERE `page_name`=$page_name;
как лучше по скорости сделать.
preg_match - проверять подходит мне ли название.
или
сделать так $md5_page = md5($page_name)
а в базе данных хранить хеш
SELECT * FROM `pages` WHERE `md5_page`=$md5_page;
мне очень интересно именно скорость выполнения хеширования и проверка регулярных выражений
 
 Top
Мелкий Супермодератор
Отправлено: 02 Октября, 2010 - 00:12:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Haos616 пишет:
mysql_real_escape_string не полностью подойдет.

Почему? Она именно для этого и предназначена и инъекция не сработает. И работать скорей всего будет быстрее всех.

Haos616 пишет:
мне очень интересно именно скорость выполнения хеширования и проверка регулярных выражений

зациклите все 3 варианта итераций этак на 10^5 и померьте microtime
а регулярка проиграет str_replace


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 02 Октября, 2010 - 01:34:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Haos616 пишет:
Sql-инъекции я понимаю.
mysql_real_escape_string не полностью подойдет
Возможность проведения SQL-инъекции может предоставляться только в тех случаях - когда для исходной строковой констаны формирующей основной шаблон происходит неправильное трактования уровня интерполируемых информационных полей - для обеспечения этого необходимо производить покомпонентное шифрование и использовать сверху кодовых таблмц Кроме того если вы осуществляете предварительную проверку поступающей информации с помощью регулярного выражения - то для увеличения безопасности желательно обеспечить его разрешительный характер - в таком случае если представления поступающих данных во внутренней кодировки будет допустимо то оно по своей сути будет явлвться набором разрененных символов - благодаря чему никакие запрещенные элементы не передаются через фильтр - однако необходимо огранизовывать дополнительное соответствие кодовых таблиц сервера приложений и соединения с СУБД


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Uchkuma
Отправлено: 02 Октября, 2010 - 10:57:33
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Haos616 пишет:
mysql_real_escape_string не полностью подойдет.
Например
есть пареманная $page_name
есть запрос типа SELECT * FROM `pages` WHERE `page_name`=$page_name;
И в чем же тут пример?
 
 Top
Haos616
Отправлено: 03 Октября, 2010 - 00:08:50
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




htaccess файл переадресует все запросы (кроме на файлы) на index.php в корне.
После создает допустим переменную $page_name и другие которые возьмет с запроса.
Типо с $_SERVER['QUERY_STRING'].
Так как запрос делает пользователь то от туда может быть sql инъекция.
Вот и проблема с помощью чего сделать быструю обработку исключения инъекций.
Мне кажется что хеш это самое быстрое решения хоть и требует дополнительное место в базе данных. В крайнем случае я так думаю. Позже буду проводить эксперимент. Интересно узнать ваше мнение.
 
 Top
Мелкий Супермодератор
Отправлено: 03 Октября, 2010 - 00:14:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




PHP:
скопировать код в буфер обмена
  1. mysql_query("SELECT * FROM `pages` WHERE `page_name`='".mysql_real_escape_string($page_name)."'");


если найдёте сработавшую SQL-инъекцию, пишите баг-репорт, вы быстро станете известны на весь мир среди специалистов по безопасности и хакеров.

(Отредактировано автором: 03 Октября, 2010 - 00:14:51)



-----
PostgreSQL DBA
 
 Top
Haos616
Отправлено: 03 Октября, 2010 - 00:24:09
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




mysql_real_escape_string подходит только я в ней как то не уверен.
+ вернее всего лучше сделать еще проверку до запроса к базе данных чтобы исключить лишний запрос.
mysql_real_escape_string что то вообще о нем сразу не вспомнил. Звиняюсь и сразу про нее не так подумал. Как говорится тупанул так тупанул.
Прочитал пост http://forum.php.su/topic.php?fo...1&topic=1701 понравился вслед буду передерживаться . Извиняюсь за отнятое время.

(Отредактировано автором: 03 Октября, 2010 - 00:44:14)

 
 Top
JustUserR
Отправлено: 03 Октября, 2010 - 01:00:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Haos616 пишет:
Так как запрос делает пользователь то от туда может быть sql инъекция.
После совершения пользователем отправки запроса к вашему web-сайту и получения в обрабатывающем приложении информационных параметров - производится их сохранеие в отдельном уровне представления в силу чего они не могут никаким образом влять отрицательно на безопасность программы Искомый вопрос появляется в том случае когда значения полученных информационных полей используются в генерируемом коде - который в дальнейшем представляется в исполняемом виде - тем не менее при определении фактора кодирования для генерируемого кода возможно с абсолютной точностью произвести зашиту системы от любых пользовательских данных


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ytrewq123
Отправлено: 22 Ноября, 2014 - 11:19:14
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Здравствуйте!
У меня вот какой вопрос.
От инъекций обрабатывать я должен переменную каторой уже это значение присвоено или до присвоения.

$peremennaja=$_POST['pole'];
$peremennaja = trim($peremennaja);
$peremennaja = mysql_real_escape_string($peremennaja);
$peremennaja = htmlspecialchars($peremennaja);

ИЛИ

$peremennaja=trim ($_POST['pole'];
$peremennaja= mysql_real_escape_string($_POST['pole'];
$peremennaja= htmlspecialchars($_POST['pole'];


Или может как то ещё иначе???
 
 Top
OrmaJever Модератор
Отправлено: 22 Ноября, 2014 - 11:23:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




ytrewq123 мне кажется вы опоздали на 4 года, сейчас есть mysqli/pdo и prepare statment
Тема закрыта!


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB