информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяАтака на InternetSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / web building
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Не стоит материться, даже если твои аргументы исчерпаны )) 01.03.11 16:13  Число просмотров: 6472
Автор: kstati <Евгений Борисов> Статус: Elderman
<"чистая" ссылка>
> На хуя мне это нужно и что ты пытался мне доказать написав
> это? Что знаком с регэкспами?
Псих ты )) не видишь очевидного.
Это простая проверка
Аналогично как при вводе цифрового пин-кода слеши и прочая ерись не нужны. Достаточно убедиться, что введены именно цифры.

> Не стоит писать всякую хрень. Включи разум, перечитай тебе
> написанное и подумай что именно тебе писали.
Как я тебя понимаю ))

> Ога, рекомендуемая тобой библиотека есть везде )))
Это сырец, который легко внедряется в проект. Настройки сервера не имеют значения.
<web building>
Опять вопрос по PHP+SQL 09.12.10 04:17  
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
Наткнулся на одном форуме на вот такой пост:

inferno26
$result = mysql_query("SELECT * FROM `users` WHERE email = '".htmlspecialchars(addslashes($_POST['email'])."'AND md5 = '".htmlspecialchars(addslashes($_POST['md5'])."'");
согласен так лучше???


Нет.
Сначала два раза addslashes, а затем уже htmlspecialchars

Зачем вообще нужно обрабатывать md5 и для чего ему советуют два раза использовать addslashes перед заменой тегов?
Кстати, сразу не отметил, кроме функций со слешами нужно ещё и разум врубать - фильтровать с умом. Та же md5 - это набор hex-цифр длиной 32 символа. В итоге один regexp решит стоит ли вообще отрабатывать запрос или нет. 27.02.11 19:46  
Автор: kstati <Евгений Борисов> Статус: Elderman
Отредактировано 27.02.11 19:49  Количество правок: 2
<"чистая" ссылка>
> $result = mysql_query("SELECT * FROM `users` WHERE email =
> '".htmlspecialchars(addslashes($_POST['email'])."'AND md5 =
> '".htmlspecialchars(addslashes($_POST['md5'])."'");
> согласен так лучше???

В качестве теста может подойти такой код.
if (!preg_match("^[0-9a-f]{32}$i",$_POST['md5']) {
trow("mistaked md5 data, possible cracker's attack");
}

Ну, а далее уж без запарок помещать переменную в запрос.
Ну, если врубать разум, то ответ на мой первый вопрос такой:... 27.02.11 23:07  
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
Ну, если врубать разум, то ответ на мой первый вопрос такой: потому, что md5 не вычисляется на стороне сервера, а получается от клиента ;))))
Суть верна, реализация оно ) На фиг слешить hex-последовательность? ) правильнее проверить, а действительно ли переменная имеет ожидаемый тип ) Равно как и цифровые id слешить не надо. Надо убеждаться, что они цифровые, либо приводить к цифре: $id+=0; 28.02.11 19:26  
Автор: kstati <Евгений Борисов> Статус: Elderman
<"чистая" ссылка>
Ага, вот так и появляются на свет продукты - будущие жертвы SQL-инъекций и прочих шалостей ) 01.03.11 00:03  
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
Ошибаешься, сударь. sql-инъекцию забабаешься здесь внедрять ;) А вот фанатеть от слешей - это нелепо. 01.03.11 01:19  
Автор: kstati <Евгений Борисов> Статус: Elderman
Отредактировано 01.03.11 01:31  Количество правок: 2
<"чистая" ссылка>
Кроме того за слеши и квотирование ПЕРЕД внесением в бд прибивать надо. Если данные верны - то они и храниться должны так, как и были введены.
Попробуй-ка организовать редактирование статей при использовании addslashes, html_specialchars ДО внесеня в бд.
А текст бусть будет из одной строки:
"Tom & Jery"

отслешил, да заквотировал - получил:
\&quot;Tom &amp; Jery \&quot;


Что б подобную гадость отдать в поле редактирования textarea придётся убирать квотирование вручную. И как раз на этом этапе можно легко накосячить. Особенно, если значение Magic_Quotes отличается от сервера к серверу.

Более правильный вариант:
1. проверка входных данных на соответствие ожидаемому типу.
2. избегание прямого размещения переменных в запросах. Мне понравилось решение Котерова DbSimple, как реализация функционала pg_prepare
3. Отсутствие искажения данных вносимых в бд
4. Качественная отработка вывода данных полученных из бд.

Пара примеров проверки типов:
<?
$_POST['id']="I'm c00l haxor"
$id = $_POST['id'];
$id+=0;
echo $id;
?>

---

Аналогично - проверка на заранее безопасный тип данных [0-9a-f]{32}
if (!preg_match("^[0-9a-f]{32}$i",$_POST['md5']) {
trow("mistaked md5 data, possible cracker's attack");
} 

---

разумеется в sql-запрос переменные подставляться должны после квотирования необходимого для используемой субд. касательно mysql решение в лоб - mysql_real_escape, решение с удобствами - уже описал.
У меня ощущение, что ты только закончил читать Котерова (или Котерова с Костаревым?8) ) и спешишь рассказать все, что там узнал ;) 01.03.11 02:07  
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
Зато я чётко вижу, что ты заблуждаешься не только в кодинге, но и в суждениях о других :) 01.03.11 15:59  
Автор: kstati <Евгений Борисов> Статус: Elderman
<"чистая" ссылка>
Ну, с кодингом у тебя, вроде, нормально, а вот о чем писал я - ты так и не понял ) 01.03.11 17:34  
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
Так что, не знаю как с первым, но во втором мы видимо коллеги... ;)
Не обязательно парсить всё подряд. 01.03.11 00:56  
Автор: Den <Denis> Статус: The Elderman
<"чистая" ссылка>
Если тебе по get или post пришли данные, которые ты должен интерпретировать как целое число, то слешить и проверять не обязательно, достаточно прогнать через функцию приобразования строки в целое число и хранить до востребования как переменную типа integer.
Смотря для чего. 28.02.11 01:31  
Автор: Den <Denis> Статус: The Elderman
<"чистая" ссылка>
Если не ошибаюсь, POST передает данные от клиента к серверу в защищенном канале. Соответственно, пароль можно передавать через POST не прогоняя его через MD5. Но хранить пароль в базе регистрации "открытым текстом" это, мягко говоря, моветон. И в этом случае, MD5 ,будет вычисляться только на сервере.
Ошибаешься. Если ты не включил защищенный режим, то браузер... 28.02.11 02:27  
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
> Если не ошибаюсь, POST передает данные от клиента к серверу
> в защищенном канале. Соответственно, пароль можно
Ошибаешься. Если ты не включил защищенный режим, то браузер за тебя его сам включать не будет
> передавать через POST не прогоняя его через MD5. Но хранить
> пароль в базе регистрации "открытым текстом" это, мягко
> говоря, моветон. И в этом случае, MD5 ,будет вычисляться
> только на сервере.
Это все до %опы, тем более что MD5 необратима, и нам не известно считали ее для пароля или порнофильма. В общем случае, запись $_POST['md5'] обещает, что форма имела текстовое поле с именем 'md5' и ее содержимое было передано методом $_POST. Но, на то, что это так, мы только надеемся. На самом деле, как всегда, предполагаем худшее: не было никакой формы, а пришедший в запросе набор данных сформировал злой кулхацкер А Си Сяй, возжелавший наше все.
Не много не в тему, про использование Md5 для создания динамических ключей-авторизации и о DbSimple 28.02.11 19:23  
Автор: kstati <Евгений Борисов> Статус: Elderman
<"чистая" ссылка>
> > Если не ошибаюсь, POST передает данные от клиента к
> серверу
> > в защищенном канале. Соответственно, пароль можно
> Ошибаешься. Если ты не включил защищенный режим, то браузер
> за тебя его сам включать не будет
> > передавать через POST не прогоняя его через MD5. Но
> хранить
> > пароль в базе регистрации "открытым текстом" это,
> мягко
> > говоря, моветон. И в этом случае, MD5 ,будет
> вычисляться
> > только на сервере.
> Это все до %опы, тем более что MD5 необратима, и нам не
> известно считали ее для пароля или порнофильма. В общем
> случае, запись $_POST['md5'] обещает, что форма имела
> текстовое поле с именем 'md5' и ее содержимое было передано
> методом $_POST. Но, на то, что это так, мы только надеемся.
> На самом деле, как всегда, предполагаем худшее: не было
> никакой формы, а пришедший в запросе набор данных
> сформировал злой кулхацкер А Си Сяй, возжелавший наше все.
Угу, тем более, что реализаций md5-js уже до фени, а хозяин сайта (кодер как минимум) должен знать какой тип переменной используется фронт-эндом.

И небольшое увеличение защищённости можно делать как... md5(md5(password)+captcha) то есть использовать сессионные ключи. В результате на сервере может храниться хэш пароля, а сравниваться он будет с повторным хэшем источника и соли.

при установке пароля в бд вносится md5(pass) = md5pass
в форме авторизации висит и каптча, на сервер возвращается, например,
$_POST['checksum'] = md5(md5(pass)+captha)
сервер зная md5pass легко проверит правильность связки пароль + каптча например так.

select id from users where md5(md5pass+'$captcha') == '$checksum';

К слову сказать, мне оч нравится идея sqlite да postgree с подготовкой запросов. Тот же pg_prepare:
$result = pg_prepare($dbconn, "my_query", 'SELECT * FROM shops WHERE name = $1');
$result = pg_execute($dbconn, "my_query", array("Joe's Widgets"));

---

Аналогичные плюшки разработаны и для Mysql. На вскидку - Котеров написал неплохую либу. Грех не воспользоваться ею. Разумеется, прочитав исходники да описание многие вещички станут на свои места.

DbSimple
Ну-ну... Блаженны верующие ;) Хозяин уверен, что знает.И,... 01.03.11 00:01  
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
> > > Если не ошибаюсь, POST передает данные от клиента
> к
> > серверу
> > > в защищенном канале. Соответственно, пароль можно
> > Ошибаешься. Если ты не включил защищенный режим, то
> браузер
> > за тебя его сам включать не будет
> > > передавать через POST не прогоняя его через MD5.
> Но
> > хранить
> > > пароль в базе регистрации "открытым текстом" это,
> > мягко
> > > говоря, моветон. И в этом случае, MD5 ,будет
> > вычисляться
> > > только на сервере.
> > Это все до %опы, тем более что MD5 необратима, и нам
> не
> > известно считали ее для пароля или порнофильма. В
> общем
> > случае, запись $_POST['md5'] обещает, что форма имела
> > текстовое поле с именем 'md5' и ее содержимое было
> передано
> > методом $_POST. Но, на то, что это так, мы только
> надеемся.
> > На самом деле, как всегда, предполагаем худшее: не
> было
> > никакой формы, а пришедший в запросе набор данных
> > сформировал злой кулхацкер А Си Сяй, возжелавший наше
> все.
> Угу, тем более, что реализаций md5-js уже до фени, а хозяин
> сайта (кодер как минимум) должен знать какой тип переменной
> используется фронт-эндом.
Ну-ну... Блаженны верующие ;) Хозяин уверен, что знает.И, пока данные шлет его фронт-энд, это так и есть. Но фронт-энд может сварганить кто-то другой и поэтому и приходится извращаться с фильтрацией, экранированием, проверками... Кстати, вместо md5 лучше использовать sha1.
>
> И небольшое увеличение защищённости можно делать как...
> md5(md5(password)+captcha) то есть использовать сессионные
> ключи. В результате на сервере может храниться хэш пароля,
Должен. Не "может", а должен. Пароли в чистом или обратимо зашифрованном виде уже даже мелкософт лет десять-двенадцать как хранить перестал.
> а сравниваться он будет с повторным хэшем источника и соли.
Что есть такое "соли"?
>
> при установке пароля в бд вносится md5(pass) = md5pass
> в форме авторизации висит и каптча, на сервер возвращается,
> например,
> $_POST['checksum'] = md5(md5(pass)+captha)
> сервер зная md5pass легко проверит правильность связки
> пароль + каптча например так.
>
> select id from users where md5(md5pass+'$captcha') ==
> '$checksum';
>
> К слову сказать, мне оч нравится идея sqlite да postgree с
> подготовкой запросов. Тот же pg_prepare:
>
$result = pg_prepare($dbconn, "my_query",> 'SELECT * FROM shops WHERE name = $1');
> $result = pg_execute($dbconn, "my_query", array("Joe's
> Widgets"));

---
>
> Аналогичные плюшки разработаны и для Mysql. На вскидку -
> Котеров написал неплохую либу. Грех не воспользоваться ею.
> Разумеется, прочитав исходники да описание многие вещички
> станут на свои места.
Рекомендую забить на нее и использовать mysqli. Там есть все и даже больше.
О чём вы, сударь? Фильтрация и экранирование - это крайние... 01.03.11 01:28  
Автор: kstati <Евгений Борисов> Статус: Elderman
Отредактировано 01.03.11 16:17  Количество правок: 4
<"чистая" ссылка>
> Ну-ну... Блаженны верующие ;) Хозяин уверен, что знает.И,
> пока данные шлет его фронт-энд, это так и есть. Но
> фронт-энд может сварганить кто-то другой и поэтому и
> приходится извращаться с фильтрацией, экранированием,
> проверками...
О чём вы, сударь? Фильтрация и экранирование - это крайние меры. Правильное решение - проверка на соответствие ожидаемому типу данных. Нормальный пользователь просто не сможет внедрить в поле md5 что-либо, а ненормальных - в баню.

А ну-ка показывай пример как можно прорвать этот шаблон! ;)
if (!preg_match("^[0-9a-f]{32}$i",$_POST['md5']) {
trow("mistaked md5 data, possible cracker's attack");
} 

---


> Кстати, вместо md5 лучше использовать sha1.
Читай md5, как "некий удобный алгоритм хеширования, который в принципе не имеет значения". Не принципиально - сути не меняет.

>> В результате на сервере может храниться хэш пароля,
> Должен. Не "может", а должен. Пароли в чистом или обратимо
> зашифрованном виде уже даже мелкософт лет десять-двенадцать
> как хранить перестал.
>> а сравниваться он будет с повторным хэшем источника и соли.
> Что есть такое "соли"?
Не стоит рвать предложение:
Уточняю чуть другими словами.
Сервер может хранить хэш, а сравнение проводить, используя простую функцию f(hash+salt)
Солью в данном случае отлично служит капча.
В качестве f может быть что угодно. На вскидку всё тот же md5
Нет смысла в необратимо-хэшированном пароле если хэш одинаковый от сессии к сессии.


> Рекомендую забить на нее и использовать mysqli. Там есть
> все и даже больше.
Не думаю, что это решение идеально, я предпочитаю писать не привязываясь к конкретным расширениям, ибо далеко не везде они могут быть.

И да, разумеется в php были баги типа внедрения нулевого символа в строку - подобные фишки нужно помнить, но не стоит заморачиваться на них. Не надо быть параноиком, а просто иметь в виду в каком из мест надо обратить внимание. При использовании функций типа pg_prepare эта проблема уходит в никуда.
Про нуль можно почитать, например, по ссылке.

null-byte-injection
У меня ощущение, что отвечающие читают только знакомые слова, не напрягаясь понять написанное в целом. 01.03.11 02:02  
Автор: Fighter <Vladimir> Статус: Elderman
Отредактировано 01.03.11 02:02  Количество правок: 1
<"чистая" ссылка>
> > Ну-ну... Блаженны верующие ;) Хозяин уверен, что
> знает.И,
> > пока данные шлет его фронт-энд, это так и есть. Но
> > фронт-энд может сварганить кто-то другой и поэтому и
> > приходится извращаться с фильтрацией, экранированием,
> > проверками...
> О чём вы, сударь? Фильтрация и экранирование - это крайние
О проверках, уважаемый! И о фильтрации с экранированием при необходимости.
> меры. Правильное решение - проверка на соответствие
> ожидаемому типу данных. Нормальный пользователь просто не
> сможет внедрить в поле md5 что-либо, а ненормальных - в
> баню.
Слушай, ты вообще о чем? Чего ты с этим md5 носишься как дурень с писаной торбой... Злоумышленник не будет использовать веб-форму на твоем сайте и/или сервере. Ему твой фронт-энд до %опы если только он не позволяет использовать известные злоумышленнику дыры.
>
> А ну-ка показывай пример как можно прорвать этот шаблон! ;)
>
> if (!preg_match("^[0-9a-f]{32}$i",$_POST['md5']) {
> trow("mistaked md5 data, possible cracker's attack");
> } 

---
На хуя мне это нужно и что ты пытался мне доказать написав это? Что знаком с регэкспами?
>
>
> > Кстати, вместо md5 лучше использовать sha1.
> Читай md5, как "некий удобный алгоритм хеширования, который
> в принципе не имеет значения". Не принципиально - сути не
> меняет.
>
> >> В результате на сервере может храниться хэш
> пароля,
> > Должен. Не "может", а должен. Пароли в чистом или
> обратимо
> > зашифрованном виде уже даже мелкософт лет
> десять-двенадцать
> > как хранить перестал.
> >> а сравниваться он будет с повторным хэшем
> источника и соли.
> > Что есть такое "соли"?
> Не стоит рвать предложение:
Не стоит писать всякую хрень. Включи разум, перечитай тебе написанное и подумай что именно тебе писали.
> Уточняю чуть другими словами.
> Сервер может хранить хэш, а сравнение проводить, используя
> простую функцию f(hash+salt)
> Солью в данном случае отлично служит капча.
> В качестве f может быть что угодно. На вскидку всё тот же
> md5
> Нет смысла в необратимо-хэшированном пароле если хэш
> одинаковый от сессии к сессии.
>
>
> > Рекомендую забить на нее и использовать mysqli. Там
> есть
> > все и даже больше.
> Не думаю, что это решение идеально, я предпочитаю писать не
> привязываясь к конкретным расширениям, ибо далеко не везде
> они могут быть.
Ога, рекомендуемая тобой библиотека есть везде )))
>
> И да, разумеется в php были баги типа внедрения нульевого
> символа в строку - подобные фишки нужно помнить, но не
> стоит заморачиваться на них. Не надо быть параноиком, а
> просто иметь в каком из мест надо обратить внимание. При
> использовании функций типа pg_prepare эта проблема уходит в
> никуда.
> Про нуль можно почитать, например, по ссылке.
Не стоит материться, даже если твои аргументы исчерпаны )) 01.03.11 16:13  
Автор: kstati <Евгений Борисов> Статус: Elderman
<"чистая" ссылка>
> На хуя мне это нужно и что ты пытался мне доказать написав
> это? Что знаком с регэкспами?
Псих ты )) не видишь очевидного.
Это простая проверка
Аналогично как при вводе цифрового пин-кода слеши и прочая ерись не нужны. Достаточно убедиться, что введены именно цифры.

> Не стоит писать всякую хрень. Включи разум, перечитай тебе
> написанное и подумай что именно тебе писали.
Как я тебя понимаю ))

> Ога, рекомендуемая тобой библиотека есть везде )))
Это сырец, который легко внедряется в проект. Настройки сервера не имеют значения.
Тут обязательно станешь психом)) Я же кучу постов пытаюсь... 01.03.11 17:47  
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
> > На хуя мне это нужно и что ты пытался мне доказать
> написав
> > это? Что знаком с регэкспами?
> Псих ты )) не видишь очевидного.
Тут обязательно станешь психом)) Я же кучу постов пытаюсь объяснить, что мне это все и так понятно, а вопрос про md5 был вызван только тем, что я не заметил $_POST и решил, что автор вопроса обрабатывает результат вызова md5(), и его зачем-то в этом поддерживают.
> Это простая проверка
> Аналогично как при вводе цифрового пин-кода слеши и прочая
> ерись не нужны. Достаточно убедиться, что введены именно
> цифры.
Полностью с тобой согласен, но копипастерам лень это делать, им проще вызвать addslashes().
>
> > Не стоит писать всякую хрень. Включи разум, перечитай
> тебе
> > написанное и подумай что именно тебе писали.
> Как я тебя понимаю ))
Ох, надеюсь )
>
> > Ога, рекомендуемая тобой библиотека есть везде )))
> Это сырец, который легко внедряется в проект. Настройки
> сервера не имеют значения.
тебе обработку md5 приводят в качестве хорошего и наглядного... 01.03.11 02:38  
Автор: Den <Denis> Статус: The Elderman
<"чистая" ссылка>
> Слушай, ты вообще о чем? Чего ты с этим md5 носишься как
> дурень с писаной торбой... Злоумышленник не будет
> использовать веб-форму на твоем сайте и/или сервере. Ему
> твой фронт-энд до %опы если только он не позволяет
> использовать известные злоумышленнику дыры.

