Перейти к содержанию
Официальный форум поддержки Simpla

Создаются страницы с мусором после знака вопроса в урлах картинок


Рекомендуемые сообщения

Уважаемые господа!

Обнаружил что автоматом создаются вот такие вот страницы. Подскажите пожалуйста, как это дело исправить бы....

   

coolbust.ru/files/products/IBL001_2.img_1.800x600.jpg?6414d547192ddf41055413ca1cbce0c7

 

coolbust.ru/files/products/20%D0%BF%D0%B0%D1%80.800x600.jpg?417735ff9dd09132f3c3c37e52a654d2

 

coolbust.ru/files/products/IBL001_3.img.800x600.jpg?8eb3087000154910af1afbf340fd9974

 

coolbust.ru/files/products/4%D1%83%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%BA%D0%B8.800x600.jpg?fc36de7a537d9a23f63e814a6398cc81

 

coolbust.ru/files/products/5%D0%BF%D0%B0%D1%80.800x600.jpg?44306597ad09c54ae0da2eacff04544c

 

coolbust.ru/files/products/IBL001_2.img_3.800x600.jpg?921985eb2e994708d560c9e7fa005d94

 

coolbust.ru/files/products/2%D1%83%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%BA%D0%B8.800x600.jpg?2cc90e057bee1064ab7cd371e1ad3a42

 

coolbust.ru/files/products/IBL001_2.img_2.800x600.jpg?66f189cc83eaca15ee0b80673cf607ac

 

coolbust.ru/files/products/10%D0%BF%D0%B0%D1%80.800x600.jpg?272f8779375d56367982d3e628563e6a

Ссылка на сообщение
Поделиться на другие сайты

После знака вопроса идет уникальный token для генерации изображения, это нужно для того чтобы люди немогли засчет вашего сайта сжимать свои картинки. Если интересно прочитайте про PHPThumb или Imagick.

Ссылка на сообщение
Поделиться на другие сайты

Понятно откуда они взялись, но есть ли возможность навести красоту.

 

Через смарти resize генерируется url с токеном.

А именно, происходит это через:

 

public function resize_modifier($filename, $width=0, $height=0, $set_watermark=false)

 

из Design.php

 

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

 

+ немного похимичить в самом resize.php и возможно в .htaccess

 

Подводные камни может кто видит?

Ссылка на сообщение
Поделиться на другие сайты

Если картинка уже есть в наличии в ФС, то её отдаёт веб-сервер, движок не участвует. В этом и фишка.

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

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

-------------------

alaster, не сразу понял, что Вы имели ввиду. Конечно, можно проверять при генерации урла картинки её наличие и не добавлять токен, если она есть. Но с точки зрения производительности, это очень плохая идея.

Ссылка на сообщение
Поделиться на другие сайты

Это все конечно хорошо, но я из за этого не могу исправить ошибки по метатегам

 

Например тайтлы http://audit.megaindex.ru/audit/site_meta/title/coolbust.ru?field=error&sort=desc

 

Как закрыть это дело от индексации?

 

Добавил в роботс.тхт 

 

Disallow: /*?*
Disallow: /*/*?*
Disallow: /*/*/*?*
Disallow: /*/*/*/*?*

 
Не помогает....
Ссылка на сообщение
Поделиться на другие сайты

Я в этом не шарю конечно, но непонятно зачем закрывать картинки от индексации? по-моему, наоборот - даже в sitemap прописать можно, без токена и как-то поисковикам сказать, чтобы часть после ? игнорил. Но это надо сеошника спрашивать...

Ссылка на сообщение
Поделиться на другие сайты

Если картинка уже есть в наличии в ФС, то её отдаёт веб-сервер, движок не участвует. В этом и фишка.

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

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

-------------------

alaster, не сразу понял, что Вы имели ввиду. Конечно, можно проверять при генерации урла картинки её наличие и не добавлять токен, если она есть. Но с точки зрения производительности, это очень плохая идея.

 

Вы правильно меня поняли, я хочу избавиться от белеберды после незвания картинки. Потому как после того, как картинка была сгенерирована нам нет никакой необходимости клепать к ней токен, что бы запросить её.

 

Существующие картинки открываются вне зависимости от токена и его наличия согласно .htaccess`у.

 

Вот и остается сравнить, что быстрее

file_exist() или $this->config->token(...) ~ md5(от засоленого url картинки)

 

В приципе можно засечь время и посмотреть на разницу в результатах. Но лень) кому не лень - буду рад их видеть.

 

Дело в том что из за этого токена создаются страницы! Картинки я и не собирался закрывать.

 

Скрин залейте, пожалуйста. Страниц создаваться не должно.

Ссылка на сообщение
Поделиться на другие сайты

coolbust, колонка "страница" называется условно, можно было её ресурсом назвать или ссылка. Суть - это ссылки на картинки на Вашем сайте. И это хорошо, что они индексируются. Не очень хорошо, что с токеном.

---------------

Существующие картинки открываются вне зависимости от токена и его наличия согласно .htaccess`у.

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

Ссылка на сообщение
Поделиться на другие сайты

Спасибо, а вообще можно убрать генерацию этого токена?

Извиняюсь, сразу ссылку не увидел.

 

Те изображения, которые Вы наблюдаете страницами конечно же не являются.

Однако в индексе яндекса и гугла присутствуют с хвостом.

Ссылка на сообщение
Поделиться на другие сайты

Спасибо, а вообще можно убрать генерацию этого токена?

Уже же написали - можно. Если просто его убрать - то появляется проблема с безопасностью, т.к. ничего не стоит положить ваш сайт простым скриптом. Или же можно генерировать картинки на этапе генерации урла. Тогда получим проблему с производительностью, которая линейно зависит от кол-ва картинок на странице, что тоже в общем позволяет положить ваш сайт.

Вообще, генерация ресайзов - это распространённая проблема. У разных решений - свои плюсы и минусы. Текущий вариант реализации в симпле, имхо - золотая середина. Единственный неприятный момент - это хвост в индексированных поисковиками ссылках на картинки. Это само по себе не особая беда (с т.з. сео), но хотелось бы иметь чистенький индекс. Лично мне кажется, что можно как-то поисковикам объяснить каким образом индексировать картинки. Полагаю гуглить надо в сторону "дубли страниц"...

Ссылка на сообщение
Поделиться на другие сайты

Да, кстати, без токена можно даже скрипт не писать, просто запросить такие картинки

coolbust.ru/files/products/IBL001_2.img_1.5000x5000.jpg

coolbust.ru/files/products/IBL001_2.img_1.5000x5001.jpg

coolbust.ru/files/products/IBL001_2.img_1.5000x5002.jpg

....
до тех пор пока на хостинге не закончится свободное место...
Ссылка на сообщение
Поделиться на другие сайты

file_exists - должен работать чуть быстрее is_file.

 

if(substr($resized_filename_encoded, 0, 7) == 'http://')
  $resized_filename_encoded = rawurlencode($resized_filename_encoded);

 

$resized_filename_encoded = rawurlencode($resized_filename_encoded);

 

Мне одному этот кусок кажется бессмысленным? Если http => почистить спецсимволы дважды, если нет => просто почистить. Не вижу проблем с тем, что бы оставить просто:

 

$resized_filename_encoded = rawurlencode($resized_filename_encoded);

 

Ровно как и условии отбросить http.

 

if(substr($resized_filename, 0, 7) != 'http://' && is_file($this->config->resized_images_dir.$resized_filename_encoded) )

 

 

Это функция, которая занимается банальной генерацией имя файла с доп. параметрами + не может быть вызвана человеком без соответстующих прав + вызывается исключительно через шаблон от переменных типа $product->image->filename

 

=> все проблемы безопасности связанные с ней исчезли как только мы в валидный url превратили строку.

 

 

Ну и  на последок пару сопутствующих вопросов:

1) Как url изображений храниться в БД?

Судя по products::add_image($product_id, $filename, $name = '') адрес картинки кладется в БД как есть... Стоит отметить, что никаких проверок его валидности мы не делаем т.к. добавлять в базу может только админ и стоит placeholder, который чистит инъекции.

 

2) Неужели мы заставляем для каждого вызова каждой ресайзнутой картинки исполнять rawurlencode? Почему бы при добавлении в БД не сделать его 1 раз, а в resize_modifier() приляпывать лишь доп. параметры, да токен (при необходимости) ?

Ссылка на сообщение
Поделиться на другие сайты

Мне одному этот кусок кажется бессмысленным? 

Нет. Мне тоже.

 

--------

Вроде бы не видно никаких проблем с безопасностью или со свободным местом..

-----------

Проблема с производительностью. Теперь при каждой генерации странички у вас будет добрую сотню раз (а может и тысячу) вызываться `stat()` - это очевидно избыточная операция. Если Вы в других темах ратуете за то чтобы множественные операции с бд (даже инициированные из админки) выполнять в одном запросе в целях повышения производительности, то предложенное решение абсолютно эквивалентно выполнению одному простенькому запросу к бд на каждую картинку на каждой странице...

------------

Почему бы при добавлении в БД не сделать его 1 раз, а в resize_modifier() приляпывать лишь доп. параметры, да токен (при необходимости) ?

------------

Потому что в бд "надо" хранить данные в неформатированном виде...

Ссылка на сообщение
Поделиться на другие сайты

 Смысл этот кусок ИМЕЕТ.

 

Результат работы будет разным - бесспорно. А вот смысловой нагрузки условный оператор не несет. Если Вы его вычеркните, все будет работать.

 

 

 Потому что в бд "надо" хранить данные в неформатированном виде...

 

Есть изображение с компа: ya$plohoe!изображе##enie.png

При загрузке...

 

Сейчас.

В БД будет добавлена строка с url = ya$plohoe!изображе##enie.png

Далее при каждой генерации страницы с ним: $product->image->filename|resize..... (ведь именно так написано у нас в шаблоне)

Т.е. каждый раз будет выполняться rawurlencode, который лишь добвляет параметры ресайза и токен.

 

Генерация самого изображения будет выполнена естественно единожды, при последующих запросах мы будем отдавать уже сгенерированное.

 

Предлагается.

В БД сразу добавлять rawurlencode($url), потому как оригинал загруженный на сервере уже имеет такое имя. А в |resize лишь добавлять к нему параметры и токен.

 

Ни resize.php ни пользователь - изменений не заметит.

 

 

О производительности.

 

И is_file, и file_exists медленные (даже учитывая кэш). md5 - многократно быстрее.

Как следствие токены лучше оставить и не дергаться с обращением к файловой системе.

 

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

Ссылка на сообщение
Поделиться на другие сайты

Господа программисты. Все это конечно хорошо и здорово, но мне (и рядовому юзеру симплы я думаю тоже) совершенно непонятно,

 

Уважаемый kors Вы не могли бы подсказать в каком файле вы это дело правили?

 

UPDATE

 

Нашел сам /api/design.php

 

Изменил как написал господин kors , токены пропали....

 

Насчет безопасности и производительности ничего сказать не могу, т.к. не разбираюсь, ну будем тестить =) Спасибо

Ссылка на сообщение
Поделиться на другие сайты

Возникла проблема, мб виноват хостинг, но

 

1) не у всех картинок ушли хвосты

 

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

 

2) новые не загрузились

 

Пока вернул старую версию design.php, в чем проблема я пока не понял....

 

disfated проблема актуальна, т.к. есть еще несколько магазинов с большим кол-вом товара!
Ссылка на сообщение
Поделиться на другие сайты

 

2) новые не загрузились

ну так отлавливать надо ошибку, дебажить.

 

disfated проблема актуальна, т.к. есть еще несколько магазинов с большим кол-вом товара!

Ну я вроде писал уже всё подробно. Нового ничего пока не изобрели. Если конкретно Ваш магаз на конкретном хосте работает норм - значит норм.

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

Ссылка на сообщение
Поделиться на другие сайты
  • 4 недели спустя...

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

Ссылка на сообщение
Поделиться на другие сайты

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

Не вижу связи ? Токен нужен только для того, что бы было разрешение на обработку оригинала изображения. Потом к копии с водяным знаком Вы можете обращаться не указывая токен.

Ссылка на сообщение
Поделиться на другие сайты

alaster мне кажется вы не совсем внимательно прочитали то что я написал и начали искать какую-то связь. Повторюсь. У симплы есть экспорт в яндекс маркет - по аналогии с ним сделаны файлы для Украинских прайс агрегаторов. Так вот эти агрегаторы не понимают фотографий если в конце есть какой-либо "мусор" в нашем случае это уникальный токен каждой фотки (http://******/files/products/zarjadnoe_ac-4e.200x200.jpg?750d64c3c9afe7a458b69d7954c076c1)

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...