информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetГде водятся OGRыЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft начинает тестирование... 
 Новые санкции против российского... 
 Столлман возвращается в FSF 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / web building
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Не стоит материться, даже если твои аргументы исчерпаны )) 01.03.11 16:13  Число просмотров: 3521
Автор: 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-2021 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach