Есть простенький скрипт. В зависимости от какого-то параметра, он подгружает разную инфу из MySQL.
Код страницы:
Код
<a href="index.php?id=1001">
<a href="index.php?id=1002">
<a href="index.php?id=1003">
<a href="index.php?id=1002">
<a href="index.php?id=1003">
Код скрипта:
Код
$data=mysql_query("select * from base WHERE id='$_GET[id]' ORDER BY org_name ASC");
Как видно инъекция неизбежна.
Можно ли защититься, следующим способом?
Код страницы:
Код
<a href="index.php?id=1">
<a href="index.php?id=2">
<a href="index.php?id=3">
<a href="index.php?id=2">
<a href="index.php?id=3">
Код скрипта:
Код
if($_GET['id']==1){$id=1001;
}elseif($_GET['id']==2){$id=1002;
}elseif($_GET['id']==3){$id=1003;
}else{exit;
}
$data=mysql_query("select * from base WHERE id='$id' ORDER BY org_name ASC");
}elseif($_GET['id']==2){$id=1002;
}elseif($_GET['id']==3){$id=1003;
}else{exit;
}
$data=mysql_query("select * from base WHERE id='$id' ORDER BY org_name ASC");
Альтернатива с массивами:
Код
$b = Array("1001","1002","1003");
$id=$_GET['id'];
$data=mysql_query("select * from base WHERE id='$b[$id]' ORDER BY org_name ASC");
$id=$_GET['id'];
$data=mysql_query("select * from base WHERE id='$b[$id]' ORDER BY org_name ASC");
Спасибо.
Спустя 1 час, 4 минуты, 53 секунды (25.10.2008 - 12:59) linedmk написал(а):
а не проще ли использовать функцию is_numeric($_GET["id"]) ?
Спустя 8 часов, 55 минут, 28 секунд (25.10.2008 - 21:54) str_replace написал(а):
добавлю к ответу linedmk:
if (!array_key_exists ('id', $_GET)
|| !is_numeric ($_GET['id']))
die ('ID is invalid or not defined');
if (!array_key_exists ('id', $_GET)
|| !is_numeric ($_GET['id']))
die ('ID is invalid or not defined');
Спустя 11 часов (26.10.2008 - 09:54) ApuktaChehov написал(а):
Поясните пожалуйста.
Я, конечно, интуитивно догадываюсь, но все же, хотелось бы уточнить.
Я, конечно, интуитивно догадываюсь, но все же, хотелось бы уточнить.
![acute.gif](html/emoticons/acute.gif)
Спустя 8 минут, 2 секунды (26.10.2008 - 10:02) Sephiroth_Lukaw написал(а):
Цитата(ApuktaChehov @ 26.10.2008, 6:54) [snapback]52886[/snapback]
Я, конечно, интуитивно догадываюсь...
А что тут не понятного? Проверяем, есть ли id в массиве $_GET и является ли оно числом. Если нет, то завершаем работу скрипта и выводим сообщение "ID is invalid or not defined"
Спустя 8 часов, 3 минуты, 59 секунд (26.10.2008 - 18:06) Krist_ALL написал(а):
Код
if (!array_key_exists ('id', $_GET)
оригинальна!
можно вот так еще.
Код
if(is_numeric($_GET['id']) || str_lenght($_GET['id']) <7) {
......... }
else {
echo 'иди нах';
}
......... }
else {
echo 'иди нах';
}
Спустя 18 минут, 49 секунд (26.10.2008 - 18:25) Sephiroth_Lukaw написал(а):
Цитата(Krist_ALL @ 26.10.2008, 15:06) [snapback]52914[/snapback]
if(is_numeric($_GET['id']) || str_lenght($_GET['id']) <7) {
Может вы strlen имели в виду?) И тут скорее && больше подойдёт чем || (-
Спустя 5 минут, 14 секунд (26.10.2008 - 18:30) Krist_ALL написал(а):
да. я ошибся. и действительна подойдет && . чет я глуканул
Спустя 2 часа, 11 минут, 41 секунда (26.10.2008 - 20:42) ApuktaChehov написал(а):
Т.е. если в строке адреса ввести
переменная id не попадет в массив $_GET?
Я пробовал, вроде попадает.
К примеру, я не хочу, что бы пользователь мог увидеть данные с id=1003.
Ссылки с такой переменной на странице нет.
Если он введет "index.php?id=1003", то id станет $_GET['id']=1003.
И как следствие будет существовать и будет числом.
Тогда не вижу смысла проверять, существует ли она и является ли числом.
Или я что то не понимаю, или чего то не знаю.
Ребята, не судите строго, я совсем недавно начал изучать PHP, а мне на плечи уже свалилось серьезное приложение.![angry.gif](html/emoticons/angry.gif)
Код
index.php?id=1001
переменная id не попадет в массив $_GET?
Я пробовал, вроде попадает.
К примеру, я не хочу, что бы пользователь мог увидеть данные с id=1003.
Ссылки с такой переменной на странице нет.
Если он введет "index.php?id=1003", то id станет $_GET['id']=1003.
И как следствие будет существовать и будет числом.
Тогда не вижу смысла проверять, существует ли она и является ли числом.
Или я что то не понимаю, или чего то не знаю.
Ребята, не судите строго, я совсем недавно начал изучать PHP, а мне на плечи уже свалилось серьезное приложение.
![angry.gif](html/emoticons/angry.gif)
Спустя 23 минуты, 24 секунды (26.10.2008 - 21:05) Sephiroth_Lukaw написал(а):
Цитата(ApuktaChehov @ 26.10.2008, 17:42) [snapback]52929[/snapback]
И как следствие будет существовать и будет числом.
Тогда не вижу смысла проверять, существует ли она и является ли числом.
Тогда не вижу смысла проверять, существует ли она и является ли числом.
Дело в том, что эта переменная идёт в SQL запрос и её за просто можно подменить, например, вставить закрывающуюся кавычку и выполнить произвольную команду на БД. Из-за этого мы проверяем является ли числом переменная $id в массиве $_GET или нет. А если её не существует, то и проверять не надо, сразу выдаём 'ID is invalid or not defined'
Спустя 3 часа, 55 минут, 6 секунд (27.10.2008 - 01:01) ApuktaChehov написал(а):
Охо.. я и не думал об этом.
Я это учту, спасибо большое.
Как я понял, это работает, только если переменная - число.
А если это буквы?
Резать запрещенные символы?
Я это учту, спасибо большое.
Как я понял, это работает, только если переменная - число.
А если это буквы?
Резать запрещенные символы?
Спустя 10 минут (27.10.2008 - 01:11) Sephiroth_Lukaw написал(а):
Спустя 9 часов, 38 минут, 52 секунды (27.10.2008 - 10:49) bearman написал(а):
Цитата(Sephiroth_Lukaw @ 27.10.2008, 3:11) [snapback]52936[/snapback]
хоть один нормальный ответ
Спустя 2 часа, 44 минуты, 17 секунд (27.10.2008 - 13:34) ApuktaChehov написал(а):
А как обстоят дела с массивом $_POST.
Тут есть какие-нибудь пути подмена переменных?
Тут есть какие-нибудь пути подмена переменных?
Спустя 54 минуты, 35 секунд (27.10.2008 - 14:28) Krist_ALL написал(а):
Цитата
А как обстоят дела с массивом $_POST.
Тут есть какие-нибудь пути подмена переменных?
Тут есть какие-нибудь пути подмена переменных?
ПЕРЕменные , которые передаются методом пост, тоже можео подменить и их значение. так чо нет разницы - пост или гет. режть все спцсимволы
Спустя 18 минут, 58 секунд (27.10.2008 - 14:47) ApuktaChehov написал(а):
Спасибо!
![clapping.gif](html/emoticons/clapping.gif)
Спустя 1 час, 55 минут, 36 секунд (27.10.2008 - 16:43) MaxSystems.ru написал(а):
Цитата
А чем хуже str_replace('\'','',$_POST['text']); ///????!!!
Спустя 36 минут, 32 секунды (27.10.2008 - 17:19) md5 написал(а):
Цитата(MaxSystems.ru @ 27.10.2008, 16:43) [snapback]52964[/snapback]
Цитата
А чем хуже str_replace('\'','',$_POST['text']); ///????!!!
тем
Спустя 23 минуты, 52 секунды (27.10.2008 - 17:43) Sylex написал(а):
Цитата(MaxSystems.ru @ 27.10.2008, 19:43) [snapback]52964[/snapback]
Цитата
А чем хуже str_replace('\'','',$_POST['text']); ///????!!!
без комментариев...
Спустя 11 минут, 59 секунд (27.10.2008 - 17:55) str_replace написал(а):
Цитата(Krist_ALL @ 26.10.2008, 15:06) [snapback]52914[/snapback]
Код
if (!array_key_exists ('id', $_GET)
оригинальна!
можно вот так еще.
Код
if(is_numeric($_GET['id']) || str_lenght($_GET['id']) <7) {
......... }
else {
echo 'иди нах';
}
......... }
else {
echo 'иди нах';
}
чё-то так зацепило твоё слово "оригинальна!".
Это плохой способ проверки по-твоему? Или "люди так не пишут"?
Спустя 3 часа, 20 минут, 21 секунда (27.10.2008 - 21:16) bearman написал(а):
Цитата(str_replace @ 27.10.2008, 19:55) [snapback]52967[/snapback]
Цитата(Krist_ALL @ 26.10.2008, 15:06) [snapback]52914[/snapback]
Код
if (!array_key_exists ('id', $_GET)
оригинальна!
можно вот так еще.
Код
if(is_numeric($_GET['id']) || str_lenght($_GET['id']) <7) {
......... }
else {
echo 'иди нах';
}
......... }
else {
echo 'иди нах';
}
чё-то так зацепило твоё слово "оригинальна!".
Это плохой способ проверки по-твоему? Или "люди так не пишут"?
так пишут всякие олени которые делаю счетчик для свой хоум пейджи, а кто реально занимается разработками не пишут такое говно. почему? да потому что это не расширяемо, представляете каждый раз так писать в 2-5 метрах кода. ну вас нахрен с такими мыслями )
Спустя 3 часа, 4 минуты, 27 секунд (28.10.2008 - 00:20) sergeiss написал(а):
Цитата(bearman @ 27.10.2008, 21:16) [snapback]52980[/snapback]
так пишут всякие олени которые делаю счетчик для свой хоум пейджи, а кто реально занимается разработками не пишут такое говно. почему? да потому что это не расширяемо, представляете каждый раз так писать в 2-5 метрах кода. ну вас нахрен с такими мыслями )
Ну, а коли ты "не алЕнь", то поделись с сирыми и убогими, как пишут "чИста реАльные пацанЫ"
![smile.gif](html/emoticons/smile.gif)
Спустя 9 часов, 30 минут, 7 секунд (28.10.2008 - 09:50) bearman написал(а):
Цитата(sergeiss @ 28.10.2008, 2:20) [snapback]52988[/snapback]
Цитата(bearman @ 27.10.2008, 21:16) [snapback]52980[/snapback]
так пишут всякие олени которые делаю счетчик для свой хоум пейджи, а кто реально занимается разработками не пишут такое говно. почему? да потому что это не расширяемо, представляете каждый раз так писать в 2-5 метрах кода. ну вас нахрен с такими мыслями )
Ну, а коли ты "не алЕнь", то поделись с сирыми и убогими, как пишут "чИста реАльные пацанЫ"
![smile.gif](html/emoticons/smile.gif)
ну реальные пацаны пишут с использованием prepared statements (гопники всякие) ну или с изощренными методами + использование mysql_real_escape_string. я кажется до этого писал что так правильно.
Спустя 32 минуты, 43 секунды (28.10.2008 - 10:23) str_replace написал(а):
я правильно понимаю, по твоемУ способоу всё равно нужно каждую значимую (в теме примера - id) переменную проверять с использованием функции mysql_real_escape_string ()?
Спустя 7 минут, 5 секунд (28.10.2008 - 10:30) bearman написал(а):
Цитата(str_replace @ 28.10.2008, 12:23) [snapback]52995[/snapback]
я правильно понимаю, по твоемУ способоу всё равно нужно каждую значимую (в теме примера - id) переменную проверять с использованием функции mysql_real_escape_string ()?
да, вопрос только как
![smile.gif](html/emoticons/smile.gif)
я например пишу нечто вида
q("select * from users where username='{0}' and password='{1}'",$username,$password);
удобно и безопасно
![wink.gif](html/emoticons/wink.gif)
а проверять всегда данные нужно, но можно конечно надеяться на говнорежим magi_qotes_runtime и тп, но это не для меня, простите.
Спустя 7 минут, 54 секунды (28.10.2008 - 10:38) str_replace написал(а):
ты пишешь код q(..., $username, $password).
А где и как ты проверяешь, что данные есть?
И как проверяешь, что $username, скажем не равно '; DELETE FROM `users` WHERE `id` NOT NULL ';
А где и как ты проверяешь, что данные есть?
И как проверяешь, что $username, скажем не равно '; DELETE FROM `users` WHERE `id` NOT NULL ';
Спустя 2 часа, 7 минут, 17 секунд (28.10.2008 - 12:45) bearman написал(а):
Цитата(str_replace @ 28.10.2008, 12:38) [snapback]52998[/snapback]
ты пишешь код q(..., $username, $password).
А где и как ты проверяешь, что данные есть?
И как проверяешь, что $username, скажем не равно '; DELETE FROM `users` WHERE `id` NOT NULL ';
А где и как ты проверяешь, что данные есть?
И как проверяешь, что $username, скажем не равно '; DELETE FROM `users` WHERE `id` NOT NULL ';
а зачем проверять, если {0} - экранированная версия username'a ??? мыслите шире и будет вам счастье
![wink.gif](html/emoticons/wink.gif)
получится в моем примере select * from users where username='\'; DELETE FROM \`users\` WHERE \`id\` NOT NULL \'; ' and password='lalal'. забавное имя ползователя окнечно, но в коеечном итоге выбор за ним
![wink.gif](html/emoticons/wink.gif)
Спустя 38 минут, 24 секунды (28.10.2008 - 13:24) Sylex написал(а):
bearman, лексикон у тебя прикольный
![laugh.gif](html/emoticons/laugh.gif)
Спустя 22 минуты, 58 секунд (28.10.2008 - 13:47) bearman написал(а):
Цитата(Sylex @ 28.10.2008, 15:24) [snapback]53012[/snapback]
bearman, лексикон у тебя прикольный ![laugh.gif](html/emoticons/laugh.gif)
![laugh.gif](html/emoticons/laugh.gif)
стараюсь )))
Спустя 1 час, 21 минута, 14 секунд (28.10.2008 - 15:08) str_replace написал(а):
Цитата(bearman @ 28.10.2008, 9:45) [snapback]53009[/snapback]
Цитата(str_replace @ 28.10.2008, 12:38) [snapback]52998[/snapback]
ты пишешь код q(..., $username, $password).
А где и как ты проверяешь, что данные есть?
И как проверяешь, что $username, скажем не равно '; DELETE FROM `users` WHERE `id` NOT NULL ';
А где и как ты проверяешь, что данные есть?
И как проверяешь, что $username, скажем не равно '; DELETE FROM `users` WHERE `id` NOT NULL ';
а зачем проверять, если {0} - экранированная версия username'a ??? мыслите шире и будет вам счастье
![wink.gif](html/emoticons/wink.gif)
получится в моем примере select * from users where username='\'; DELETE FROM \`users\` WHERE \`id\` NOT NULL \'; ' and password='lalal'. забавное имя ползователя окнечно, но в коеечном итоге выбор за ним
![wink.gif](html/emoticons/wink.gif)
если честно, ты мне новую галактику не открыл, но мне интересно, как ты проверяешь переменные на входе?
пусть есть 3 странички news.php, article.php и item.php
В 1-ую передаётся (GET) переменная newsId, во вторую articleId и в третью itemId.
Какой же у тебя есть "универсальный" механизм проверки данных? (напомню, что все указанные переменные а) должны существовать б) должны быть целым числом)
Спустя 3 минуты, 24 секунды (28.10.2008 - 15:11) bearman написал(а):
Цитата(str_replace @ 28.10.2008, 17:08) [snapback]53024[/snapback]
Цитата(bearman @ 28.10.2008, 9:45) [snapback]53009[/snapback]
Цитата(str_replace @ 28.10.2008, 12:38) [snapback]52998[/snapback]
ты пишешь код q(..., $username, $password).
А где и как ты проверяешь, что данные есть?
И как проверяешь, что $username, скажем не равно '; DELETE FROM `users` WHERE `id` NOT NULL ';
А где и как ты проверяешь, что данные есть?
И как проверяешь, что $username, скажем не равно '; DELETE FROM `users` WHERE `id` NOT NULL ';
а зачем проверять, если {0} - экранированная версия username'a ??? мыслите шире и будет вам счастье
![wink.gif](html/emoticons/wink.gif)
получится в моем примере select * from users where username='\'; DELETE FROM \`users\` WHERE \`id\` NOT NULL \'; ' and password='lalal'. забавное имя ползователя окнечно, но в коеечном итоге выбор за ним
![wink.gif](html/emoticons/wink.gif)
если честно, ты мне новую галактику не открыл, но мне интересно, как ты проверяешь переменные на входе?
пусть есть 3 странички news.php, article.php и item.php
В 1-ую передаётся (GET) переменная newsId, во вторую articleId и в третью itemId.
Какой же у тебя есть "универсальный" механизм проверки данных? (напомню, что все указанные переменные а) должны существовать б) должны быть целым числом)
зачем проверять их на целочисленность? если будет нечто вида selec * from table where id= и тут поставить "z" то просто ничего не найдется это раз. на незаполненость - два.
скажу больше что у меня есть класс
и делаю я нетчо вида
if(!$item = $db->get("items",$_GET['id']))
{
die(404);
}
понятна суть? а вот гет уже делает проверку на существование переменной, то что целое число вообще никогда не проверяю :-D
нахрена?) время разве что тратить впустую.
Спустя 4 минуты, 36 секунд (28.10.2008 - 15:16) str_replace написал(а):
По идее, код if(!$item = $db->get("items",$_GET['id'])) должен вызвать Notice если id не существует.
так?
так?
Спустя 30 минут, 2 секунды (28.10.2008 - 15:46) bearman написал(а):
Цитата(str_replace @ 28.10.2008, 17:16) [snapback]53026[/snapback]
По идее, код if(!$item = $db->get("items",$_GET['id'])) должен вызвать Notice если id не существует.
так?
так?
error_reporting(E_ALL & ~E_NOTICE);
![smile.gif](html/emoticons/smile.gif)
и ничего не увидите.
мне обычно насрать на передан ли параметр, если невозможно скл инъекция, мне более интересно нашелся ли элемент
![wink.gif](html/emoticons/wink.gif)
Спустя 9 минут, 52 секунды (28.10.2008 - 15:56) str_replace написал(а):
Цитата(bearman @ 28.10.2008, 12:46) [snapback]53028[/snapback]
Цитата(str_replace @ 28.10.2008, 17:16) [snapback]53026[/snapback]
По идее, код if(!$item = $db->get("items",$_GET['id'])) должен вызвать Notice если id не существует.
так?
так?
error_reporting(E_ALL & ~E_NOTICE);
![smile.gif](html/emoticons/smile.gif)
и ничего не увидите.
мне обычно насрать на передан ли параметр, если невозможно скл инъекция, мне более интересно нашелся ли элемент
![wink.gif](html/emoticons/wink.gif)
Я так и понял.
ИМХО, подавление предупреждений - это зло.
Поэтому мы ("алени") пишем array_key_exists.
Каждый выбирает так, как ему больше нравится
![smile.gif](html/emoticons/smile.gif)
Спустя 34 минуты, 42 секунды (28.10.2008 - 16:30) bearman написал(а):
Цитата(str_replace @ 28.10.2008, 17:56) [snapback]53032[/snapback]
Цитата(bearman @ 28.10.2008, 12:46) [snapback]53028[/snapback]
Цитата(str_replace @ 28.10.2008, 17:16) [snapback]53026[/snapback]
По идее, код if(!$item = $db->get("items",$_GET['id'])) должен вызвать Notice если id не существует.
так?
так?
error_reporting(E_ALL & ~E_NOTICE);
![smile.gif](html/emoticons/smile.gif)
и ничего не увидите.
мне обычно насрать на передан ли параметр, если невозможно скл инъекция, мне более интересно нашелся ли элемент
![wink.gif](html/emoticons/wink.gif)
Я так и понял.
ИМХО, подавление предупреждений - это зло.
Поэтому мы ("алени") пишем array_key_exists.
Каждый выбирает так, как ему больше нравится
![smile.gif](html/emoticons/smile.gif)
сколько по времени у вас занимает написание полноценного сайта с галереей картинок, новостями статьями, допустим формой заказа, каталогом продукции с 0? допустим используя ваш фреймворк.
Спустя 54 минуты, 16 секунд (28.10.2008 - 17:25) str_replace написал(а):
я думаю около 2-3 недель (это если с нуля писать).
Спустя 24 минуты, 44 секунды (28.10.2008 - 17:49) bearman написал(а):
Цитата(str_replace @ 28.10.2008, 19:25) [snapback]53048[/snapback]
я думаю около 2-3 недель (это если с нуля писать).
а я дня 2-3 отсилы. вот об этом я и говорю, что если не делать никому не нужные проверки, а просто написать вещь при которой можно тупо не делать такие вещи, то скорость значительно вырастает
![wink.gif](html/emoticons/wink.gif)
Спустя 31 минута, 23 секунды (28.10.2008 - 18:21) str_replace написал(а):
bearman, я согласен с вами, что можно писать без проверок (или с минималным их кол-вом) + отключить нотисы. Тогда действительно можно написать за 2-3 дня.
Спустя 30 минут, 52 секунды (28.10.2008 - 18:52) AndryG написал(а):
Что главное? Безопасность.
Если сайт используется в нормальном режиме - то и отображение идет красивое и правильное.
Если юзер начинает с параметрами мудрить и ковырять, то пофиг как это будет отображаться - главное не показать ему недозволенного!
Зачем проверять "передан ли параметр", какого типа параметр пришел и т.д.
Как по мне стоит перекрыть в корне возможность инъекций и на этом точка. Заменил юзер строку вызова - получил бредовую страницу -- сам виноват. Тут главное не пропустить инъекцию и всё тут.
Если сайт используется в нормальном режиме - то и отображение идет красивое и правильное.
Если юзер начинает с параметрами мудрить и ковырять, то пофиг как это будет отображаться - главное не показать ему недозволенного!
Зачем проверять "передан ли параметр", какого типа параметр пришел и т.д.
Как по мне стоит перекрыть в корне возможность инъекций и на этом точка. Заменил юзер строку вызова - получил бредовую страницу -- сам виноват. Тут главное не пропустить инъекцию и всё тут.
Спустя 3 часа, 57 минут, 53 секунды (28.10.2008 - 22:50) bearman написал(а):
Цитата(AndryG @ 28.10.2008, 20:52) [snapback]53057[/snapback]
Что главное? Безопасность.
Если сайт используется в нормальном режиме - то и отображение идет красивое и правильное.
Если юзер начинает с параметрами мудрить и ковырять, то пофиг как это будет отображаться - главное не показать ему недозволенного!
Зачем проверять "передан ли параметр", какого типа параметр пришел и т.д.
Как по мне стоит перекрыть в корне возможность инъекций и на этом точка. Заменил юзер строку вызова - получил бредовую страницу -- сам виноват. Тут главное не пропустить инъекцию и всё тут.
Если сайт используется в нормальном режиме - то и отображение идет красивое и правильное.
Если юзер начинает с параметрами мудрить и ковырять, то пофиг как это будет отображаться - главное не показать ему недозволенного!
Зачем проверять "передан ли параметр", какого типа параметр пришел и т.д.
Как по мне стоит перекрыть в корне возможность инъекций и на этом точка. Заменил юзер строку вызова - получил бредовую страницу -- сам виноват. Тут главное не пропустить инъекцию и всё тут.
какбы я об этом и говорю)))))
а проверять - мещанство(как бы для смертных потеха, ну и кому девать время некуда). вполне достаточно экранирования символов, единственное чтобудет - форму редактирования пустуя покажет и все или пустую страницу с товарами, но у меня обычно 404 страницу показывает.
кстати как вы думаете, дурной ли тон вешать банеры на 404 страницу + показывать как много людей сюда попали?
Спустя 13 часов, 23 минуты, 32 секунды (29.10.2008 - 12:13) str_replace написал(а):
думаю, это как минимум забавно )))
+ сделать через ajax счётик "На 404 страничке сейчас online: Х юзеров"
+ сделать через ajax счётик "На 404 страничке сейчас online: Х юзеров"
Спустя 9 часов, 7 минут, 28 секунд (29.10.2008 - 21:21) AndryG написал(а):
Думаю логичней на 404 поставить типа "Если Вы сюда попали случайно - поведайте мне на мыло как -- это ошибка. Ну а если ищите инъекции, то сообщаю Вам: "Ваш вариант не прошел" " :-) типа такого.
Друг у меня есть - любитель поиска инъекций где и как хоч.
На одном проекте поспорили, найдет ли он у меня чего-нить иль нет.
Вся защита состояла из одного правила "никаких ручных собираний запросов по кускам - только полный запрос с использованием параметров".
Типа не пишем
А пишем
Процедура db_query - простая обертка пхпшной функции запроса, которая экранирует всю фигню в параметрах.
Вот такая "концентрация" за безопасность отвечающего кода в одну функцию полностью устранила возможность инъекций -- друг так ни одной и не нашел.
Вторая функция-обертка использовалась для чтения данных БД -- она экранировала нафиг все HTML теги в читаемых данных - тким макаром с БД у меня вылазил уже безопасный код - никакого JS-кода уже встроить в страницу не получится.
И усё
Друг у меня есть - любитель поиска инъекций где и как хоч.
На одном проекте поспорили, найдет ли он у меня чего-нить иль нет.
Вся защита состояла из одного правила "никаких ручных собираний запросов по кускам - только полный запрос с использованием параметров".
Типа не пишем
Код
$sql = 'select * from table where a='.$a
А пишем
Код
db_query('select * from table where a=:param_a',$a)
Процедура db_query - простая обертка пхпшной функции запроса, которая экранирует всю фигню в параметрах.
Вот такая "концентрация" за безопасность отвечающего кода в одну функцию полностью устранила возможность инъекций -- друг так ни одной и не нашел.
Вторая функция-обертка использовалась для чтения данных БД -- она экранировала нафиг все HTML теги в читаемых данных - тким макаром с БД у меня вылазил уже безопасный код - никакого JS-кода уже встроить в страницу не получится.
И усё
![smile.gif](html/emoticons/smile.gif)
Спустя 1 день, 12 часов, 57 минут, 58 секунд (31.10.2008 - 10:18) ApuktaChehov написал(а):
Ребята! Это, конечно, все хорошо, но только я не понял главного.
Как экранировать спец символы?
Можете привести код?
С переменной $_GET['id'].
Как экранировать спец символы?
Можете привести код?
С переменной $_GET['id'].
Спустя 19 минут, 58 секунд (31.10.2008 - 10:38) AndryG написал(а):
mysql_escape_string
Спустя 13 минут, 55 секунд (31.10.2008 - 10:52) ApuktaChehov написал(а):
Попробовал осуществить инъекцию в запрос:
пример инъекции:
получилось следующее:
Все верно?
Просто если не использовать mysql_escape_string();
то запрос с инъекцией выглядит так:
Как я понял перед спец символом ' вставляется \ в случае без mysql_escape_string();
, а с использованием mysql_escape_string(); вставляется \\\.
Код
$_GET['br']=mysql_escape_string($_GET['br']);
mysql_query("select * from user_tbl WHERE id='$_GET[br]'") or die ("ЖОПА");
mysql_query("select * from user_tbl WHERE id='$_GET[br]'") or die ("ЖОПА");
пример инъекции:
Код
index.php?br=0'+OR+user_name='admin
получилось следующее:
Код
mysql_query("select * from user_tbl WHERE id='0\\\' OR user_name=\\\'admin'")or die ("ЖОПА");
Все верно?
Просто если не использовать mysql_escape_string();
то запрос с инъекцией выглядит так:
Код
mysql_query("select * from user_tbl WHERE id='0\' OR user_name=\'admin'")or die ("ЖОПА");
Как я понял перед спец символом ' вставляется \ в случае без mysql_escape_string();
, а с использованием mysql_escape_string(); вставляется \\\.
Спустя 15 минут, 3 секунды (31.10.2008 - 11:07) Sephiroth_Lukaw написал(а):
ммм... http://php.ru/manual/security.magicquotes.html, http://php.ru/manual/function.get-magic-quotes-gpc.html
В общем, что бы кавычки не экранизировались, в .htaccess
В общем, что бы кавычки не экранизировались, в .htaccess
Код
php_flag magic_quotes_gpc Off
php_flag magic_quotes_sybase Off
php_flag magic_quotes_runtime Off
php_flag magic_quotes_sybase Off
php_flag magic_quotes_runtime Off
Спустя 8 минут, 17 секунд (31.10.2008 - 11:16) AndryG написал(а):
Цитата
Как я понял перед спец символом ' вставляется \ в случае без mysql_escape_string();
, а с использованием mysql_escape_string(); вставляется \\\.
, а с использованием mysql_escape_string(); вставляется \\\.
Видать точно включен http://php.ru/manual/function.get-magic-quotes-gpc.html -- отключите его нафиг -- только путанины добавляет.
Этот режим автоматически экранирует все спецсимволы. Таким макаром:
вы ставите ' -- магик экранирует \' ... а потом вы экранируете через mysql_escape_string() -- получаете:
экранируем ' -> \'
экранируем \ -> \\
В итоге, используя mysql_escape_string() при включенном мэйжик получаем не '-> \' , а ' -> \\\'
Спустя 1 минута, 49 секунд (31.10.2008 - 11:18) ApuktaChehov написал(а):
Так.. а какой тогда смысл в mysql_escape_string();
если, magic_quotes_gpc все сама экранирует?
если, magic_quotes_gpc все сама экранирует?
Спустя 31 минута, 4 секунды (31.10.2008 - 11:49) AndryG написал(а):
Вот выцарапал функцию о которой выше говорил.
Допустим есть запрос:
$sql = select * from table where a=:nnn and b = :mmm
Слова, начинающиеся с двоеточия - параметры. (не попадитесь - в комментариях параметров быть не должно, в параметрах допустимы только буквы)
Два варианта использования:
первый
$res = my_db($sql,'value for :nnn','value for :mmm') => указываете запрос и параметры в порядке "как в запросе"
Этот вариант удобен, когда параметров мало и они не повторяются.
второй
$params = array('nnn'=>'value for :nnn','mmm'=>'value for :mmm');
$res = my_db($sql,$params); => Удобен, при большом к-ве параметров или их "повторении" в запросах типа '... where a = :P or b = :P and d = :v'
___
P.S.
Сколько по коду не лазил у себя - не нашел варианта с использованием второго варианта ... уже не помню ... кажись второй вариант появился под конец проекта, посему не гарантирую его работу :-) хотя работать должен.
Код
/**
* @desc Защищенное выполнение запросов
* Два варианта вызова:
* 1 второй и последующие параметры - параметры запроса
* 2 второй параметр - массив параметров name=>value
*/
function mydb_query($sql){
\\ получаем в массив переданные функции параметры
$f_params = func_get_args();
if(is_array(@$f_params[1])){ // есть второй параметр-массив - работаем с именоваными параметрами
\\второй вариант вызова (массив параметров) $f_params[1] -- это и есть массив именованных параметров
$sql = preg_replace('/:([\w]+)/e','\'\\\'\'.mysql_escape_string($f_params[1][\'\\1\']).\'\\\'\'',$sql);
}else{
\\первый вариант вызова
array_shift($f_params); \\ удаляем нафиг первый переданный парамет (это текст запроса)
$i= 0; \\ инициализируем
\\ замена. Когда встретим в тексте :PARAM_NAME заменим его на текущий элемент f_params и сделаем текущим следующий элемент
$sql = preg_replace('/:([\w]+)/e','\'\\\'\'.mysql_escape_string($f_params[$i++]).\'\\\'\'',$sql);
}
$GLOBALS['mydb_sql'] = $sql; // ДЛЯ ОТЛАДКИ - виден полный запрос после всех экранирований
return mysql_query($sql);
}
* @desc Защищенное выполнение запросов
* Два варианта вызова:
* 1 второй и последующие параметры - параметры запроса
* 2 второй параметр - массив параметров name=>value
*/
function mydb_query($sql){
\\ получаем в массив переданные функции параметры
$f_params = func_get_args();
if(is_array(@$f_params[1])){ // есть второй параметр-массив - работаем с именоваными параметрами
\\второй вариант вызова (массив параметров) $f_params[1] -- это и есть массив именованных параметров
$sql = preg_replace('/:([\w]+)/e','\'\\\'\'.mysql_escape_string($f_params[1][\'\\1\']).\'\\\'\'',$sql);
}else{
\\первый вариант вызова
array_shift($f_params); \\ удаляем нафиг первый переданный парамет (это текст запроса)
$i= 0; \\ инициализируем
\\ замена. Когда встретим в тексте :PARAM_NAME заменим его на текущий элемент f_params и сделаем текущим следующий элемент
$sql = preg_replace('/:([\w]+)/e','\'\\\'\'.mysql_escape_string($f_params[$i++]).\'\\\'\'',$sql);
}
$GLOBALS['mydb_sql'] = $sql; // ДЛЯ ОТЛАДКИ - виден полный запрос после всех экранирований
return mysql_query($sql);
}
Допустим есть запрос:
$sql = select * from table where a=:nnn and b = :mmm
Слова, начинающиеся с двоеточия - параметры. (не попадитесь - в комментариях параметров быть не должно, в параметрах допустимы только буквы)
Два варианта использования:
первый
$res = my_db($sql,'value for :nnn','value for :mmm') => указываете запрос и параметры в порядке "как в запросе"
Этот вариант удобен, когда параметров мало и они не повторяются.
второй
$params = array('nnn'=>'value for :nnn','mmm'=>'value for :mmm');
$res = my_db($sql,$params); => Удобен, при большом к-ве параметров или их "повторении" в запросах типа '... where a = :P or b = :P and d = :v'
___
P.S.
Сколько по коду не лазил у себя - не нашел варианта с использованием второго варианта ... уже не помню ... кажись второй вариант появился под конец проекта, посему не гарантирую его работу :-) хотя работать должен.
Спустя 13 минут, 31 секунда (31.10.2008 - 12:02) AndryG написал(а):
Цитата
Так.. а какой тогда смысл в mysql_escape_string();
если, magic_quotes_gpc все сама экранирует?
если, magic_quotes_gpc все сама экранирует?
Попишите - увидите :-)
Отключив автомат Вы получаете КОНТРОЛЬ над экранированием, что намного удобней в данном случае.
Например. Юзер вводит адрес "ул.Плюшкина 34\12" ... к Вам приходит строка "ул.Плюшкина 34\\12" ... юзер редактирует название улицы и не замечает, что слешей два ... при сохранении изменений будет записано "ул.Плашкина 34\\\\12" и т.д.
Спустя 7 минут, 57 секунд (31.10.2008 - 12:10) Krist_ALL написал(а):
Можно либо ручкми все экранировать или резать или использовать mysql_expape_string() Я так и не пойму КАКИЕ дебилы пишут скрипты без проверок???????? Можно же такойй урона нанести сайту...
___
P.S.
Krist_All оказался прав. Если не использовать проверки, то можно нанести урон сайту. Причем, урон можно нанести не только своему сайту, но и посещаемым тобой.
Яркий пример.
На сайте Mobile-proff.ru ищем дырку, узнаем пароль админа, который по совместительству является и модератором на ЭТОМ форуме.
Заходим на сайт phpforum.ru под логином Krist_All и начинаем творить чудеса :-)
Мы ж не звери ... поэтому для примера только отредактировали этот пост :-)
___
P.S.
Krist_All оказался прав. Если не использовать проверки, то можно нанести урон сайту. Причем, урон можно нанести не только своему сайту, но и посещаемым тобой.
Яркий пример.
На сайте Mobile-proff.ru ищем дырку, узнаем пароль админа, который по совместительству является и модератором на ЭТОМ форуме.
Заходим на сайт phpforum.ru под логином Krist_All и начинаем творить чудеса :-)
Мы ж не звери ... поэтому для примера только отредактировали этот пост :-)
Спустя 38 минут, 52 секунды (31.10.2008 - 12:49) ApuktaChehov написал(а):
Набросал функцию фильтрации данных и для SQL и вообще для всего остального.
Ваши комментарии...
Код
function prot_data($str){
$str=strip_tags($str);
$str=htmlspecialchars($str, ENT_COMPAT);
$str=mysql_real_escape_string($str);
}
$str=strip_tags($str);
$str=htmlspecialchars($str, ENT_COMPAT);
$str=mysql_real_escape_string($str);
}
Ваши комментарии...
Спустя 46 минут, 40 секунд (31.10.2008 - 13:36) AndryG написал(а):
Не помню работу функций ... у вас они друг-друга не экранируют?
Вы подразумеваете "ручную" вставку значений в запросы. Таким макаром, Вы ВСЕГДА ручками должны обеззараживать значения при вставке, обрамляя КАЖДЫЙ из них своей функцией. В этом и кроется опасность. Если Вы один раз забудете использовать свою функцию, то появится дырка.
Именно при таком подходе и получаются дырявые сайты -- тут нет инъекции, а тут, когда писали в 3 ночи, - дырка есть.
Предложенная мною функция и была написана для этого -- как ни старайся - никакое значение в запрос без дезинфекции не пройдет.
К тому же всегда используются "полные" запросы, которые можно отладить в любой нормальной среде администрирования БД.
___
P.S.
Krist_ALL, на мой взгляд, Ваше рвение в админы/модераторы и смысл Вашего поста -- не совместимы ... Вы уж определитесь - или Вы флудер или админ :-)
Вы подразумеваете "ручную" вставку значений в запросы. Таким макаром, Вы ВСЕГДА ручками должны обеззараживать значения при вставке, обрамляя КАЖДЫЙ из них своей функцией. В этом и кроется опасность. Если Вы один раз забудете использовать свою функцию, то появится дырка.
Именно при таком подходе и получаются дырявые сайты -- тут нет инъекции, а тут, когда писали в 3 ночи, - дырка есть.
Предложенная мною функция и была написана для этого -- как ни старайся - никакое значение в запрос без дезинфекции не пройдет.
К тому же всегда используются "полные" запросы, которые можно отладить в любой нормальной среде администрирования БД.
___
P.S.
Krist_ALL, на мой взгляд, Ваше рвение в админы/модераторы и смысл Вашего поста -- не совместимы ... Вы уж определитесь - или Вы флудер или админ :-)
Спустя 21 минута, 43 секунды (31.10.2008 - 13:57) ApuktaChehov написал(а):
Я не понимаю вашу функцию, распешите по подробнее.
Благодарю.
Благодарю.
Спустя 5 часов, 20 минут, 40 секунд (31.10.2008 - 19:18) AndryG написал(а):
замените последнюю строку строку на return $sql
попробуйте запуски с разными параметрами - функция будет возвращать готовые к выполнению запросы.
Типа такого - увидите как работает ... объяснить -- это почти трактат о PHP :-)
попробуйте запуски с разными параметрами - функция будет возвращать готовые к выполнению запросы.
Код
echo mydb_query('select * from table where a = :aa',123);
echo mydb_query('select * from table where a = :aa and b = :er',123,'eeeeee');
echo mydb_query('select * from table where a = :aa and b = :er',array('aa'=>'val_a','er'=>'val_for_er'));
echo mydb_query('select * from table where a = :aa and b = :er',123,'eeeeee');
echo mydb_query('select * from table where a = :aa and b = :er',array('aa'=>'val_a','er'=>'val_for_er'));
Типа такого - увидите как работает ... объяснить -- это почти трактат о PHP :-)
Спустя 53 минуты, 3 секунды (31.10.2008 - 20:11) Sylex написал(а):
mysql_real_escape_string кстати более безопасна для двоичных данных и учитывает кодировку:
http://www.phpfaq.ru/all#slashes_rightusage
http://habrahabr.ru/blogs/webdev/40458/
http://www.phpfaq.ru/all#slashes_rightusage
http://habrahabr.ru/blogs/webdev/40458/
Спустя 14 часов, 47 минут, 7 секунд (1.11.2008 - 10:58) Krist_ALL написал(а):
Цитата
P.S.
Krist_ALL, на мой взгляд, Ваше рвение в админы/модераторы и смысл Вашего поста -- не совместимы ... Вы уж определитесь - или Вы флудер или админ :-)
Krist_ALL, на мой взгляд, Ваше рвение в админы/модераторы и смысл Вашего поста -- не совместимы ... Вы уж определитесь - или Вы флудер или админ :-)
не твое дело
Спустя 4 часа, 33 минуты, 58 секунд (1.11.2008 - 15:32) uMnepaTop написал(а):
Krist_ALL, какой из тебя модер, если ты даже с людьми, разговаривать не умееш...
+ Орфографических ошибок дофигища)
Сорри за оффтоп)
+ Орфографических ошибок дофигища)
Сорри за оффтоп)
Спустя 1 час, 8 секунд (1.11.2008 - 16:32) Sephiroth_Lukaw написал(а):
*жуёт попкорн*
[closeread]
к слову, насчёт волшебных кавычек
[closeread]
к слову, насчёт волшебных кавычек
Цитата("http://ru2.php.net/magic_quotes")
This feature has been DEPRECATED and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.
Спустя 10 часов, 8 минут, 39 секунд (2.11.2008 - 02:41) Adil написал(а):
Цитата
Я так и не пойму КАКИЕ дебилы пишут скрипты без проверок???????? Можно же такойй урона нанести сайту...
Например получение данных из БД на сайте где ты Администратор, руководитель проекта??? (http://mobile-proff.ru/komanda.php)
![](http://picthost.ru/images/2nwcxq076lb8j40v31f.jpg)
P.S. ответь мне сейчас искренне на вопрос: ты считаешь себя дебилом или нет?
Спустя 2 часа, 27 минут, 53 секунды (2.11.2008 - 05:09) kirik написал(а):
Nezabivaemiy =)
Krist_ALL, там еще поменяй возле логинилки запомнгить, при регистрации - же вЫ сможете, забудите, зарегестрироватЬся, еще поправь ошибки на главной
Krist_ALL, там еще поменяй возле логинилки запомнгить, при регистрации - же вЫ сможете, забудите, зарегестрироватЬся, еще поправь ошибки на главной
![wink.gif](html/emoticons/wink.gif)
Спустя 1 день, 6 часов, 46 минут, 58 секунд (3.11.2008 - 11:56) AndryG написал(а):
О инъекциях знал только теорию ... но на Вашем,Krist_ALL , сайте прошел от теории к практике за 10 минут :-)
Хотя пароль у Вас хороший стоит и буквы и циферки ... "Ворота крепкие, да только стены хлюпкие"
Что бы не быть флудером, добавлю и полезного в пост. О своей функции.
Добавил комментариев http://www.phpforum.ru/index.php?showtopic...ost&p=53308
Там используется возможность функции "замена по регулярке" перед подстановкой текста, замены выполнять его как PHP-код. И замена происходит НА РЕЗУЛЬТАТ этой замены.
смотрим строку:
Ищется код "двоеточие и кучка букв" и заменяется на резултат выполнения кода mysql_escape_string($f_params[$i++])
$i у нас вначале ноль, а потом, благодаря ПОСТ-инкременту увеличивается на единицу.
Таким макаром у нас каждый следующий параметр (двоеточие и кучка букв) в тексте запроса постепенной заменяется на элементы массива f_params.
Такой же механизм применяется и в втором варианте, но там по массиву проход идет не просто от начала к концу, а с массива выбирается тот элемент, индекс, которого указан в имени параметра.
____
P.S.
krist_ALL, не стоит так бурно реагировать на слова людей.
Никто зла Вам не желает (пароли ж тут не показывают Ваши и дырки тоже при себе мы с Незабываемым оставили).
Вам только пытались сказать, что не стоит быть столь категоричным в своих утверждениях. (как видите Ваши злые слова именно с Вами сыграли такую же шутку.)
Да еще ... про безопасность. Если Вы уж модератор, на этом сайте, то хоть пароль не ставьте такой же, как на Вашем "дуршлаге", а то подставляете не только себя. но и этот сайт.
Хотя пароль у Вас хороший стоит и буквы и циферки ... "Ворота крепкие, да только стены хлюпкие"
Что бы не быть флудером, добавлю и полезного в пост. О своей функции.
Добавил комментариев http://www.phpforum.ru/index.php?showtopic...ost&p=53308
Там используется возможность функции "замена по регулярке" перед подстановкой текста, замены выполнять его как PHP-код. И замена происходит НА РЕЗУЛЬТАТ этой замены.
смотрим строку:
Код
$sql = preg_replace('/:([\w]+)/e','\'\\\'\'.mysql_escape_string($f_params[$i++]).\'\\\'\'',$sql);
Ищется код "двоеточие и кучка букв" и заменяется на резултат выполнения кода mysql_escape_string($f_params[$i++])
$i у нас вначале ноль, а потом, благодаря ПОСТ-инкременту увеличивается на единицу.
Таким макаром у нас каждый следующий параметр (двоеточие и кучка букв) в тексте запроса постепенной заменяется на элементы массива f_params.
Такой же механизм применяется и в втором варианте, но там по массиву проход идет не просто от начала к концу, а с массива выбирается тот элемент, индекс, которого указан в имени параметра.
____
P.S.
krist_ALL, не стоит так бурно реагировать на слова людей.
Никто зла Вам не желает (пароли ж тут не показывают Ваши и дырки тоже при себе мы с Незабываемым оставили).
Вам только пытались сказать, что не стоит быть столь категоричным в своих утверждениях. (как видите Ваши злые слова именно с Вами сыграли такую же шутку.)
Да еще ... про безопасность. Если Вы уж модератор, на этом сайте, то хоть пароль не ставьте такой же, как на Вашем "дуршлаге", а то подставляете не только себя. но и этот сайт.
![](http://picthost.ru/images/jtxxi15d65ahm4pwwyow_thumb.png)
Спустя 4 часа, 22 минуты, 32 секунды (3.11.2008 - 16:18) Adil написал(а):
Цитата
P.S.
krist_ALL, не стоит так бурно реагировать на слова людей.
Никто зла Вам не желает (пароли ж тут не показывают Ваши и дырки тоже при себе мы с Незабываемым оставили).
krist_ALL, не стоит так бурно реагировать на слова людей.
Никто зла Вам не желает (пароли ж тут не показывают Ваши и дырки тоже при себе мы с Незабываемым оставили).
+ присоединяюсь
Цитата
Вам только пытались сказать, что не стоит быть столь категоричным в своих утверждениях. (как видите Ваши злые слова именно с Вами сыграли такую же шутку.)
Именно это я и хотел сказать в своем предыдущем сообщении...
Спустя 2 часа, 27 минут, 16 секунд (3.11.2008 - 18:46) Krist_ALL написал(а):
Так...
1. Очень зол что взломали мой сайт.
2. Думаете я не находил инекций на других сайтах?
3. Узнали мой пароль эт плохо, но вы смогли сделать что то с сайтом? Ан нет.
4. Если не трудна, напишите мне в аську 422271188 и раскажите баги сайта...
5. Кто спрашивал про дебила? Сам дебил
6. Модератор? Я не модер, эт ток написана, а у мну прав нет шоб удалить тему
1. Очень зол что взломали мой сайт.
2. Думаете я не находил инекций на других сайтах?
3. Узнали мой пароль эт плохо, но вы смогли сделать что то с сайтом? Ан нет.
4. Если не трудна, напишите мне в аську 422271188 и раскажите баги сайта...
5. Кто спрашивал про дебила? Сам дебил
6. Модератор? Я не модер, эт ток написана, а у мну прав нет шоб удалить тему
Спустя 33 минуты, 1 секунда (3.11.2008 - 19:19) Sylex написал(а):
Цитата(Krist_ALL @ 3.11.2008, 21:46) [snapback]53518[/snapback]
3. Узнали мой пароль эт плохо, но вы смогли сделать что то с сайтом? Ан нет.
Krist_ALL, уверяю - пощадили, не хотели просто
![laugh.gif](html/emoticons/laugh.gif)
а баги у тебя при отображении статьи, а также при регистрации... инъекции на лицо
Спустя 5 минут, 47 секунд (3.11.2008 - 19:24) Krist_ALL написал(а):
1. В статьях защита хорошая! Не верю шо там баг. Гоните 100% т.к там проверка ид на ис_нумерик и стрлен!
2. Пощадили? Да иди ты знаешь куда со своей пощадой! Я те устрою
вообще-то признаюсь, что я Krist_ALL лох.. извините
2. Пощадили? Да иди ты знаешь куда со своей пощадой! Я те устрою
вообще-то признаюсь, что я Krist_ALL лох.. извините
Спустя 4 минуты, 25 секунд (3.11.2008 - 19:29) AndryG написал(а):
Вот Ваш логин .. .какая страница? http://mobile-proff.ru/articles/nastrojka_...%20from%20users
Какая защита! Испанская? Нумерик говорите?
А под этим логином можно зайти в админку форума на том сайте http://mobile-proff.ru/articles/nastrojka_...s%20limit%201,1
Спустя 25 секунд (3.11.2008 - 19:29) Sephiroth_Lukaw написал(а):
странно..люди вроде помогают, а столько агрессии...
SQL
Unknown column 'blablabla' in 'where clause'
- уже говорит о многом... Спустя 5 минут, 10 секунд (3.11.2008 - 19:34) AndryG написал(а):
По структуре твоей базы ... не нужно делать кучу таблиц "моддинг" "секреты" "разное" и т.п. -- всё это СТАТЬИ.
Заведи одну таблицу СТАТЬИ ... добавь еще одно поле "тип статьи" и по нему разделяй моддинг/секреты/и т.п.
Для полной красоты сделай вторую таблицу "ТИПЫ СТАТЕЙ" с полями номер типа и название типа.
Так и поиск легче делать (всё в одной статейке) и данные записывать можно одним запросом, а не разные запросы под каждый тип. Так, смотри, и инъекций поуменьшится :-)
Заведи одну таблицу СТАТЬИ ... добавь еще одно поле "тип статьи" и по нему разделяй моддинг/секреты/и т.п.
Для полной красоты сделай вторую таблицу "ТИПЫ СТАТЕЙ" с полями номер типа и название типа.
Так и поиск легче делать (всё в одной статейке) и данные записывать можно одним запросом, а не разные запросы под каждый тип. Так, смотри, и инъекций поуменьшится :-)
Спустя 14 минут, 26 секунд (3.11.2008 - 19:49) Sylex написал(а):
если ты все же проверяешь id - is_numeric() и strlen() - если одним условием, то убедись, что соединяешь их логическим И, т.е.
а не
а вообще рекомендую intval()
http://ru2.php.net/intval
Цитата
if ( is_numeric() && strlen() )
или
if ( is_numeric() and strlen() )
или
if ( is_numeric() and strlen() )
а не
Цитата
if ( is_numeric() || strlen() )
или
if ( is_numeric() or strlen() )
или
if ( is_numeric() or strlen() )
а вообще рекомендую intval()
http://ru2.php.net/intval
Спустя 41 минута, 10 секунд (3.11.2008 - 20:30) kirik написал(а):
Цитата(Krist_ALL)
1. В статьях защита хорошая! Не верю шо там баг. Гоните 100% т.к там проверка ид на ис_нумерик и стрлен!
2. Пощадили? Да иди ты знаешь куда со своей пощадой! Я те устрою
2. Пощадили? Да иди ты знаешь куда со своей пощадой! Я те устрою
1 - если люди узнают твой логин и пароль из базы, то наверное защита не такая и хорошая
2 - это ты зря так..
Цитата(Sephiroth_Lukaw)
люди вроде помогают
=)С сайтом можно сделать что хочешь, начиная от того, что создать исполняемый файл, заканчивая тем, что можно угнать домен, и хостинг
![wink.gif](html/emoticons/wink.gif)
Чирс!
Спустя 2 часа, 55 минут, 18 секунд (3.11.2008 - 23:25) Adil написал(а):
Цитата
1. Очень зол что взломали мой сайт.
Какой я нехороший. сейчас меня будет мучать совесть...
Цитата
2. Думаете я не находил инекций на других сайтах?
Главное искать их не чужих сайтах, а на своих...
Цитата
3. Узнали мой пароль эт плохо, но вы смогли сделать что то с сайтом? Ан нет.
Целью не было что-то сделать с сайтом, целью было показать тебе, что нефига кричать про дебилов, которые не проверяют входящие данные, в то время как на своем сайте есть такие дыры
Цитата
4. Если не трудна, напишите мне в аську 422271188 и раскажите баги сайта...
После твоего тона общения. не думаю что тебе начнут помогать...бойся чтобы и аську не угнали =)
Цитата
5. Кто спрашивал про дебила? Сам дебил
Значит ты признаешь...
Цитата
6. Модератор? Я не модер, эт ток написана, а у мну прав нет шоб удалить тему
И слава богу...
Цитата
1. В статьях защита хорошая! Не верю шо там баг. Гоните 100% т.к там проверка ид на ис_нумерик и стрлен!
И в статьях и в новостях... вопросик: ты на каждых разделах по другому проверяешь входящие данные,из-за уровня секретности?! )))
Цитата
2. Пощадили? Да иди ты знаешь куда со своей пощадой! Я те устрою
А можно узнать что ты устроишь?) Аж заинтриговал)))
Спустя 5 часов, 28 минут, 54 секунды (4.11.2008 - 04:54) Alchemist написал(а):
Цитата(Sylex @ 3.11.2008, 18:49) [snapback]53526[/snapback]
Слава Б-гу !! я не один такой !!! ураааа !!!
Спустя 5 часов, 3 минуты, 31 секунда (4.11.2008 - 09:58) AndryG написал(а):
Хочу извинится перед ApuktaChehov. Мы Вашу ветку превратили в откровенный мусорник.
Давайте вернемся к Вашему вопросу :-) У Вас получилось реализовать защиту?
Давайте вернемся к Вашему вопросу :-) У Вас получилось реализовать защиту?
Спустя 2 часа, 10 минут, 7 секунд (4.11.2008 - 12:08) Krist_ALL написал(а):
1. Я сейчас на даче и поэтому немогу исправить инекцию
2. Я сейчас на даче и немогу вам ничего сделать. Интересно что сделаю? Попрошу чуточку терпения.
3. 3ащата была нацелена на символ ' а вот про -1 я совсем забыл, непонимаю как иф(стрлен>7) ечо ерор мог не сработать...
4. Угонют асю? Попробуй
5. Цель-показать баги? А я просил лесть в мой сайт? Сказали бы шо мол есть и все,так вы ещж и структуру пошли глядеть
6. Мой тон? Я бы посмотрел на твой тон када я информатион_схема выложилбы на форум.
7. Советуете про устройства таблиц?я тож посоветую вам сделать аплоад аватарок, сменить двиг форума и сменить модеров/админов
2. Я сейчас на даче и немогу вам ничего сделать. Интересно что сделаю? Попрошу чуточку терпения.
3. 3ащата была нацелена на символ ' а вот про -1 я совсем забыл, непонимаю как иф(стрлен>7) ечо ерор мог не сработать...
4. Угонют асю? Попробуй
5. Цель-показать баги? А я просил лесть в мой сайт? Сказали бы шо мол есть и все,так вы ещж и структуру пошли глядеть
6. Мой тон? Я бы посмотрел на твой тон када я информатион_схема выложилбы на форум.
7. Советуете про устройства таблиц?я тож посоветую вам сделать аплоад аватарок, сменить двиг форума и сменить модеров/админов
Спустя 43 минуты, 11 секунд (4.11.2008 - 12:51) Sephiroth_Lukaw написал(а):
Цитата("Krist_ALL")
иф(стрлен>7) ечо ерор мог не сработать...
Мне уже интересно на исходник взглянуть... Спустя 1 день, 4 часа, 56 минут, 45 секунд (5.11.2008 - 17:48) md5 написал(а):
Krist_ALL, а чем тебя не устраивает двиг форума, модеры и админы?
хуй уже с этими аватарками... кстати, которые мы только что включили, чтобы девачки не плакали
хуй уже с этими аватарками... кстати, которые мы только что включили, чтобы девачки не плакали
Спустя 1 час, 47 минут, 22 секунды (5.11.2008 - 19:35) Krist_ALL написал(а):
итак, я вернулся в москву, где у меня есть инет и
1. Баги исправил // проверьте, хрен че сделаете теперь
2. Какого хрена вы мою подпись постоянна редактите
3. Кто был причастен к иекции на моем сайте, тот ответит
1. Баги исправил // проверьте, хрен че сделаете теперь
2. Какого хрена вы мою подпись постоянна редактите
3. Кто был причастен к иекции на моем сайте, тот ответит
Спустя 2 минуты, 41 секунда (5.11.2008 - 19:38) NRG написал(а):
Krist_ALL, убрал с тебя права модера.... ну тя нах..... ты какойто ебнутый и неадекватный....
Спустя 4 минуты, 21 секунда (5.11.2008 - 19:42) Krist_ALL написал(а):
NRg, а они у меня были? одно название на индексе! пытаючь чета удалить или поднять пишет нет прав!
сам мудильник. Заметь , я тя первый не окорблял
Бомж штоли?
Идиотская подпись
Цитата
ты какойто ебнутый и неадекватный....
сам мудильник. Заметь , я тя первый не окорблял
Цитата
буду кодить за еду
Бомж штоли?
![biggrin.gif](html/emoticons/biggrin.gif)
Спустя 16 минут, 44 секунды (5.11.2008 - 19:59) Xakep написал(а):
корашная тема получилась...
Спустя 11 минут, 31 секунда (5.11.2008 - 20:10) NRG написал(а):
Цитата
Заметь , я тя первый не окорблял
Цитата
и сменить модеров/админов
Спустя 1 минута, 56 секунд (5.11.2008 - 20:12) Krist_ALL написал(а):
Вот настоящий флудер - NRG! в его сообщение только 2 цитаты а своего текста нет.. улет
Спустя 4 минуты, 24 секунды (5.11.2008 - 20:17) NRG написал(а):
еще одно возмущение и в БАН
Спустя 8 минут, 16 секунд (5.11.2008 - 20:25) kirik написал(а):
Цитата(Krist_ALL)
1. Баги исправил // проверьте, хрен че сделаете теперь
хуево исправил
Цитата(Krist_ALL)
3. Кто был причастен к иекции на моем сайте, тот ответит
Цитата(NRG)
ты какойто ебнутый и неадекватный....
тебе показали на твои ошибки, скажи "спасибо" и поправь. Нехер базар разводить
Цитата(Krist_ALL)
Цитата(NRG)
ты какойто ебнутый и неадекватный....
Заметь , я тя первый не окорблялЭто было не оскорбление, а констатация факта.
Цитата(Krist_ALL)
Бомж штоли?
Идиотская подпись
![biggrin.gif](html/emoticons/biggrin.gif)
....
Krist_ALL, не обижайся, но ты дурак.
Цитата
Это было не оскорбление, а констатация факта.
Спустя 28 секунд (5.11.2008 - 20:25) Alchemist написал(а):
НЕТ !!! Зачем убивать курицу с золотыми яйцами ?!
в конце-концов смех продлевает жизнь ![smile.gif](html/emoticons/smile.gif)
![smile.gif](html/emoticons/smile.gif)
![smile.gif](html/emoticons/smile.gif)
Спустя 26 секунд (5.11.2008 - 20:26) Krist_ALL написал(а):
да пожалуйста. забанишь, пожалеешь. народ, сами ведь первые напали
Спустя 13 часов, 34 минуты, 40 секунд (6.11.2008 - 10:01) sergeiss написал(а):
С удовольствием прочитал всю тему
Поржал немало
Если будет продолжение - я схожу за чипсами и за попкорном, чтоб приятнее было наблюдать.
Вот что меня поражает... Тут, на форуме, зачастую люди специально просят потестить их сайты на предмет взломоустойчивости. И говорят "спасибо" за любую подсказку. А тут подсказали-показали, чтоб исправить мог (для твоей же пользы!!!), а в ответ - матюги, угрозы и вообще полная неадекватность.
"Я фигею, дорогая редакция".
![smile.gif](html/emoticons/smile.gif)
![clapping.gif](html/emoticons/clapping.gif)
Цитата(Krist_ALL @ 5.11.2008, 20:26) [snapback]53660[/snapback]
да пожалуйста. забанишь, пожалеешь. народ, сами ведь первые напали
Вот что меня поражает... Тут, на форуме, зачастую люди специально просят потестить их сайты на предмет взломоустойчивости. И говорят "спасибо" за любую подсказку. А тут подсказали-показали, чтоб исправить мог (для твоей же пользы!!!), а в ответ - матюги, угрозы и вообще полная неадекватность.
"Я фигею, дорогая редакция".
Спустя 35 минут, 5 секунд (6.11.2008 - 10:36) md5 написал(а):
да что там исправлять?
весь сайт один сплошной баг!
Krist_ALL, лечись
весь сайт один сплошной баг!
Krist_ALL, лечись
Спустя 5 минут, 39 секунд (6.11.2008 - 10:41) Krist_ALL написал(а):
Вот именно я непросил тестить мой сайт! а вы ешо зачемто начали тестить. сами лечитесь от своих багов
Спустя 15 минут, 5 секунд (6.11.2008 - 10:56) sergeiss написал(а):
Цитата(Krist_ALL @ 6.11.2008, 10:41) [snapback]53684[/snapback]
Вот именно я непросил тестить мой сайт! а вы ешо зачемто начали тестить. сами лечитесь от своих багов
Тоже, что ли, пойти потренироваться в хакерстве на твоем сайте?
![smile.gif](html/emoticons/smile.gif)
А ты вот представь, что кто-то "вообще левый" это сделает? И "накроется твой сайт медным тазом". И вообще. Люди не тестить начали твой сайт, а решили "потренироваться на кошках". Но потом пожалели "кошку", и решили дать ей шанс. А кошка, ничего не поняв, вытаращила глаза, выставила когти и шипит на всех окружающих
![smile.gif](html/emoticons/smile.gif)
Спустя 1 час, 2 минуты, 56 секунд (6.11.2008 - 11:59) Krist_ALL написал(а):
Цитата
А ты вот представь, что кто-то "вообще левый" это сделает? И "накроется твой сайт медным тазом". И вообще. Люди не тестить начали твой сайт, а решили "потренироваться на кошках". Но потом пожалели "кошку", и решили дать ей шанс. А кошка, ничего не поняв, вытаращила глаза, выставила когти и шипит на всех окружающих
Про кошку супппер!
тренироваться я разве запрещаю? тренеруйтесь сколько влезет. я и так замучился фиксить все.. дыр то много .
Спустя 34 минуты, 58 секунд (6.11.2008 - 12:34) AndryG написал(а):
У тебя письмо в личке лежит.
Вот еще дырка http://mobile-proff.ru/sitenews/news_show....s%20limit%209,1 -- исправляй
Вот еще дырка http://mobile-proff.ru/sitenews/news_show....s%20limit%209,1 -- исправляй
Спустя 15 минут, 19 секунд (6.11.2008 - 12:50) Krist_ALL написал(а):
все пофиксил
Спустя 34 минуты, 20 секунд (6.11.2008 - 13:24) AndryG написал(а):
Уважаемый, эта тема не про Вас и Ваш сайт -- создавайте тему в нужном разделе .. и Вам покажут еще ;-)
Спустя 27 минут, 20 секунд (6.11.2008 - 13:51) ApuktaChehov написал(а):
Привет всем!
AndryG я к сожалению не могу сейчас заниматься защитой, тут мне приперла суперсрочная работа, так что пока это я отлажу. Как только выделится время, я продолжу эту тему.
Спасибо большое!
P.S. В ближайшие 2 недели, точно попробую вашу функцию.
AndryG я к сожалению не могу сейчас заниматься защитой, тут мне приперла суперсрочная работа, так что пока это я отлажу. Как только выделится время, я продолжу эту тему.
Спасибо большое!
P.S. В ближайшие 2 недели, точно попробую вашу функцию.
Спустя 58 минут, 3 секунды (6.11.2008 - 14:49) Sylex написал(а):
Предлагаю завести форум "Курилка", или "Йумаристы", или нет.... "Вошедшие в историю"!!
Тема реально ржачная
.
Krist_ALL, ужми еще понты !!!
Ты сайт закрыл что-ли??![acute.gif](html/emoticons/acute.gif)
Тренировки окончены!
![clapping.gif](html/emoticons/clapping.gif)
Тема реально ржачная
![laugh.gif](html/emoticons/laugh.gif)
Krist_ALL, ужми еще понты !!!
Ты сайт закрыл что-ли??
![acute.gif](html/emoticons/acute.gif)
Тренировки окончены!
Спустя 1 час, 35 минут, 48 секунд (6.11.2008 - 16:25) Krist_ALL написал(а):
Ща работает тока раздел новости,остальные я зыкрыл до завта,завтра открою.
Ща работает тока раздел новости,остальные я зыкрыл до завта,завтра открою.
Ща работает тока раздел новости,остальные я зыкрыл до завта,завтра открою.
Спустя 4 часа, 18 минут, 37 секунд (6.11.2008 - 20:44) Sephiroth_Lukaw написал(а):
Да это пиар ход сайта, я уверен, почти. xD
Спустя 2 часа, 9 минут, 29 секунд (6.11.2008 - 22:53) Adil написал(а):
Ребята вы видите что натворили?!!! У бедного парня уже паранойя: =))))
Цитата
В целях безопасности восстановление производится администратором в ручном режиме. Для восстановления пароля свяжитесь с администратором
_____________