тебе обработку md5 приводят в качестве хорошего и наглядного примера. Если бы ты до конца дофтыкал тему парсинга параметров get/post ты бы понял, что на одном прослешивании свет клином не сошелся. Существует еще несколько способов корректно обработать полученные данные и поместить их в БД без риска выполнить sql инъекцию. А там пусть хоть telnet в роли фронт-энда - пофигу!

> > А ну-ка показывай пример как можно прорвать этот
> шаблон! ;)
> >
> > if (!preg_match("^[0-9a-f]{32}$i",$_POST['md5']) {
> > trow("mistaked md5 data, possible cracker's attack");
> > } 

---
> На хуя мне это нужно и что ты пытался мне доказать написав
> это? Что знаком с регэкспами?

никак не пойму - толи ты реально протормаживаешь, толи прикидываешься.
если ты используешь приведенный шаблон, то хоть десять sql инъекций засунь - нифига у тебя не выйдет. При этом, ничего прослешивать не требуется.
Ты дурак или прикидываешься? Нахуя мне этот пример и твои объяснения про md5? 01.03.11 10:36    Штраф: 20 [Den, Fighter]
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
ИМХО, дурак: умные уже давно поняли, что изначально я просто не обратил внимания, что md5 передается скрипту, а не генерится им. А про двойное прослешивание мне уже давно ответили
1  |  2 >>  »  




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach