Как выбрать программиста для сайта?

dkameleon
На сайте с 09.12.2005
Offline
386
#131
tysson:
можно ли места кода под sql инъекции использовать для снижения стоимости программирования? Я плачу хорошие деньги, на выходе получаю не качественный код. Ведь насколько я понимаю, такие вещи должны быть написаны правильно в базовом варианте кода.
Или программер может сказать, что убрать такие вещи стоит еще столько то денег?

1. возможно, проверка входных параметров проводится где-то в другом месте, хоть это уже сродни говнокодингу. потенциальные уязвимости - ещё не уязвимости.

2. вы договаривались о работоспособности кода или о качестве кода? я подозреваю, что вам будет сложно сбить ставку на основании поверхностного анализа в этой теме.

мне кажется проще от прогера добиться полного соответствия работы с тз,

затем договорться, что вы на стороне сделаете аудит и он все уязвимости и баги исправит.

лично я все свои баги исправляю бесплатно. думаю, у многих фриланс-прогеров аналогичный подход.

Дизайн интерьера (http://balabukha.com/)
S
На сайте с 23.05.2004
Offline
315
#132
dkameleon:
затем договорться, что вы на стороне сделаете аудит и он все уязвимости и баги исправит.

А чем аудиторы могут подтвердить свою квалификацию ? Я фактически любой код могу повернуть как в хорошую, так и в плохую сторону. Этот топик, этому пример. Кому верить ?

Ну и попросите аудитора принять ответственность - сольется как и любой "гарант", банально перемалывающий процент от денежной суммы.

Нужен качественный код - x10 к сумме, на аналитику, рефакторинг и еще кучу подобных вещей. Только качественный код и рабочий код - сильно отличаются в своем направлении.

Это просто подпись.
TA
На сайте с 12.06.2009
Offline
116
TiA
#133
Оптимизайка:
Это ж джумла, что вы хотите тут увидать, паттерны проектирования?

Справедливости ради замечу, что в более-менее актуальных версиях Joomla активно используется MVC.

По поводу самого кода.

Самая основная его проблема - это смешивание контроллера (логики приложения), модели (код для работы с данными) и представления. Это сильно ухудшает читаемость кода и часто приводит к появлению ошибок.

Вторая существенная ошибка, за которую также нужно бить по пальцам, - это игнорирование встроенного функционала Joomla, а также недостаточное внимание к входящим данным.

Возьмем, например, получение ID продукта:


$data = JRequest::get('get');
$product_id = $data['prod_id'];

Казалось бы, все тут хорошо, но нет. Здесь сразу две проблемы:

1. Если свойства 'prod_id' нет, то мы получим критическую ошибку, которая может поломать весь скрипт. Это же касается и $task = $data['task'];

2. Тип значения 'prod_it' вообще никак не проверяется. Это потенциальная дыра в безопасности, которая позволяет произвести SQL-инъекцию. Да, при вызове метода JRequest::get все свойства проходят очистку от тегов, но все равно остается вероятность, что вместо нужной переменной будет передано что-то не то.

Решить эти проблемы достаточно просто:


$data = JRequest::get('get');

if (!empty($data['prod_id'])) {
$product_id = intval($data['prod_id']);
}

Можно пойти еще дальше и сделать это с использованием встроенного функционала JInput:


$jinput = JFactory::getApplication()->input;
$product_id = $jinput->get('prod_id', 0, 'int');

Еще одна проблема - это написание SQL-запросов как есть. В Joomla есть полноценный инструментарий по работе с базой данных. Он описан в документации. Примеры использования можно найти в моделях. Выглядит это примерно так:


// Initialize variables.
$db = $this->getDbo();
$query = $db->getQuery(true);

// Create the base select statement.
$query->select('*')->from($db->quoteName('#__content_rating'))->where($db->quoteName('content_id') . ' = ' . (int) $pk);

// Set the query and load the result.
$db->setQuery($query);

// Check for a database error.
try
{
$rating = $db->loadObject();
}
catch (RuntimeException $e)
{
JError::raiseWarning(500, $e->getMessage());

return false;
}

В общем, представленный код работать он в общем-то будет, но в будущем скорее-всего придется править ошибки и больше сил тратить на его поддержку.

Профессиональная верстка и разработка сайтов на WordPress (http://www.maultalk.com/topic139110s0.html)
dkameleon
На сайте с 09.12.2005
Offline
386
#134
Stek:
А чем аудиторы могут подтвердить свою квалификацию ? Я фактически любой код могу повернуть как в хорошую, так и в плохую сторону. Этот топик, этому пример. Кому верить ?
Ну и попросите аудитора принять ответственность - сольется как и любой "гарант", банально перемалывающий процент от денежной суммы.

ну если вы аудитору предложите ставку программиста, то конечно сольется.

аудит вообще может быть проведен программистом схожего уровня.

тестеры и манагеры, делающие коде-ревью не обязательно на голову выше прогера, просто это механизм двойного контроля.

Вон, TiA практически сделал ревью с фиксами. Бесплатно.

SeVlad
На сайте с 03.11.2008
Offline
1609
#135
nesterdron:
Допустим, задача Одна.
1 прогер, накодырит 100 строчек.
2 прогер, вложится в 10 строчек.

Оба кода рабочие, но у 1 прогера "плохой" код)

Рукалицо..

Тот же if можно записать одной строкой, а можно и в 5.

Что, первый будет качественнее?

Или вот всего одна строчка:

eval(base64_decode("ZXQZhbChiYXNlNjRfZGVjb2RlKCJKSGc1V0VkRlFXNWFOV0U5SjJKaGMyVTJORjlrWldOdlpHVW5Pdz09IikpO2V2YW6imFzZTY0X2RlY29kZSgiSkhnNFNVZDRiVU53WTJROUozTjBjbXhsYmljNyIpKTskbz0keDlYR0VBblo1YSgkbhS9yk7JkHhWQWpXNFJqT2c9JHg4SUd4bUNwY2QoJG8pO2ZvcigkeGRxYWFqdVhpMT0wOyR4ZDHFhYWp1WGkxdPCR4VkFqVzRSak9nOyR4ZHFhYWp1WGkxKyspeyR4Q0JCUTlPVkxrLj1jaHIob3JkKCRvWyR4ZVHFhYWp1WGkxXSleNik7fWV2YWwoJHhDQkJROU9WTGspOw=="));

:))

Код битый. Просто пример "хорошего кода". Расшифрованный на выходе имеет не менее 300 строк

Эт я к к тому, кол-во строк никак не говорит о квалификации. Может просто человек любит наглядность.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
F2
На сайте с 14.10.2015
Offline
12
#136

Пожалуй, лучший способ- найти знакомого прогера или по отзывам знакомых. Так все молодцы, а вот реальный результат должен быть определенным.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий