git на примере менеджера пользователей sqiud
|
|
eXceed | Дата: Пятница, 26.08.2011, 13:21 | Сообщение # 1 |
Генералиссимус
Группа: Гости
Сообщений: 5466
Статус: Offline
| Решил опробовать git на примере простенького менеджера пользователей sqiud с ncsa авторизацией. http://code.google.com/p/simple-squid-ncsa-users-manager/
Нужно было как то добавлять/удалять пользователей в SQUID. Самое простое решение пришло на php с процедурной парадигмой. Может кому пригодится. Третий день php быдлокодер - кун.
bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
|
|
| |
zhylik | Дата: Суббота, 27.08.2011, 12:42 | Сообщение # 2 |
Подполковник
Группа: Гости
Сообщений: 146
Статус: Offline
| Если ты выложил скрипт в общее пользование, то мне кажется лучше хотя бы readme приложить и в нем дать советик как ограничить доступ к скрипту (хотя бы ссылку на какую-нибудь статью про htaccess + htpasswd). Ато любой, кто будет знать ссылку на запуск скрипта через браузер сможет править пользователей сквида и выполнять любые команды на сервере от имени апача, передав в качестве пароля например 'пароль && команда' -- system() такое осилит выполнить мне кажется, а ввод ты не фильтруешь (http://ru2.php.net/manual/en/function.system.php около восклицательных знаков)...
+ Регексп $yoba = "/" . $user_name . "/i" отработает положительно (при поиске 'user') на всех строках типа: 123456user:123456789 user123456:123456 12user23:132465 132456:user123 и т.п. надо что то типа "/^$username\:/i" использовать
+ в php есть много милых вещей типа: - foreach ($array as $key => $val) {} - $array[] = $val -- добавляет новое значение в конец (не надо тянуть $array[$i++]=$val) - строки типа '123:456' можно парсить так (если уверен в структуре строки) -- list($user, $pass) = explode(":", $str) - функции get_user_passwords() и get_user_names() можно объединить, возвращая хеш или массив массивов: Code $users = array(); начало цикла чтения ... list($user, $pass) = explode(":", $str); $users[$user] = $pass; ... конец цикла чтения return $users
и потом читать foreach ($users as $user => $pass) { echo $user .":". $pass; }
utf-8 кодировку можно передавать прямо в head-секции index.html: Code <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
потом, если просто запустить скрипт squiduseradd.php из браузера (а не через сабмит формы), то он запустится и $_POST будет пустой, соответственно, неизвестно как скрипт отреагирует
Ваня Жилин ("zhylik" читается как жулик))
|
|
| |
Expert | Дата: Суббота, 27.08.2011, 12:45 | Сообщение # 3 |
Главный
Группа: Администраторы
Сообщений: 6114
Статус: Offline
| eXceed, не шутите с инструментами, пожалуйста.
Слушайте zhylik'а.
Блог декана
Уведомление для прессы и всех пользователей сети интернет: администрация форума может не заметить вовремя нецензурных слов и других, возможно, оскорбительных выражений/картинок/прочих материалов. Если вы заметили косвенный либо прямой факт оскорбления кого бы то ни было, пожалуйста, сообщите об этом администратору форума для принятия решения об удалении/модерировании соответствующего сообщения. Полный текст уведомления см. здесь.
|
|
| |
eXceed | Дата: Суббота, 27.08.2011, 14:39 | Сообщение # 4 |
Генералиссимус
Группа: Гости
Сообщений: 5466
Статус: Offline
| zhylik
Quote лучше хотя бы readme приложить и в нем дать советик как ограничить доступ к скрипту.
Конечно. Хотя это должен сам админ решать (я просто в конфигурационном файле виртуального хоста разрешил только моей машине ходить туда), но тем не менее readme сделаю.
Quote надо что то типа "/^$username\:/i" использовать
Надо, запилю более грамотный re. Хотя это не обязательно, т.к. ncsa авторизация четко регламентирована.
Quote Ато любой, кто будет знать ссылку на запуск скрипта через браузер сможет править пользователей сквида и выполнять любые команды на сервере от имени апача, передав в качестве пароля например 'пароль && команда' -- system() такое осилит выполнить мне кажется, а ввод ты не фильтруешь (http://ru2.php.net/manual/en/function.system.php около восклицательных знаков)...
Не уверен, что в данном случае получится что то выполнить, скорее htpasswd плюнет в stderr о некорректности введенных данных, хотя надо проверять. Тем не менее о фильтрации ввода задумывался в пятницу, но решил отложить на понедельник.
Quote - foreach ($array as $key => $val) {} - $array[] = $val -- добавляет новое значение в конец (не надо тянуть $array[$i++]=$val) - строки типа '123:456' можно парсить так (если уверен в структуре строки) -- list($user, $pass) = explode(":", $str) - функции get_user_passwords() и get_user_names() можно объединить, возвращая хеш или массив массивов:
Не знал про существование foreach() в php. В бидоне for foo in yoba эквивалентен foreach(), а for foo in range(yoba) эквивалентен обычному for. Делал по аналогии с C++, т.к. php унаследовал от него многое. Ага, массивы поправлю, делал по аналогии с C++ из-за нулевых знаний php. За explode() спасибо, очень годная функция.
Ну я сам не доволен тем, что пока не получилось сделать это элегантно. Брать и что то учить? Лень, да и времени нет. Взял справочник по функциям на php.su и начал пробовать, т.к. делать надо было очень быстро, иначе простой в работе образовался. Что недопустимо в моей нынешней ситуации. Все равно почти все перепиливать надо.
Есть какой нибудь мануал по php наподобие Dive into Python? Ну чтоб идеологию языка передал? Бидоновская концепция здесь не работает, чувствуются корни C++, но идеология C++ здесь работает плохо, так как язык ушел в сторону от классических вещей.
Quote utf-8 кодировку можно передавать прямо в head-секции index.html
Зачем, когда оно же передается веб сервером в соответствии с настройкой в .htaccess?
Алсо в php есть аналог map из STL C++ или кортежей бидона?
bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
Сообщение отредактировал eXceed - Суббота, 27.08.2011, 15:01 |
|
| |
eXceed | Дата: Суббота, 27.08.2011, 14:41 | Сообщение # 5 |
Генералиссимус
Группа: Гости
Сообщений: 5466
Статус: Offline
| Expert
Quote eXceed, не шутите с инструментами, пожалуйста.
Не совсем понял, что вы имели ввиду?
Слушаю же, т.к. не обладаю достаточными навыками и знаниями в веб разработке. Эх, мне бы обратно, на бидон или плюсы. А жизнь то вот как повернулась, что пришлось браться за php.
bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
|
|
| |
zhylik | Дата: Суббота, 27.08.2011, 17:01 | Сообщение # 6 |
Подполковник
Группа: Гости
Сообщений: 146
Статус: Offline
| Quote (eXceed) Не уверен, что в данном случае получится что то выполнить, скорее htpasswd плюнет в stderr о некорректности введенных данных, хотя надо проверять. Тем не менее о фильтрации ввода задумывался в пятницу, но решил отложить на понедельник. Помоему system() отрабатывает как командная строка. и если в нее прописать system('mkdir aaa && mkdir bbb') выполнятся обе команды. А в твоем случае -- отработает корректно и htpasswd и команда, переданная в пароле. Думается мне..
Quote (eXceed) Есть какой нибудь мануал по php наподобие Dive into Python? Хз, я очень мало знаю о php. Начинал со статей каких-то, потом пользовался примерами из какого-то справочника по PHP, в котором были все функции описаны с примерами (дамп php.net в виде CHM). Я просто работал в основном с Drupal, а там знаний PHP особых не нужно...
Quote (eXceed) Зачем, когда оно же передается веб сервером в соответствии с настройкой в .htaccess? Просто обычно кодировка контролируется на уровне CMS (или скриптов, выводящих HTML).
Quote (eXceed) Алсо в php есть аналог map из STL C++ или кортежей бидона? В пхп есть только массивы... Если не ошибаюсь, то в качестве ключей могут использоваться только строки или числа. Про кортежи - х3 что это такое. Я когда-то питон хотел поизучать, но подзабил.
Ваня Жилин ("zhylik" читается как жулик))
|
|
| |
Expert | Дата: Суббота, 27.08.2011, 18:36 | Сообщение # 7 |
Главный
Группа: Администраторы
Сообщений: 6114
Статус: Offline
| Quote (eXceed) Не совсем понял, что вы имели ввиду?
Насколько я понял первый пост zhylik'а, вы создали что-то квазиопасное .
Блог декана
Уведомление для прессы и всех пользователей сети интернет: администрация форума может не заметить вовремя нецензурных слов и других, возможно, оскорбительных выражений/картинок/прочих материалов. Если вы заметили косвенный либо прямой факт оскорбления кого бы то ни было, пожалуйста, сообщите об этом администратору форума для принятия решения об удалении/модерировании соответствующего сообщения. Полный текст уведомления см. здесь.
|
|
| |
eXceed | Дата: Суббота, 27.08.2011, 19:16 | Сообщение # 8 |
Генералиссимус
Группа: Гости
Сообщений: 5466
Статус: Offline
| zhylik
Quote Помоему system() отрабатывает как командная строка. и если в нее прописать system('mkdir aaa && mkdir bbb') выполнятся обе команды. А в твоем случае -- отработает корректно и htpasswd и команда, переданная в пароле. Думается мне..
Я проверю в понедельник. Но не думается мне, что-то выполнится, т.к. у меня апач заперт в chroot вместе с htpasswd. Ну это в моей конфигурации, а так, таки да, в общем случае думаю, что уязвимость на лицо. Протестирую - обязательно отпишусь. Поставлю голый дебиан, конфигурация апача и пхп по умолчанию, ну и на своей конфигурации проверю.
Quote Просто обычно кодировка контролируется на уровне CMS (или скриптов, выводящих HTML).
Считаю, что это удобно лишь в случае CMS, а тут инструмент исключительно для меня и моего помощника. Хотя опять же, веб сервер может настроен быть так, что .htaccess нельзя использовать.
В общем виде про кортежи. http://ru.diveintopython.org/odbchelper_tuple.html
Expert
Ну, ничего в этом опасного нет. Скрипт делается в меру моих познаний php. Hello, world на нем сделал в эту среду =). Естественно, что после C++, python сложно думать немного иначе, хоть и почти так же. Многих вещей в нем еще просто не знаю, не знаю его возможностей. И вот перед вами сила Open Source. Сила в том, что мы можем общаться, подсказывать друг другу. Вести разработку эффективней в разы. Пускай, что по факту я один делаю, но подсказки zhylik'а, особенно explode() позволят сократить количество кода. Вообщем Open Source это добро =) ---- TODO: 1. Сократить размеры кода. 2. Ввести дополнительные поля, для сохранения информации о пользователе. Буду работать без поддержки БД. Поэтому ожидается n'ое количество быдлокода :3 3. Некоторые опции для изменения настроек NCSA авторизации. 4. Интеграция с sarg для ведения статистики. ХЗ пока как сделать, но попробуем.
bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
Сообщение отредактировал eXceed - Суббота, 27.08.2011, 19:22 |
|
| |
tersus | Дата: Воскресенье, 28.08.2011, 20:46 | Сообщение # 9 |
Генералиссимус
Группа: Гости
Сообщений: 2831
Статус: Offline
| eXceed, Почему Git? Почему не Меркуриал?
Судьба даёт нам меньше, чем мы хотим, поэтому если просить мало, можно не получить вообще ничего.
|
|
| |
eXceed | Дата: Воскресенье, 28.08.2011, 21:48 | Сообщение # 10 |
Генералиссимус
Группа: Гости
Сообщений: 5466
Статус: Offline
| Честно говоря, что меркуриал еще даже и не трогал. Просто сейчас среди быдлокодеров git популярен, я и решил попробовать.
bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
|
|
| |
eXceed | Дата: Понедельник, 29.08.2011, 11:26 | Сообщение # 11 |
Генералиссимус
Группа: Гости
Сообщений: 5466
Статус: Offline
| Выпустил апдейт. Оптимизация кода + фильтрация вводимых данных пользователем. Доступно здесь: http://code.google.com/p/simple-squid-ncsa-users-manager/ либо через git.
bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
|
|
| |
eXceed | Дата: Вторник, 30.08.2011, 13:53 | Сообщение # 12 |
Генералиссимус
Группа: Гости
Сообщений: 5466
Статус: Offline
| Решил переписать с использованием sqlite. Обычные файлы - все равно, что пердолится в жопу.
bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
|
|
| |
tersus | Дата: Вторник, 30.08.2011, 15:46 | Сообщение # 13 |
Генералиссимус
Группа: Гости
Сообщений: 2831
Статус: Offline
| eXceed, Давай на MongoDB замути всю канитель. А затем апликацию напиши под iOS. App Store сделает тебя состоятельным человеком.
Судьба даёт нам меньше, чем мы хотим, поэтому если просить мало, можно не получить вообще ничего.
|
|
| |
eXceed | Дата: Вторник, 30.08.2011, 16:57 | Сообщение # 14 |
Генералиссимус
Группа: Гости
Сообщений: 5466
Статус: Offline
| Завтра поясню по хардкору, с точки зрения быдлокодера почему файлы = консоль-пердоль.
bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
|
|
| |
eXceed | Дата: Среда, 31.08.2011, 15:46 | Сообщение # 15 |
Генералиссимус
Группа: Гости
Сообщений: 5466
Статус: Offline
| Выложил в git промежуточную версию с поддержкой sqlite. Версия еще не рабочая. Не весь функционал реализован, т.к. почти весь день изучал sqlite + SQL. Можете смотреть для ознакомления. Решил проблему с безопасностью, т.к. вообще не буду использовать htpasswd, а буду кодировать налету. Пока надо запилить удаление из базы + синхронизацию базу с файлом. Быдлокод можно взять здесь: http://code.google.com/p/simple-squid-ncsa-users-manager/
Файлы это пердоль по той простой причине, что их надо обрабатывать построчно и вообще ебли вагон =( А идея была хороша.
bda-expert.ru — это система форумов, где можно общаться быстро и свободно, где любая точка зрения имеет право на жизнь.
Сообщение отредактировал eXceed - Среда, 31.08.2011, 16:06 |
|
| |