Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

spectre

Пользователи
  • Публикаций

    5 896
  • Зарегистрирован

  • Посещение

Записи блога, опубликованные пользователем spectre

  1. spectre
    Все мы знаем что вокруг системы опенкарт крутится огромное количество всяких чертей и мошенников, которые воруют у разработчиков модули и продают их типа на своих "легальных" площадках
     
    Но вот эта ситуация прямо сильно меня возмутила
     
    Есть такой сайтик https://d***v-op****cart.com/ во главе с каким-то мутным хером который пытался угрожать мне в личку что он выложит все мои модули
     

     
    Начинался с ломаного симпла, ну это хоть как-то можно оправдать во время войны мол русня стырим ниче страшного. Но потом стали тырить и уже все у своих, мне кажется что кто-то немного охренел
     
    Также там трутся очень многие ребята с нашего форума, кстати сегодня там перекличка, ищут "крыс" кто рассказывает людям про то что это ссаные пираты и там нет ни одного легального дополнения
     
    Кто-то любит экономить 200 грн и получить хз знает что, закодированное мутными херами и без поддержки
     
    Самое интересное что некоторые модули там стоят дороже чем легальные от автора, но не суть
    самый топ
    это Новая Почта и Укрпочта от @Prorab337
    Microdata pro от @Exploits
    Примерно все модули от @chukcha
    Некоторые модули от @SergeTkach
    Мультиязык от @markimax
    Ocfilter в личке от @SooR
     
    Список большой
     
     

     

     
     
    Всем кто хочет сэкономить рекомендую прочитать эту статью
     
     
     
     
     
    А что вы думаете по этому поводу?
     
     
    PS Некоторые козыри есть у нас в рукаве и до определенного момента мы их показывать не будем, но я рекомендую задуматься
     
     
     
     
     
     
     
  2. spectre
    На форуме каждый день появляется куча тем что "подключили SSL и все сломалось, циклический редирект и тп"
     
    В подавляющем большинстве случаев нужен редирект с www на без и на https с без
     
    Первым делом отключаем редиректы в панели хостинга, до добра они никогда не доводят и делаем сами
     
    Инструкция для Apache т.к. почти на всех хостингах используется он
     
    Все правила редиректов нужно вставлять в файл .htaccess который лежит в корне магазина в этот блок после RewriteBase / !

     
    www редирект простой
     
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L]  
    с HTTPS все интереснее, т.к. разные хостинги используютт разные сборки вебсерверов и методы определения HTTPS они разные
     
    Вторая часть правила у нас будет неизменная
     
    RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]  
    А вот первую придется выбрать из
     
    RewriteCond %{HTTP:SSL} !=1 RewriteCond %{HTTPS} =off RewriteCond %{SERVER_PORT} !^443$ RewriteCond %{ENV:HTTPS} !on RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTP:X-HTTPS} !1 Этого хватит для почти всех хостингов 
     
    Расскажу как понять какой тип определения HTTPS вам нужен
     
    открываем файл index.php
    и пишем туда
     
    echo '<pre>'; print_r($_SERVER); echo '</pre>';  
    открываем сайт по http и видим что-то подобное
     
     

     
    ищем знакомые слова из блока с редиректами
     
    и видим
     
    [HTTP_X_FORWARDED_PROTO] => http
     
    Значит у нас получится конструкция такого рода
     
    #Правила для редиректа RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] #Правила для с www на без RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L]  
    если хотите чтобы robots.txt был доступен роботам по http
    то первым правилом этого блока нужно добавить
     
    RewriteCond %{REQUEST_FILENAME} !^robots.txt$ [NC]  
     
    Если вам лень читать это все и вы просто промотали сюда - подберите просто методом тыка, это занимает 5 минут
     
     
    Спасибо за внимание, ваш spectre
     
  3. spectre
    Сегодня мы разберем такую штуку как OCMOD-модификаторы, странно, но более-менее нормального мануала в сети нет, попробуем исправить этот недостаток так чтобы даже школьник понял как оно работает.
     
    Какие-то неочевидные баги, особенности и приколы мы не будем рассматривать, оставим это удовольствие тем кто решит все-таки пойти дальше и писать свои модули  
     
    Итак, OCMOD-модификатор это простой XML-файл, который изменяет PHP-файлы и/или tpl/twig- файлы шаблонов.
     
    Вообще модификатор - это zip-архив с расширением ocmod.zip
    в нем могут быть
    папка upload - в которой файлы для загрузки на сервер
    файл install.xml - сам XML-модификатор который изменяет файлы
    файл install.php - php-файл который выполняется во время установки модификатора
    иногда install.sql - то же самое, только для запросов в бд
     
    Это очень небезопасная штука и 90% вирусни на опенкарте - это следствие того что украли админку и загрузили опасные файлы прямо через установщик расширений, я бы отключал вообще этот функционал, а для модулей существуют методы install и uninstall
     
    Но мы будем рассматривать только модификатор, который меняет код в файлах и будем называть его OCMOD-модификатором
     
     
    Как оно работает
     
    Есть 2 варианта применить модификатор, первый - положить в папочку system файлик с расширением .ocmod.xml, второй - загрузить файл через установщик дополнений.
    Первый вариант предпочтительнее, т.к. его легче править, прямо фтп-клиентом и можно уже обновлять кеш, в базе - есть всякие онлайн-редакторы, мне они не нравятся, потому что:
     
    a) есть ограничение на размер файла (правится размером поля в бд, но можно все провтыкать);
    б) иногда их блокируют всякие modsecurity;
    в) просто тупо неудобно в браузере
     
    Также нужно учитывать что порядок применения модификаторов таков - сначала применяются файлы из папки system по алфавиту, потом файлы из базы по названию или дате добавления
     
    То есть что делать мы уже знаем, чтобы сделать модификатор нам надо сделать xml-файлик и положить его в папку system
     
    Базовая структура OCMOD-файла такая
    <?xml version="1.0" encoding="utf-8"?> <modification> <name>Name Of Mega Modification - название нашего супер модуля</name> <code>name_of_mega_modification - внутренний код модификатора</code> <version>1.0 2.3.x-3.0.x - можно написать версию файла, для каких версий подходит, ну так, чтоб понятно было</version> <author>spectre - ваш супер ник</author> <link>https://freelancer.od.ua/ - ваш суперсайт</link> Здесь будет основное колдунство </modification>  
    Как и в любом XML-файле все теги должны быть открыты и закрыты после содержания
     
    Ну, раз мы уже начали делать модификатор, давайте придумаем что он будет делать и по дороге обратим внимание на то как можно делать в OCMOD а как не надо.
     
    Вот прямо сразу вспомнилось что часто просят новички и спрашивают в какой код что нужно вставить чтобы если товар закончился на складе надпись на кнопке "купить" менялась на какую-то. Теперь у них будет возможность сделать это самостоятельно.
     
    Сделаем радиокнопочку, которая будет включать и выключать наше творение, а также надпись на какую собственно будет заменяться кнопка "купить", обычную, не мультиязычную, когда научитесь писать модификаторы-  научитесь брать готовые части кода, благо в опенкарте уже есть все примеры)
     
     Делать будем на последней версии OcStore 2.3.0.2.4
     
    Структура операции в OCMOD файле очень простая
     
    <file path="Путь к файлу"> <operation error="действие при ошибке"> <search><![CDATA[что ищем]]></search> <add position="операция"><![CDATA[ что вставляем или меняем ]]></add> </operation> </file>  
     
    Путь к файлу, который мы будем модифицировать
     
    Можно написать несколько путей через |
    <file path="catalog/controller/common/home.php|catalog/controller/common/column_left.php">  
    В пути можно использовать звездочки и скобочки
    * - это любой символ в пути
    {} - это набор файлов, подробнее опишу дальше
     
    Сейчас мы делаем админку для нашего модификатора и нам понадобятся файлы
     
    admin/controller/setting/setting.php
    admin/view/template/setting/setting.tpl
     
     
    т.е. операция примет вид
    <file path="admin/view/template/setting/setting.tpl"> <operation error="skip"> <search><![CDATA[<label class="col-sm-2 control-label" for="input-admin-limit"><span data-toggle="tooltip" title="<?php echo $help_limit_admin; ?>"><?php echo $entry_limit_admin; ?></span></label>]]></search> <add position="before"><![CDATA[ ]]></add> </operation> </file>  
    действие при ошибке - необязательно, но я предпочитаю писать skip - просто пройти дальше мимо
    можно писать abort (не надо, это оборвет исполнение всей цепочки) или log (писать в лог, но вроде и так все пишется)
     
    Нам нужна радиокнопка которая вкл-выкл действие и сама надпись для этой кнопки
    Откроем файл шаблона настроек магазина admin/view/template/setting/setting.tpl и найдем похожий кусочек с радиокнопкой на вкладке "Опции", а заодно и текстовое поле

     
     
    Откроем консоль по ф12 и посмотрим как называется этот элемент и заодно соседний
     
     
     
     
    Окей, найдем в tpl-файле этот кусочек кода (для простоты перед ним и будем вставлять наши настройки)
     
     
    Теперь подумаем куда нам прицепиться.
    Самое главное для OCMOD файла - найти УНИКАЛЬНЫЙ ЭЛЕМЕНТ к которому мы будем привязываться, не к <?php echo $text_yes; ?>, не к <div class="form-group required"> а к чему-то что с малой вероятностью будет изменено коллегами-конкурентами-вашими программистами
     
    Просто запомните, перед тем как идти дальше, проверьте что то что вы указываете в элементе search встречается один раз и ровно там где вам нужно, если нет - ищите дальше куда можно влезть чтобы вас потом не проклинали.
     
    На этом примере мы можем прицепиться к 
    <legend><?php echo $text_product; ?></legend>  
    Если нужно будет вставлять куда-то в середину - то можно выбрать другой элемент, хотя давайте так и сделаем, вставим наш модификатор после вкл выкл кол-во товаров
     
    Смотрим, нам нужно вклиниться вот сюда
     
    Закрывающий див не подходит, form-group тоже, мы не планируем считать какой это обязательный блок во всем файле
    я вижу уникальную конструкцию это название блока "кол-во элементов в админке" - туда и пойдем
     
    Берем всю строчку и указываем что ее нужно искать (надо вставлять без переносов и пробелов в начале и в конце
     
    <search><![CDATA[<label class="col-sm-2 control-label" for="input-admin-limit"><span data-toggle="tooltip" title="<?php echo $help_limit_admin; ?>"><?php echo $entry_limit_admin; ?></span></label>]]></search>  
    search понимает параметр index , то есть если написать <search index="3"><![CDATA[</label>]]></search> то наш код будет исполняться около 4(!) вхождения </label> на странице - первый элемент это index="0". Старайтесь не использовать это без особой необходимости, кто-то вставит раньше похожий кусочек и все сломается, ваша задача максимально оградить себя от внешних влияний. 
     
    Без параметра index - операция применится ко всем вхождениям искомой строки в файле
     
    Можно искать по части строки, но старайтесь по целой
     
    Еще search понимает атрибут trim, но обычно это не применяется на практике
     
    Теперь будем наконец-то вставлять код.
     
    Берем просто копипастим радиокнопку вместе с текстовым полем и переименовываем переменные в 1 - то что нам надо, 2 - чтобы тот кто откроет после вас понял что имеется ввиду
     
    Получается что-то такое
     
    Теперь нам нужно вставить это перед блоком, но там div с классом form-group
     
    используем before offset="1" - это значит что операция начнет применяться на 1 строку выше той которую мы ищем
    точно так же работает after - это вставка после искомой строки
    replace - заменяет искомую строку на то что мы напишем
     
    несколько строк одновременно в одной операции поиска искать нельзя!
     
    У нас получится такая операция и с этим файлом мы закончили
     
    теперь нужно вдохнуть жизнь в переменные
    У нас здесь 2 переменные настроек
    это $config_replace_cart_button и $config_replace_cart_button_text а также языковые переменные
     
    открываем 
    admin/controller/setting/setting.php
     
    и ищем там 2 места
    где добавляются языковые переменные 

     
    и непосредственно сохраняются настройки, ищем config_product_count
     

     
    у нас будет 2 операции (можно в одной, но лучше текстовые переменные туда где текстовые, а настройки к настройкам, чтобы выглядело "как родное"
    Точно так же копипастим код, переименовываем переменные и получаем что-то такое
     
     
    Здесь offset нам не нужен, просто вставляем до и после
     
    Всегда проверяйте что то, к чему привязываемся - уникально!
     
    Теперь нам нужно добавить языковые переменные, для настроек их можно и тупо в коде написать, но надо стремиться к тому чтобы ваш код не отличался от соседнего и был похож на тот который используется в Opencart.
     
    Язык админки у нас может быть разный, но мы сделаем так чтобы везде появились эти языковые переменные и попробуем символ * в пути
    <file path="admin/language/*/setting/setting.php">  
    Это значит что наш модификатор пробежится по всем папкам в admin/language и поищет в каждой файл setting/setting.php
    Можно написать так <file path="admin/language/*/*/set*.php"> или так <file path="admin/*/*/*/setting.php">
    Если нужны конкретные языки, давайте попробуем ру и англ и увидим как работают скобочки
     
    <file path="admin/language/{ru-ru,en-gb}/setting/setting.php">  
    это явное указание нескольких папок-файлов в пути
     
    в них обоих есть // Text поэтому не будем мудрствовать лукаво
     
    И, о чудо, админку для модуля мы написали и она даже работает!
     

     
     
    Теперь будем делать самое главное - чтобы это все работало
     
    Начнем с товара, это контроллер product/product и шаблон по такому же пути
     
    В контроллере нам нужно получить статус нашей модификации и текст для кнопки (а еще количество товара на склада)
     
    Получаем
     
     
    тут все по отдельности, поэтому статус замены мы можем объединить. Условие будет такое что кол-во не больше 0 и в админке мы включили настройку, нет смысла в шаблоне делать условия, старайтесь все вообще максимально упрощать в разумных пределах
     
    $data['replace_cart_button_status'] = $this->config->get('config_replace_cart_button') && $product_info['quantity'] <= 0 ;  
    Все, все данные у нас уже есть, теперь нужно сделать чтобы магия работала в шаблоне
    Будем считать что мы нашли уникальный элемент во всех шаблонах и используем путь
     
    catalog/view/theme/*/template/product/product.tpl  
    Поищем кнопку купить
     
    <button type="button" id="button-cart" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-primary btn-lg btn-block"><?php echo $button_cart; ?></button>  
    Пробуем <?php echo $button_cart; ?> , не подходит, оно используется еще в рекомендуемых товарах и если изменится кнопка в товаре - на всех рекомендуемых получим "под заказ"
     
     
    Заменим все целиком и там где название просто выведем нужный текст в зависимости от наших условий, лучше использовать короткий if чтобы оно и смотрелось нормально и не нагромождать if else и тп в и без того длинной строчке
     
     
    обратите внимание - replace - тупо заменяет искомое на требуемое, поэтому я рекомендую если вы меняете что-то в одной строке или ее части, так тоже можно - смотрите чтобы оно было без пробелов и переносов, т.к. поломаете верстку и вас никто не будет любить. Также с большой осторожностью используйте offset в replace - он заменяет нижние строки полностью, потренируйтесь на каком-то простом файле
     
    Вуаля. Опять работает когда количество 0
     

     
     
    Ну, мы уже опытные модулеписатели. Айда провернем то же самое в категориях
    А заодно на страничке товаров производителя, поиске и акциях, т.к. контроллеры и шаблоны у них практически идентичны
    А еще заодно в рекомендуемых товарах на страничке самого товара
     
    <file path="catalog/controller/product/*.php">  
    это значит мы будем искать во всех контроллерах в папке product
    можно и так
     
    <file path="catalog/controller/product/{category,manufacturer,search,special,product}.php">  
    Напомню, нам нужно получить статус замены текста на кнопке и, собственно, сам текст
     
    Итого 5 контроллеров, ищем строки которые встречаются во всех
     
    Возьмем к примеру 
    'name' => $result['name'], это название товара, встречается везде, навредить мы не сможем
     
    <file path="catalog/controller/product/*.php"> <operation error="skip"> <search><![CDATA['name' => $result['name'],]]></search> <add position="after"><![CDATA[ 'replace_cart_button_status' => $this->config->get('config_replace_cart_button') && $result['quantity'] <= 0, 'replace_cart_button_text' => $this->config->get('config_replace_cart_button_text'), ]]></add> </operation> </file>  
    Сразу скажу что это не лучший вариант, текст и статус модификации лучше получить где-то до этого цикла товаров и в шаблоне использовать переменные, но наша сейчас цель - понять как работают модификаторы и мы немного уже углубились) Теперь каждый товар будет знать заменять ли текст на кнопке и если заменять то на какой
     
    Точно так же ищем кнопку "купить" и заменяем ее на похожую конструкцию за исключением того что у нас будет не просто $replace_cart_button_status а $product['replace_cart_button_status']. В нормальных шаблонах эти места одинаковые, поэтому будем считать что у нас идеальные условия.
     
    <file path="catalog/view/theme/*/template/product/*.tpl"> <operation error="skip"> <search><![CDATA[<button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>', '<?php echo $product['minimum']; ?>');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span></button>]]></search> <add position="replace"><![CDATA[<button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>', '<?php echo $product['minimum']; ?>');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $product['replace_cart_button_status'] ? $product['replace_cart_button_text'] : $button_cart; ?></span></button>]]></add> </operation> </file>  
    вуаля

     
     
    Упс, в карточке товара рекомендуемые используют чуть другой код (разницы в 1 символе хватит чтобы мод не сработал), ничего, мы добавим аналогичную операцию к product.tpl
     
    <operation error="skip"> <search><![CDATA[<button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>', '<?php echo $product['minimum']; ?>');"><span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span> <i class="fa fa-shopping-cart"></i></button>]]></search> <add position="replace"><![CDATA[<button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>', '<?php echo $product['minimum']; ?>');"><span class="hidden-xs hidden-sm hidden-md"><?php echo $product['replace_cart_button_status'] ? $product['replace_cart_button_text'] : $button_cart; ?></span> <i class="fa fa-shopping-cart"></i></button>]]></add> </operation>  
     
    Как-то это сильно просто
    Давайте добавим то же самое еще и в модули
    В опенкарте 4 стандартных дефолтных модуля (последние, рекомендуемые, хиты продаж и акции), проделываем с ними то же самое
     
    О, ухты! В модулях используется для названия товара то же самое
    'name'        => $result['name'],
    Сделаем по-умному, изменим путь контроллера там где делали в категориях на
    <file path="catalog/controller/{extension/module,product}/*.php">  
    и теперь модификатор поищет по обоим путям и добавит переменные везде где нам нужно
     
    С шаблоном такое не прокатило, для модулей делаем отдельно
     
    <file path="catalog/view/theme/*/template/extension/module/*.tpl"> <operation error="skip"> <search><![CDATA[<button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span></button>]]></search> <add position="replace"><![CDATA[<button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $product['replace_cart_button_status'] ? $product['replace_cart_button_text'] : $button_cart; ?></span></button>]]></add> </operation> </file>  
     
    Все сделали и ой

     
    Почему-то это еще с версии 1.5 живет и никто не осмеливается это менять
    в контроллере рекомендуемых - не $result а $product_info
    Делаем исключение и добавляем туда отдельно
     
    <file path="catalog/controller/extension/module/featured.php"> <operation error="skip"> <search><![CDATA['name' => $product_info['name'],]]></search> <add position="after"><![CDATA[ 'replace_cart_button_status' => $this->config->get('config_replace_cart_button') && $product_info['quantity'] <= 0, 'replace_cart_button_text' => $this->config->get('config_replace_cart_button_text'), ]]></add> </operation> </file>  
    Все работает, и это было совсем не больно
     
    И вот у нас уже готовый модификатор который немного изменив под свои хотелки можно продать за 300р))
     
    super_mod.ocmod.xml
     
     
    Итого краткое резюме:
    - Всегда проверяйте свое условие search чтобы оно было уникальным и никому не мешало, не привязывайтесь к $category_info или $data['heading_title']
    - Используйте offset осторожно, а в replace вообще не используйте
    - Старайтесь использовать меньшее количество кода, но оставляйте его читаемым
    - есть еще search regex но это совсем другая история
     
    Если что-то сломалось после применения модификатора из папки system нужно всего лишь переименовать его, скажем, в .ocmod.xml_ , т.е. изменить расширение и обновить кеш модификаторов
    Если сломалась страница обновления модификаторов - нужно очистить папку storage/modification (путь к ней можно подглядеть в config.php) тогда, страничка откроется
    Это работает если ничего не правилось в кеше модификаторов - но  у кого так - тот и сам знает все боли и их не обновляет
     
     
    Это все основано на моем опыте и является моим личным мнением и видением методики написания модификаторов, если у вас есть советы-пожелания - добро пожаловать в комменты
     
     
    Спасибо за внимание, ваш spectre
     
     


  4. spectre
    Я хочу сразу что пост не является целью кого-то обосрать а просто констатирует некоторые факты
     
    Каждый божий день ко мне обращается человек 40 с разными насущными проблемами.
     
    НО!
     
    Проблемы 3-4 (а это примерно 10%) их них решаются отключением-удалением модулей лайтинг или хрен оптимайзер, по-другому я это назвать не могу.
     
    Автор  оптимайзера в упор не видит там проблем и больше того там не работают кнопки по типу «не трогать фейсбук», а автор морозится и/или шлет всех на--- типа «у других и у меня на демке  нормально»
    Чего стоит отложенный запуск метрики, счетчики и тп они же бл---  пишут – вставьте код в head страницы, когда она загрузится счетчик уже должен работать
     
    А ради мифических попугаев, которые в 99% случаев не влияют на ранжирование вашего магазина вы теряете очень много функционала!
     
    https://developers.google.com/speed/pagespeed/insights/?hl=ru&url=rozetka.ua
    https://developers.google.com/speed/pagespeed/insights/?hl=ru&url=citrus.ua
     
    вы думаете у розетки или цитруса нет денег оптимизировать пейджспид или купить-написать модуль хай оптимайзер? Или они грузятся по 10 сек как пишет сервис?
     
    Да им по---й ваще потому что они думают головой и делают магазин для людей
     
    Красивые цифирки это не всегда хорошо и круто, кому нахрен нужен неработающий магазин с 100 попугаями пейджспид?
    Хотите пейджспид? Закройте скрипты и стили от робота гугла типа
    <?php if (strpos($_SERVER['HTTP_USER_AGENT'], "Speed Insights" ) == false) { ?>
    Или отдайте ему бабку ват как я и будет 100 из 100
    https://developers.google.com/speed/pagespeed/insights/?hl=ru&url=freelancer.od.ua
     
    Показатель пейджспида не показатель реальной скорости и удобности магазина, запомните, вы б-- делаете магазины не для поисковиков а для людей, а то что там какой-то сервис из страны где больше половины людей сидит на адсл показывает что ему там что-то не нравится - вас вообще не должно парить!
     
     
    Лайтинг это вообще какая то эпическая хрень, магазин типа начинает работать быстро на главной и со второго раза, но если у вас много товаров – это селф ддос со всеми вытекающими, скрипт с сервера автора – в подарок
    Так же как оказалось модуль не знает что в магазине может быть несколько групп покупателей
     
    И вообще, ребят, любите своих клиентов, помогайте им по возможности а не «в дефолте с 20 товарами все работает идите нах» и тогда всем будет житься лучше, клиенты это люди которые нас кормят и по пятницам поят.
     
    Если вы пишете модули – не нужно думать что ваш модуль окажется единственным в магазине клиента, не меняйте бл--- системные вызовы  типа getProducts на свою хрень, не забывайте что это не ваш демо сайт а бл--- магазин с реальными товарами за деньги, владелец которого хочет заплатить вам бабла за то что вы решите его очередную боль.
     
    Пейте пиво, думайте башкой, ваш spectre
     
     
     

  5. spectre
    Инструкция как делать НЕ НАДО!!!
     
    1. Никаких admin admin и 123456!
     
    Ни в коем случае не ставьте admin admin ни в каких случаях, даже если вам просто нужно поиграться с опенкартом
    У вас рядом могут быть живые сайты, которые пострадают
     
    Запомните - имея админку опенкарта можно получить доступ ко всей файловой системе и другим сайтам сервера/хостинг-аккаунта
     
    Никаких [email protected]!
    пишите свою или доверенную почту на которую вы сможете получить свой сложный пароль типа &*^%hygkjhGJHG^*&@ghkjhqeeqeqr 
    это гораздо безопаснее! Злоумышленник может зарегать [email protected] - и привет!
    Отключите демо аккаунт - там доступна на чтение вся информация!
    Переименуйте учетку admin - уже плюс к стойкости
    Добавьте двухфакторную авторизацию в админку, даже через .htpasswd, это уже осложнит жизнь потенциальному хакеру
    Ограничьте сверху доступом по IP
     
    2. Никакого phpmyadmin в мир!
    В 90% случаев phpmyadmin доступен в мир по ip/phpmyadmin
    Закрывайте его для чужих, ну, свой ip можно оставить
    Попросите хостера это сделать или так же защитить двухфакторной аутентификацией
     
    3. Никаких админеров!
    В каждом пятом сайте админер лежит в корне, удаляйте его после работы или переименуйте в lwjdkhkjwrehtkwrjhvsfvgsfgsf.php если без него нельзя жить!
    Это тоже потенциальная уязвимость
     
    4. Никаких логов!
    В логах можно найти очень много интересной информации, начиная от структуры файловой системы заканчивая пароля к базе данных
    И их можно посмотреть даже под демо-аккаунтом
    Логи должны быть доступны только вам, error_log не должен лежать в корне сайта для всех
     
    5. Никаких архивов в корне сайта!
    У многих лежит в корне архив site.tar.gz, db.sql, backup.zip и прочее
    Эти файлы можно скачать!!! Там есть все конфиги, логины пароли и прочее интересное, вы сами отдаете свой сайт злоумышленникам.
    Никаких доступов в текстовых файлах, ничего!

     
    вот все должно быть в корне!
     
    6. Регулярно меняйте ВСЕ пароли
    Это касается всего, базы, хостинга, фтп, админки сайта, проводите регулярно эту проверку
    Рекомендую раз в месяц
    Также сканируйте свой сайт каким-то айболитом или чем-то подобным на предмет всякой херни
     
    7. Не ставьте ломаных модулей (даже бесплатных)!
    Подавляющее число модулей на опенкарт стоят до 1000 р, это не та сумма чтобы ставить себе на сайт бомбы замедленного действия с варезных сайтов!
    В один прекрасный момент этот механизм активируется и вы потеряете свой сайт и репутацию с потрохами!
    Также рекомендую ставить модули только от проверенных разработчиков и читая темы поддержки. Т.к. были случаи что платный модуль добавлял sql-дырку в магазин.
     
    8. Никаких ошибок php на фронте!
    Отключите сами вывод ошибок в системный лог и на экран и вам не будут писать стасики с предложением купить у них вашу базу
    Не умеете - просите хостера! 
    Это касается всей служебной информации
     
    9. SQL-инъекции
    В интернете полно скриптов как базово обезопасить свой сайт хотя бы от самых популярных инъекций!
    Найдите в интернете правила для apache и/или nginx и примените их, если не понимаете - попросите специалиста!
     
    10. Давая данные кому-то - не забывайте их менять!
    Даже если разработчики добросовестные - они могут подхватить с порнхаба какую-то дрянь и сохраненный пароль к вашему сайту улетит!
    Потратьте 3 минуты после работы на смену доступов!
    FTP еще желательно делать по IP чтобы 21 порт был недоступен недоверенным людям, у каждого вменяемого разработчика IP статический (постоянный)
    Включите mod_security в PHP, он всякую шушеру нормально отбивает
    suhosin тоже неплох, но его настраивать надо
     
    Научитесь пользоваться своим хостингов и давайте разработчикам только те данные которые реально нужны
    Часто чтобы покрасить кнопку люди скидывают пароль от хостинга где лежит десяточка сайтов. А ведь не все люди добросовестны
     
    11. Никогда не держите яйца в одной корзине!
     
    Для каждого сайта создавайте свой аккаунт, чтобы если ломанули пострадал только один сайт
    Часто вижу как дев и прод находятся на одном сервере рядышком, а к деву admin admin потому что разработчику так удобно и он не может запомнить пароль посложнее
    Или какой-нибудь дырявый вордпресс бложек старой версии, взломав который весь аккаунт хостинга превращается в кашу из шеллов и показывает гуглу иероглифы а вы этого даже можете не знать!
     
    12. Отрубите tool/upload
    Если у вас нет острой необходимости чтобы юзеры закачивали к файлы на сервер - это вам не нужно, тоже неплохая потенциальная дырка.
    А если необходимость есть - сделайте дополнительные проверки!
     
    13. Совет от @mpn2005
    Никогда не вставляйте скопированный код или правила из интернета, если не понимаете их хотя бы на базовом уровне.
    Копировать можно, если есть уверенность в качестве ресурса, для чего уже нужны хотя бы базовое понимание вопроса.
    Это касается и конфигов, и robots, и htaccess, да и любых php файлов.
     
    14. Пропишите правильно права на директории!
    Обычно для папок 755, для файлов 644
    веб-сервер должен быть запущен от имени владельца файлов и папок
     
    15. Подключите SSL
    Большинство хостингов дает сертификаты от Let's Encrypt бесплатно, а если и не дает - то купить недорого, хватит любого
     
    16. Давайте доступы сотрудникам только туда куда им реально необходимо для работы!
    Менеджеру совершенно не нужно знать smtp-пароль на почту и настройки модулей и иметь возможность смены вашего пароля как администратор
    В опенкарт это не сильно понятный процесс но есть модули которые помогают
    Постарайтесь сделать так что даже если сотрудник обидится он не смог навредить вам и вашему сайту
     
     
     
    Если у вас есть проблемы хотя бы по одному из пунктов - то у вас большие проблемы!!!
     
    Я каждый день занимаюсь исправлением уязвимостей и беда происходит если есть хотя бы один из этих пунктов, если их количество увеличивается - это в геометрической прогрессии увеличивает ваши шансы отдать базу клиентов, а это все-таки какая-никакая а коммерция. И чем ваш сайт приносит больше денег тем более вы интересны конкурентам!
     
    Это элементарные правила цифровой гигиены, применимые не только к опенкарт, соблюдая которые вы сможете заниматься своими делами, а не беганием по форумам и фриланс-биржам с вопросом что же теперь делать!
     
    Будьте внимательны и бдительны, это ваше бабло и репутация!
     
     
    Кто дочитал - всем спасибо за внимание, ваш spectre
     
  6. spectre
    INTRO
    Все фрилансеры в 99% случаев попадали на то что им не заплатили денег, а заказчики в 99% случаев попадали на рукожопых специалистов которые брали бабки и пропадали. 
     
    Каждый из них конечно же прокачал немного свой детектор мудаков, но я все равно попробую в этой записи собрать правила как для фрилансера так и для тех кто пытается дать им работу, далее - заказчики. 
     
    Итак, начнем, советы буду давать от первого лица, на истину не претендую, но мне помогает, вот, решил поделиться. 
     
    Начнём с фрилансеров. 
     
    1. Самое главное и почему-то самое часто нарушаемое правило. Если взялся за работу - НЕ ПРОПАДАЙ! Если что-то не получается или нужно срочно уйти - напиши заказчику, если он адекватный то поймет. Правда отмазки про переводил бабушку через дорогу и выключили интернет уже мало работают 
    2. Делай свою работу на отлично, так как только возможно даже если цена вопроса невысока, этим ты развиваешь в себе чувство прекрасного и повышаешь уровень и репутацию. 
    Уточни все вопросы до того как начнёшь делать, заказчик всегда менее квалифицирован в вопросе с которым пришёл, и пришёл он к человеку который бы решил его проблему. Не выпендривайся, заказчик платит тебе деньги а не наоборот. Но! Всегда четко оговаривай рамки работ, чтобы не было "а поправь-ка мне еще заодно тут раз уж делаешь".
    3. Если фрилансишь опенкартом - соблюдай code style и делай бекап папки modification. И ещё не делай костылей если можно обойтись без них. И не пиши тексты прямо в шаблонах, потрать 5 секунд на переменную. Пишешь модификаторы - думай о других. Да и ещё много чего. 
    4. Не проси денег каждые полчаса на корм для кота, сигареты, пиво и тп. А ещё не проси денег больше чем договаривались, это только твой просчёт оценки, в следующий раз будешь хоть смотреть с чем придётся иметь дело 
    5. Не нравится что угодно в заказчике или проекте - не работай с ним
    6. Общайся вежливо везде, в почте, мессенджерах и тп
    7. Не работай за еду 
    8. Старайся развивать навык экспертности и объяснять сложные вещи простыми словами, а если не разбираешься в вопросе - не стоит писать чушь с умным видом чтоб не потерять заказчика, все тайное становится явным) Развивайся в целом, будь в тренде.
    9. Если тебя что-то спрашивают и у тебя есть возможность ответить - ответь, если возможности нет - ничего страшного 
    10. И ещё один страшно трудновыполнимый пункт. Если взял работу и обозначил срок - сдай ее в срок
    11. Не суй шеллы в опасении что тебе не заплатят твою тыщу рублей - это мудозвонство
    12. Не делай откровенной херни даже если за это платят. Объясни заказчику что это глупо, тупо, не нужно и тп. С аргументами, но можно и без них. Прибыли сейчас ты не получишь но заработаешь пару плюсиков к своей честной репутации и человек обязательно придет еще. Предлагай свои решения задач или дополнительный функционал, если видишь что они уместны, со стороны всегда виднее.
    13. Поработал - убери за собой, это важно как для клиента так и для других фрилансеров кто будет работать после тебя.
    Часто вижу в корне брошенные adminer.php info.php config_.php (с актуальными данным) category_.php category_old.php category_new_old.php и прочий хлам.
    by @Tank
    Примечание: Если нужно сохранить что-то в сильно измененных файлах - лучше использовать подобные конструкции category.php_050920
    14. Принимай любые способы оплаты и плати комиссию за переводы сам, а не "вот с меня снимут полпроцента с вас на 100 р больше"
    15. Накосячил - правь быстро и бесплатно
    99. Будь крутым 
     
     
    Теперь советы заказчикам у которых есть деньги и нет фрилансера, если денег нет, можно не читать тк за акции, игрушки из сексшопа и ягоды годжи уже практически никто не работает 
     
    1. Составь ТЗ. Не можешь составить тз - объясни своими словами и картинками что надо сделать. Не мешай все в одну кучу, программист нормальный не будет верстать к примеру, а хороший верстальщик обычно не очень хороший программист и тп. Не пытайся 20 минут рассказать по телефону что нужно. Человек у которого есть столько времени на телефонный разговор вряд ли загружен, а если не загружен - вряд ли хорош. 
    Чем больше информации дополнительной - тем лучше, тогда даже с плохим тз нормальный чувак вас поймёт 
    Попытайся сам разобраться в вопросе что именно тебе нужно 
    2. Не давай денег малоизвестным персонажам. Человек который только начинает работать он думает о своей репутации больше чем о предоплате. 200 р для демонстрации денег можно кинуть но не более. Если сомневаешься в человеке - начни с мелких задач, все сразу станет ясно-понятно. 
    3. Если только начинаешь работать с человеком общайся вежливо на вы и тп, если сойдетесь оно само пойдет. Не думай что если у тебя есть пара сотен тысяч рублей то можно общаться с фрилансером в духе "эй ты, жалкий червяк, я плачу бабки и буду командовать парадом я, делай что говорю, модуль мне запили". Далеко не все фрилансеры прыщавые голодные школьники, а некоторые ещё и обидчивые. 
    4. Проверяй работу тщательно, обычно все правки делаются после сдачи и все довольны. Не стоит писать через месяц - вот ты нам делал в админке поле для товара а у нас сломалась онлайн - оплата, фрилансер закономерно попросит немного деньжат 
    5. Кто последний - не всегда папа
    6. Перед тем как начать работу сделай сам все бекапы, создай новые доступы для работы, после работы удали
    7. Покупай модули, этим поддерживаешь сообщество, сэкономленные на варезе 500 рублей очень дорого обходятся в итоге
    8. Если общаетесь по телефону - звони в какое-то удобное время. В мессенджерах лично я тоже стараюсь никому не писать до 8 и после 19
    9. Если работа понравилась - напиши хороший отзыв, вроде это мелочь но довольно сильно мотивирует если это можно так сказать. Помогли на форуме - поставь лайк
    10. Перед тем как начать работу с кем-то - погугли отзывы про него. Частенько тут темы повторяются с никами кидал, а если б разок ввёл в гугл ник или логин скайпа этого можно было бы избежать
    11. Не накидывай новую работу посреди выполнения другой если это не связано, закончите это, рассчитаетесь и если всем все понравилось то продолжите. Парадокс бывает иногда 2 абсолютно адекватных человека не могут сработаться, вот просто не идёт диалог и все 
    12. Не затягивай с оплатой. Нормальный человек доработает что-то и после того как оплатишь, оплата не означает автоматическое посылание тебя нахер.
    13. Во время выполнения проекта - будь на связи, не отвечай раз в 3 дня что-то вроде "ок, мне надо подумать". Чем быстрее коммуникация тем лучше для всех.
    14. Если не готов работать прямо сейчас - не надо обсуждать тз, так как обсуждаешь что-то полчаса а потом - "ок, ближе к концу месяца я напишу" 
    15. Если обратился к фрилансеру, будь готов предоставить доступ, никаких teamviewer, "сделай у себя локально" и тп. Если так переживаешь за основной сайт - будь добр организовать тестовую площадку
    16. Ищи партнера а не раба
    99. Ну и самый важный пункт - не будь мудаком, а 2 нормальных человека всегда между собой договорятся 
     
     
    Каркас набросал, если есть что дополнить или обсудить - пишите в коментах
     
    ваш spectre 
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.