Вверх ↑
Этот топик читают: Гость
Ответов: 327
Рейтинг: 5
#1: 2014-04-18 17:40:42 ЛС | профиль | цитата
вот GET запрос : ?a='2','2','prist','#lich-prist','all_group_lich' если его изменить на ?a='2','2','prist','lich-prist','all_group_lich' то есть убрать #, то проблема исчезает. Вот php код :
#php

$b= $_GET['b'];
mysql_query("INSERT INTO `menu` (`id`,`parent_id`,`title`,`href`,`cat`) VALUES (".$b.")");

карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 4621
Рейтинг: 746
#2: 2014-04-18 18:07:03 ЛС | профиль | цитата
А при вводе запроса в браузере символ "#" экранировал? Типа такого: '%23lich-prist'
карма: 26

0
Ответов: 498
Рейтинг: 39
#3: 2014-04-18 18:39:45 ЛС | профиль | цитата
knoot0279, всегда нужно экранировать получены данные перед запросом в базу. mysql_real_escape_string()
------------ Дoбавленo в 18.39:
В таком виде это дыра в безопасности, можно что угодно сделать с базой, а с неверными настройками и правами ещё и с сервером.
карма: 0

0
Ответов: 327
Рейтинг: 5
#4: 2014-04-19 18:53:30 ЛС | профиль | цитата
Muz-Tv писал(а):
можно что угодно сделать с базой

Каким образом?
------------ Дoбавленo в 18.53:
И еще...
Есть список разрешенных ip адресов, только если отправлять запросы с этих ip, то можно продолжить выполнение скрипта.
Насколько это надежно?
IP беру из $_SERVER['REMOTE_ADDR']
карма: 0

0
Ответов: 498
Рейтинг: 39
#5: 2014-04-19 21:55:14 ЛС | профиль | цитата
knoot0279, sql injection.
карма: 0

0
Ответов: 327
Рейтинг: 5
#6: 2014-04-20 12:53:58 ЛС | профиль | цитата
О какой инъекции идет речь, если единственный непостоянный параметр здесь это "$b".
Можно подменить "INSERT"? `menu`?
И как можно подменить переменную $b таким образом, чтобы получить доступ, например, к списку пользователей с логинами и паролями?
карма: 0

0
Ответов: 498
Рейтинг: 39
#7: 2014-04-20 13:56:55 ЛС | профиль | цитата
knoot0279, "подменить" можно, смотри union.
карма: 0

0
Разработчик
Ответов: 4697
Рейтинг: 426
#8: 2014-04-21 00:01:17 ЛС | профиль | цитата
knoot0279, вот так можно почистить всю базу:
www.site.net/page.php?b=0,0,',',0); DELETE FROM users WHERE 1 = (1
Только перевести это надо в URL (проэкранировать пробелы и другие символы).
карма: 10
0
Ответов: 327
Рейтинг: 5
#9: 2014-04-21 00:53:15 ЛС | профиль | цитата
Assasin писал(а):

Хватит мне и так уже страшно...
mysql_query('SELECT * FROM `main`') - надеюсь это безопасно? здесь ничего исправлять не нужно?
------------ Дoбавленo в 00.53:
И еще... насколько безопасными становятся все действия после проверки ip(идет проверка на мой статический адрес
if($_SERVER['REMOTE_ADDR'] != 'мой ip') {exit('Access denied');}, конечно проверку применяю только на страницах, где доступ должен получить только я)



Вот это у меня получилось следуя совету Muz-Tv, теперь можно считать запрос безопасным?
#php

$name = $_GET['n'];
$query = sprintf("SELECT tt FROM main WHERE href='%s'",mysql_real_escape_string($name));
$title = mysql_fetch_assoc(mysql_query($query));




карма: 0

0
Ответов: 498
Рейтинг: 39
#10: 2014-04-21 10:43:13 ЛС | профиль | цитата
knoot0279 писал(а):
насколько безопасными становятся все действия после проверки ip(идет проверка на мой статический адрес
if($_SERVER['REMOTE_ADDR'] != 'мой ip') {exit('Access denied');},

REMOTE_ADDR нельзя подменить.
knoot0279 писал(а):
теперь можно считать запрос безопасным?

Да.
карма: 0

0
Ответов: 327
Рейтинг: 5
#11: 2014-04-22 00:58:02 ЛС | профиль | цитата
спасибо
------------ Дoбавленo в 00.58:
Я правильно понимаю что беспокоиться стоит только при GET и POST запросах?
Ну, например есть переменная $date = date('Y')...
Вот запрос : SELECT title FROM posts WHERE date='$date'
Так тоже будет безопасно или же есть риск?
карма: 0

0
Ответов: 5446
Рейтинг: 323
#12: 2014-04-22 13:40:27 ЛС | профиль | цитата
knoot0279, любые данные, приходящие от пользователя, надо фильтровать. Данные, к которым пользователь не имел доступа - не надо.
карма: 1

0
Ответов: 327
Рейтинг: 5
#13: 2014-04-22 14:35:50 ЛС | профиль | цитата
спасибо
карма: 0

0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)