Мой сайт размещён в Китае, и, как вы знаете, все китайские сайты обязаны регистрироваться для получения лицензии от правительства, поэтому все китайские сайты находятся под надзором.
Недавно кто-то сообщил моему провайдеру CDN, Qiniu (также китайской компании), что некоторые изображения на моём сайте являются незаконными. Мой провайдер CDN сообщил мне, что мне следует удалить эти изображения и «обновить кэш URL», иначе они могут приостановить мой аккаунт в соответствии с законом. Однако я обнаружил, что эти изображения являются аватарами пользователей, и я не знаю, как их удалить.
Согласно How to Delete Uploaded Files? - #3 by codinghorror и How to Delete Uploaded Files? - #25 by Falco, загруженные изображения без ссылок будут автоматически удалены через 48 часов. Я заменил эти аватары пользователей на стандартные буквенные, но спустя 72 часа старые аватары пользователей всё ещё не исчезли. Возможно, это связано с тем, что аватары пользователей не считаются загруженными изображениями?
Есть ли у кого-нибудь идеи, как полностью удалить файлы аватаров пользователей с моего сервера?
Ой, извините. Аватары работают по-другому. Мне нужно будет посмотреть код, чтобы понять, где искать. Если это срочно и у вас есть бюджет, пожалуйста, свяжитесь со мной напрямую. В противном случае, скорее всего, у меня не будет свободного времени на расследование. Возможно, кто-то другой знает.
Чтобы предотвратить загрузку пользователями будущих аватаров, вы можете отключить настройку «Разрешить загружаемые аватары» и включить настройку сайта «Выбираемые аватары» с большим набором вариантов.
Кажется, вам нужно загрузить заменяющий плейсхолдер, чтобы сработало автоматическое удаление — запись пользователя всё ещё удерживает загруженное изображение аватара активным, даже если оно не используется.
Загруженные файлы именуются на основе SHA1 содержимого изображения — это может помочь вам найти соответствующий файл?
У меня более 7 тысяч зарегистрированных пользователей, и менее 5 из них используют незаконные аватары, даже не осознавая этого. Поэтому я не хочу превращать это в проблему «ноль или один»: я хочу решать её в каждом конкретном случае, а не запрещать всем пользователям использовать собственные аватары.
Как это сделать? У меня нет ни малейшего представления.
root@iosre:~# cd /var/discourse/shared/
root@iosre:/var/discourse/shared# /var/discourse/launcher enter app
WARNING: Docker версия 17.05.0-ce устарела, рекомендуется обновиться до 17.06.2 или новее.
root@iosre-app:/var/www/discourse# rails c
[1] pry(main)> a=UserAvatar.where(user_id: 1234)
=> []
[2] pry(main)> a=UserAvatar.where(user_id: lincwee)
NameError: неопределённая локальная переменная или метод `lincwee' для main:Object
из (pry):2:in `__pry__'
[3] pry(main)> a=UserAvatar.where(user_id: 'lincwee')
=> []
[4] pry(main)>
Я получил ещё одно письмо от моего провайдера CDN, и они заморозили мой аккаунт CDN. Поэтому я должен обновить эту тему для получения дальнейшей помощи.
В новом письме говорилось, что следующие ссылки являются незаконными:
Как вы видите, это аватары двух пользователей, представляющие собой мемы с бывшим председателем Китая. Снова провайдер CDN попросил меня удалить эти файлы с сервера и обновить кэш CDN.
Из ссылок я увидел, что пользователи — «baal998» и «lincwee». Согласно фрагменту кода в моём предыдущем сообщении, URL загруженной аватарки «lincwee» был /uploads/default/original/2X/5/55512211b1c8969c8038b79840464952cd3eb089.jpeg, а для «baal998» — /uploads/default/original/2X/c/cb2188eaeecc3a648f021fa00da4734bd60ca183.jpg. Затем я выполнил find /var/discourse/shared/ -name *55512211b1c8969c8038b79840464952cd3eb089* и удалил все найденные файлы; это сработало для «lincwee». Но с «baal998» мне не повезло: я всё ещё мог получить доступ к https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png, хотя файлов с именем *cb2188eaeecc3a648f021fa00da4734bd60ca183* больше не было.
Или, чтобы упростить: как Discourse обрабатывает переход по ссылке https://iosre.com/user_avatar/iosre.com/baal998/135/2210_2.png? Если кто-то, знакомый с исходным кодом, сможет подсказать имя файла, класса или функции, это было бы очень полезно. Спасибо!
Также начните с получения данных с вашего сервера, а не из CDN. Вам нужно убедиться, что вы решаете проблему в правильном месте. Как только вы убедитесь, что сервер не отправляет изображения, можно работать с CDN.
Да, и вы видите, что это отправляется вашим сервером. Значит, нужно исправлять именно эту ссылку. После того как вы остановите отправку изображений, можно очистить CDN.