* Re: [devel] [git update] packages/katrin: heads/master
@ 2007-07-13 6:12 ` Slava Semushin
2007-07-13 8:06 ` Denis Klimov
0 siblings, 1 reply; 9+ messages in thread
From: Slava Semushin @ 2007-07-13 6:12 UTC (permalink / raw)
To: ALT Devel discussion list
2007/7/12, Denis Klimov <zver / altlinux.org>:
Это опять я :)))
[...]
> --- a/src/db/db-service/katrin-db-service.c
> +++ b/src/db/db-service/katrin-db-service.c
> @@ -2,28 +2,39 @@
> #include "katrin-db-service.h"
> #include "db/dl-db.h"
> #include "utils/utils.h"
> +
> +#define PROG katrin-db-service
Я не нашел где бы это использовалось. Если оно не используется, то
предлагаю удалить. А если и использовать, то как строку, в таком
случае katrin-db-service нужно заключить в кавычки, я думаю.
[...]
> + * katrin-db-service <action> <params>
> + *
> + * katrin-db-service clean YYYY-MM-DD YYYY-MM-DD [--nullcost]
> + * katrin-db-service sum YYYY-MM-DD YYYY-MM-DD <user|src_port|dst_port|src_addr|dst_addr|proto>
> + *
> + */
> int main (int argc, char **argv) {
> #include "conf/conf-katrin.inc"
> #include "db/dl-db.inc"
> - int find_all = 0;
> - int i=0;
> - for (i = 1; i < argc; i++) {
> - if (strcmp(argv[i], "--clean") == 0)
> - find_all = 1;
> - else
> - break;
> + int find = 0;
> + int num_rows = 0;
> + if (strcmp(argv[1], "clean") == 0) {
> + debug("enter into clean section");
> + if (argc - 1 < 2) {
> + err("Usage with clean action: katrin-db-service clean YYYY-MM-DD YYYY-MM-DD [--nullcost]");
> + return 1;
> + }
> + num_rows = cleanstats(argv[2],argv[3]);
> + info("DB clean: %d rows deleted",num_rows);
> }
> -
> -
> - if (argc - i != 2) {
> - err("Two arguments required: a startdate and enddate. Date format YYYY-MM-DD [HH-MM-SS]\n");
> - return 1;
> + if (strcmp(argv[1], "sum") == 0) {
> + debug("enter into sum section");
> + if (argc - 1 < 3) {
> + err("Usage with sum action: katrin-db-service YYYY-MM-DD YYYY-MM-DD <user|src_port|dst_port|src_addr|dst_addr|proto>");
> + return 1;
> + }
> + num_rows = sumstats(argv[2],argv[3],argv[4]);
> + info("DB sum: %d rows sum");
> }
>
> - int num_rows = cleanstats(argv[i],argv[i+1]);
> -
> - info("DB Clean: %d rows deleted",num_rows);
> -
> return 0;
> }
>
> diff --git a/src/db/db.h b/src/db/db.h
> index 6cc318b..92d6caf 100644
> --- a/src/db/db.h
> +++ b/src/db/db.h
> @@ -16,6 +16,7 @@ void setblockuser (int userid);
> void storestat (struct userTraffInfo traffik,int accuracy_stat);
> struct filterslist *tariffid2filters (int tariffid);
> int cleanstats(char *startdate, char *enddate);
> +int sumstats(char *startdate, char *enddate, char *opts);
> struct userslist *tariffid2users(int tariffid);
> #endif
>
> diff --git a/src/db/dl-db.h b/src/db/dl-db.h
> index 21fc5a1..bb15118 100644
> --- a/src/db/dl-db.h
> +++ b/src/db/dl-db.h
> @@ -22,6 +22,7 @@ void (*setblockuser)(int userid);
> void (*storestat) (struct userTraffInfo traffik,int accuracy_stat);
> struct filterslist *(*tariffid2filters) (int tariffid);
> int (*cleanstats)(char *startdate, char *enddate);
> +int (*sumstats)(char *startdate, char *enddate, char *opts);
> struct userslist *(*tariffid2users)(int tariffid);
> #endif
>
> diff --git a/src/db/dl-db.inc b/src/db/dl-db.inc
> index 08fa47a..f952dac 100644
> --- a/src/db/dl-db.inc
> +++ b/src/db/dl-db.inc
> @@ -16,4 +16,5 @@ setblockuser = dlsym(handleLibDB,"setblockuser");
> storestat = dlsym(handleLibDB,"storestat");
> tariffid2filters = dlsym(handleLibDB,"tariffid2filters");
> cleanstats = dlsym(handleLibDB,"cleanstats");
> +sumstats = dlsym(handleLibDB,"sumstats");
> tariffid2users = dlsym(handleLibDB,"tariffid2users");
> diff --git a/src/db/libkatrin-db-mysql.c b/src/db/libkatrin-db-mysql.c
> index 6dfa17d..0871c92 100644
> --- a/src/db/libkatrin-db-mysql.c
> +++ b/src/db/libkatrin-db-mysql.c
> @@ -321,6 +321,7 @@ dbDisconnectMySQL(&mysqllink);
> return ret_p;
> }
>
> +// DB service functions
> int cleanstats(char *startdate, char *enddate) {
> debug("cleanstats");
> MYSQL mysqllink;
> @@ -341,6 +342,43 @@ int cleanstats(char *startdate, char *enddate) {
> return num_rows;
> }
>
> +int sumstats(char *startdate, char *enddate, char *opts) {
[...]
> + if (mysql_real_query(&mysqllink,query,(unsigned int) strlen(query)) !=0 ) {
[...]
> + if (mysql_real_query(&mysqllink,query,(unsigned int) strlen(query)) !=0 )
[...]
Здесь и в других файлах я вижу, что вы всегда приводите третий
аргумент ф-ции mysql_real_query() к типу unsigned int.
Вопрос: зачем?
strlen() возвращает тип size_t, который, насколько мне известно, на 32
битах и есть не что иное как unsigned int. Даже если и приводить
результат strlen() то уж точно не к unsigned int, а к unsigned long,
который и ожидает ф-ция mysql_real_query(), согласно описанию на
http://dev.mysql.com/doc/refman/5.0/en/mysql-real-query.html.
[...]
Вот ваш код:
> int main (int argc, char **argv) {
[...]
> + if (strcmp(argv[1], "sum") == 0) {
> + debug("enter into sum section");
> + if (argc - 1 < 3) {
> + err("Usage with sum action: katrin-db-service YYYY-MM-DD YYYY-MM-DD <user|src_port|dst_port|src_addr|dst_addr|proto>");
> + return 1;
> + }
> + num_rows = sumstats(argv[2],argv[3],argv[4]);
> + info("DB sum: %d rows sum");
> }
[...]
А теперь посмотрим на тело ф-ции sumstat():
> +int sumstats(char *startdate, char *enddate, char *opts) {
[...]
> + sprintf(query,"select userid,sum(bytes),sum(cost) from stats WHERE storetime >= '%s' AND storetime <= '%s' group by userid;",startdate,enddate);
> + debug("query: %s",query);
> + if (mysql_real_query(&mysqllink,query,(unsigned int) strlen(query)) !=0 ) {
> + err("MySQL select query error: %s",mysql_error(&mysqllink));
> + }
[...]
> +}
Вы что-нибудь видите подозрительное в коде? Я да.
Например, использование sprintf() вместо более безопасного snprintf().
Но это цветочки... В данном коде допускается *ОЧЕНЬ* серьёзная ошибка
в безопасности. Вы используете в SQL-запросе данные, полученные от
пользователя, при этом не проверяя их!!!
Немного по теме: ru.wikipedia.org/wiki/Инъекция_SQL
Совет в данном случае: добавить ф-цию, к примеру, validate_date(),
которая бы получала указатель на строку и проверяла дата это или нет.
И потом везде где ожидается дата проверять аргументы. В качестве
примера можете посмотреть как проверяется дата в ф-ции
is_string_confirm_to_format() в OpenFM:
http://svn.berlios.de/viewcvs/openfm/trunk/src/common.c?rev=75&view=markup
P.S. BTW, char *startdate, char *enddate, char *opts в ф-ции
sumstats() не изменяются, а это значит что их неплохо было бы объявить
как const.
--
+ Slava Semushin | slava.semushin @ gmail.com
+ ALT Linux Team | php-coder @ altlinux.ru
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] [git update] packages/katrin: heads/master
2007-07-13 6:12 ` [devel] [git update] packages/katrin: heads/master Slava Semushin
@ 2007-07-13 8:06 ` Denis Klimov
2007-07-13 8:20 ` Slava Semushin
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Denis Klimov @ 2007-07-13 8:06 UTC (permalink / raw)
To: ALT Devel discussion list
On Fri, 13 Jul 2007 13:12:14 +0700 Slava Semushin wrote:
> Вы используете в SQL-запросе данные, полученные от
> пользователя, при этом не проверяя их!!!
>
> Немного по теме: ru.wikipedia.org/wiki/Инъекция_SQL
>
> Совет в данном случае: добавить ф-цию, к примеру, validate_date(),
> которая бы получала указатель на строку и проверяла дата это или нет.
> И потом везде где ожидается дата проверять аргументы.
Да, я знаю об этом, пока я хочу сначала реализовать основные функции
биллинга, а уже потом, к релизу, добавить подобные проверки.
Если у кого то возникнет желаение закодить это раньше - смержу его коммиты.
Но все равно спасибо.
--
Denis Klimov
zver
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] [git update] packages/katrin: heads/master
2007-07-13 8:06 ` Denis Klimov
@ 2007-07-13 8:20 ` Slava Semushin
2007-07-13 8:59 ` [devel] UA: при разработке сетевого ПО _надо_ думать _сперва_ про безопасность! Michael Shigorin
2007-07-16 10:43 ` [devel] [git update] packages/katrin: heads/master Eugene Prokopiev
2 siblings, 0 replies; 9+ messages in thread
From: Slava Semushin @ 2007-07-13 8:20 UTC (permalink / raw)
To: ALT Devel discussion list
13.07.07, Denis Klimov<kliden / km.ru> написал(а):
[...]
> Да, я знаю об этом, пока я хочу сначала реализовать основные функции
> биллинга, а уже потом, к релизу, добавить подобные проверки.
Мммм.. это порочная практика... признаться, я и сам так несколько раз
делал. Но! Я в таком случае расставлял комментарии типа:
// XXX: check this value proper
или
// TODO: add sctrict checks for all parameters
В таком случае позже будет легче найти, что и где надо не забыть
подправить. Также в этом случае видно, что автор знает что есть
проблемы и намерен иметь с этим делом, только чуть позже.
> Но все равно спасибо.
Предупреждён -- значит вооружен. ;)
--
+ Slava Semushin | slava.semushin @ gmail.com
+ ALT Linux Team | php-coder @ altlinux.ru
^ permalink raw reply [flat|nested] 9+ messages in thread
* [devel] UA: при разработке сетевого ПО _надо_ думать _сперва_ про безопасность!
2007-07-13 8:06 ` Denis Klimov
2007-07-13 8:20 ` Slava Semushin
@ 2007-07-13 8:59 ` Michael Shigorin
2007-07-13 9:07 ` Denis Klimov
2007-07-14 22:21 ` Денис Смирнов
2007-07-16 10:43 ` [devel] [git update] packages/katrin: heads/master Eugene Prokopiev
2 siblings, 2 replies; 9+ messages in thread
From: Michael Shigorin @ 2007-07-13 8:59 UTC (permalink / raw)
To: ALT Devel discussion list
On Fri, Jul 13, 2007 at 02:06:28PM +0600, Denis Klimov wrote:
> > Вы используете в SQL-запросе данные, полученные от
> > пользователя, при этом не проверяя их!!!
> > Немного по теме: ru.wikipedia.org/wiki/Инъекция_SQL
> Да, я знаю об этом, пока я хочу сначала реализовать основные
> функции биллинга, а уже потом, к релизу, добавить подобные
> проверки.
Если бы так строили автомобили, то некоторые об отсутствии
тормозов узнавали бы только купив "рабочую" машину и подъезжая
к перекрёстку.
Денис, не надо плодить код, который не продуман хотя бы по уже
известным Вам проблемам безопасности _заранее_. Вы очень обяжете
этим как админов, которым с ним работать (if any), так и
репутацию команды.
> Если у кого то возникнет желаение закодить это раньше -
> смержу его коммиты. Но все равно спасибо.
Поверьте на слово, с таким отношением проще попасть в чей-нить
чёрный список "эти пакеты не устанавливаются в принципе или без
ручной проверки/пересборки". К сожалению, такие списки у ряда
участников команды и системных администраторов существуют и не
от хорошей жизни.
Например, от автора phpNuke код я не приму на хостинг ни за какие
коврижки, потому что он сперва лепил функциональность на скору
коленку, а вот о безопасности задумался не тогда, когда можно
было сдизайнить общий слой фильтрации запросов, которые идут
к базе, а тогда, когда было проще выкинуть всю эту бодягу и всем,
кто её упоминал, выливать на голову ведёрко холодной воды.
Вы ж не хотите прослыть таким "разработчиком", надеюсь?
PS: вообще блажь писать веб-интерфейсы на C должна быть очень
сильно обоснована как требованиями к характеристикам, так и
уже наличествующей квалификацией разработчика. Пишите лучше
на перле или хотя бы поищите библиотеки для cgi processing
и sql input sanitization, никакого смысла топтать все грабли
самостоятельно здесь нет.
--
---- WBR, Michael Shigorin <mike@altlinux.ru>
------ Linux.Kiev http://www.linux.kiev.ua/
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] UA: при разработке сетевого ПО _надо_ думать _сперва_ про безопасность!
2007-07-13 8:59 ` [devel] UA: при разработке сетевого ПО _надо_ думать _сперва_ про безопасность! Michael Shigorin
@ 2007-07-13 9:07 ` Denis Klimov
2007-07-13 9:31 ` Anton Farygin
2007-07-14 22:21 ` Денис Смирнов
1 sibling, 1 reply; 9+ messages in thread
From: Denis Klimov @ 2007-07-13 9:07 UTC (permalink / raw)
To: ALT Devel discussion list
On Fri, 13 Jul 2007 11:59:55 +0300 Michael Shigorin wrote:
> Денис, не надо плодить код, который не продуман хотя бы по уже
> известным Вам проблемам безопасности _заранее_. Вы очень обяжете
> этим как админов, которым с ним работать (if any), так и
> репутацию команды.
Пока этот биллинг я не отправляю в Сизиф, и не агетирую ставить его на
рабочий сервер, потому что он еще не готов, а еще в процессе
разработки, на git.alt выкладываю как раз для того чтобы мне что то
подсказали, или даже помогли.
> PS: вообще блажь писать веб-интерфейсы на C должна быть очень
> сильно обоснована как требованиями к характеристикам
Веб интерфейс у меня на PHP.
--
Denis Klimov
zver
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] UA: при разработке сетевого ПО _надо_ думать _сперва_ про безопасность!
2007-07-13 9:07 ` Denis Klimov
@ 2007-07-13 9:31 ` Anton Farygin
2007-07-13 9:49 ` Denis Klimov
0 siblings, 1 reply; 9+ messages in thread
From: Anton Farygin @ 2007-07-13 9:31 UTC (permalink / raw)
To: ALT Devel discussion list
Denis Klimov wrote:
> On Fri, 13 Jul 2007 11:59:55 +0300 Michael Shigorin wrote:
>
>> Денис, не надо плодить код, который не продуман хотя бы по уже
>> известным Вам проблемам безопасности _заранее_. Вы очень обяжете
>> этим как админов, которым с ним работать (if any), так и
>> репутацию команды.
>
> Пока этот биллинг я не отправляю в Сизиф, и не агетирую ставить его на
> рабочий сервер, потому что он еще не готов, а еще в процессе
> разработки, на git.alt выкладываю как раз для того чтобы мне что то
> подсказали, или даже помогли.
>
>> PS: вообще блажь писать веб-интерфейсы на C должна быть очень
>> сильно обоснована как требованиями к характеристикам
>
> Веб интерфейс у меня на PHP.
Денис, немного не в тему, но напомните пожалуйcта, где посмотреть по
биллингу документацию.
Меня интересует, в первую очередь, архитектура. В частности - каким
образом планируется организовать работу с netflow, коммутаторами (SNMP)
и pppoe/pptp.
Rgds,
Anton
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] UA: при разработке сетевого ПО _надо_ думать _сперва_ про безопасность!
2007-07-13 9:31 ` Anton Farygin
@ 2007-07-13 9:49 ` Denis Klimov
0 siblings, 0 replies; 9+ messages in thread
From: Denis Klimov @ 2007-07-13 9:49 UTC (permalink / raw)
To: ALT Devel discussion list
> Денис, немного не в тему, но напомните пожалуйcта, где посмотреть по
> биллингу документацию.
>
> Меня интересует, в первую очередь, архитектура. В частности - каким
> образом планируется организовать работу с netflow, коммутаторами (SNMP)
> и pppoe/pptp.
>
> Rgds,
> Anton
Все что есть - тут.
http://katrin.sf.net
Модуль получения информации о трафике есть пока netflow (работает)
Модуль авторизации клиента есть пока pptp (работал, но с недавнего времени перестал собираться в Сизифе и бранче)
В выходные как раз планировал занятся devel документацией
http://katrin.distance.ru/wiki/devel
--
Denis Klimov
zver
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] UA: при разработке сетевого ПО _надо_ думать _сперва_ про безопасность!
2007-07-13 8:59 ` [devel] UA: при разработке сетевого ПО _надо_ думать _сперва_ про безопасность! Michael Shigorin
2007-07-13 9:07 ` Denis Klimov
@ 2007-07-14 22:21 ` Денис Смирнов
1 sibling, 0 replies; 9+ messages in thread
From: Денис Смирнов @ 2007-07-14 22:21 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 1160 bytes --]
On Fri, Jul 13, 2007 at 11:59:55AM +0300, Michael Shigorin wrote:
MS> Денис, не надо плодить код, который не продуман хотя бы по уже
MS> известным Вам проблемам безопасности _заранее_. Вы очень обяжете
MS> этим как админов, которым с ним работать (if any), так и
MS> репутацию команды.
Добавлю к этому -- биллинг задача-то на самом деле тривиальнейшая.
Решается любым пьяным студентом на коленке чуть ли не за неделю. Только
вот не нужен такой биллинг совершенно никому.
А вот биллинг, который сможет корректно обрабатывать различные нештатные
ситуации, быть безопасным, и при всем этом ещё и функциональным (прошу
обратить внимание на порядок требований) нужен, и их нетути.
Плодить очередную поделку смысла нет, а вот вложитсья в написание
действительно надежного кода -- смысл есть.
Даже маленький модуль для биллинга, но написаный _хорошо_ -- востребован.
Биллинг уровня кропного ISP который будет "иногда" падать или ломаться --
не нужен никому.
--
С уважением, Денис
http://freesource.info
----------------------------------------------------------------------------
Тяжела и неказиста
Жизнь простого программиста
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] [git update] packages/katrin: heads/master
2007-07-13 8:06 ` Denis Klimov
2007-07-13 8:20 ` Slava Semushin
2007-07-13 8:59 ` [devel] UA: при разработке сетевого ПО _надо_ думать _сперва_ про безопасность! Michael Shigorin
@ 2007-07-16 10:43 ` Eugene Prokopiev
2 siblings, 0 replies; 9+ messages in thread
From: Eugene Prokopiev @ 2007-07-16 10:43 UTC (permalink / raw)
To: ALT Devel discussion list
Denis Klimov пишет:
> On Fri, 13 Jul 2007 13:12:14 +0700 Slava Semushin wrote:
>
>> Вы используете в SQL-запросе данные, полученные от
>> пользователя, при этом не проверяя их!!!
>>
>> Немного по теме: ru.wikipedia.org/wiki/Инъекция_SQL
>>
>> Совет в данном случае: добавить ф-цию, к примеру, validate_date(),
>> которая бы получала указатель на строку и проверяла дата это или нет.
>> И потом везде где ожидается дата проверять аргументы.
>
> Да, я знаю об этом, пока я хочу сначала реализовать основные функции
> биллинга, а уже потом, к релизу, добавить подобные проверки.
в таком случае сделайте хотя бы заглушки, которые якобы должны
проверять, а реализуйте их потом - таким образом вы и себе сбережете
кучу времени.
--
С уважением,
Прокопьев Евгений
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2007-07-16 10:43 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-07-13 6:12 ` [devel] [git update] packages/katrin: heads/master Slava Semushin
2007-07-13 8:06 ` Denis Klimov
2007-07-13 8:20 ` Slava Semushin
2007-07-13 8:59 ` [devel] UA: при разработке сетевого ПО _надо_ думать _сперва_ про безопасность! Michael Shigorin
2007-07-13 9:07 ` Denis Klimov
2007-07-13 9:31 ` Anton Farygin
2007-07-13 9:49 ` Denis Klimov
2007-07-14 22:21 ` Денис Смирнов
2007-07-16 10:43 ` [devel] [git update] packages/katrin: heads/master Eugene Prokopiev
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git