Сам Signal знает? |
Всё было ничего до недавнего времени. Появилось обновление Signal, несовместимое с текущей версией. И я испугался, что VK пытается сейчас уже раздавать подделку, из-за чего и сел разбираться.
Об Android, о тестировании, мысли, рекомендации, инструкции...
Сам Signal знает? |
Всё было ничего до недавнего времени. Появилось обновление Signal, несовместимое с текущей версией. И я испугался, что VK пытается сейчас уже раздавать подделку, из-за чего и сел разбираться.
В бложике описал известную проблему консольного клиента mariadb, который не может сожрать пароль, длинее 80 символов: https://lor.sh/@umnik/111828511992647563
Это привело к небольшому, но
полезному спору. На одной стороне я, с фразой в более 90 символов, на другой
стороне уважаемый (не ирония, не шутка) в своих кругах человек, считающий, что
это бессмысленно. Кстати, рекомендую подписаться на канал этого человека, если
вы связаны с ИБ, он правда хорош (нет, не реклама :); да и какая реклама, если
у него почти 8k человек): https://t.me/infosecmemes
Предполагаю,
что оппонент отталкивается от, в общем-то, правильного утверждения, что 18+
символов — это великолепный пароль, который уже не перебрать за разумное
время.
Сообщение о проблеме |
Отслеживаем (логирование) и контроль доступа (разрешение, запрет) к критичным
API системы происходит через механизм app-op
ов.
App-op
ы (давайте просто app-ops
во множественном
числе и app-op
в единственном) покрывают большой набор
функциональности — от рантайм пермишенов до монитора состояния батарейки.
Управление же всеми этими фичами, внутри, происходит через
AppOpsManager
Это просто подбивка списка изменений с пояснениями, чтобы не скакать по статьям на официальном сайте. Хотя правильнее, конечно, читать оригинал.
Фото такого пирога с сайта рецептов |
14
. Называется новая версия
Android Upside-down cake
— "перевёрнутый" пирог или "вверх
ногами" или "наизнанку" — как угодно. В общем, суть в том, что после выпекания
этот пирог переворачивают и то, что раньше было верхом пирога становится его
дном.
Используя последние обновления, вы в безопасности. А мы - Google, мы врать не станем |
Это копия сообщения из моего linked.in, потому что там неудобно читать.
Итак, хотя никто этого не просил, предлагаю свой вариант, как не допустить утечки, подобной #Yandex. На заметку не только #DeliveryClub, но вообще всем (вот такой я самонадеянный и с распухшим эго).
В чём проблема не только Яндекса, но 99,99999% фирм (и снова привет, кое-какой менеджер из кое-какой фирмы, ага) - они полагаются на то, что доступ к БД строго ограничен, а сотрудники - доверенные лица. Это, прошу прощения, говно. Никогда, никогда, НИКОГДА нельзя рассчитывать, что даже самый проверенный человек не станет "предателем".
Вообще, у вас ещё после Сноудена в голове должно было щёлкнуть, что эта схема просто нерабочая. При том, что я поддерживаю Сноудена и то, что он сделал, но будь я его работодателем, у меня была бы иная позиция.
Итак, нарушитель - это сотрудник компании с доступом к БД. От этого нарушителя и отталкиваемся. Предлагаемый мной подход будет защищать от этой модели, но не защитит от нарушитеЛЕЙ, которые целенаправленно будут менять работу сервера и принимать MR друг друга в мастер, когда цель этих мёрджей будет в сливе данных.
Это общий подход и его можно модифицировать в деталях. Также я не оговариваю алгоритмы шифрования, длины ключей и всё такое. Это ПОДХОД. Но оговорю, что все ключи - уникальны для одного заказа, а не один на все заказы и что ключи хранятся отдельно от данных (впрочем, это очевидно).
На этом этапе у
курьера нет ничего о пользователе и заказе. Наверное, только номер,
чтобы, если что, ТП Яндекса могла сказать "была жалоба по заказу 210". У
курьера остаётся общий с сервером секрет, чтобы номер заказа и
количество позиций можно было считывать в установленные 24 часа
У
сервера есть общий с курьером секрет и секрет общий с клиентом.
Остаётся инфа о составе заказа и его номер, остаётся инфа о связи с
рестораном. Это нужно для разбирательств ошибок. У сервера нет адреса
клиента, имени и телефона
У
клиента остаётся состав заказа, номер и общий с сервером ключ. Теперь
жалобы он подписывает этим же ключом, дабы сервер мог удостовериться,
что это реально тот же заказ, ведь он и жалоба на одном ключе.
Через 24 часа у клиента вытирается общий секрет. Он продолжает видеть свой заказ и номер, но уже не может пожаловаться.
Сервер
также вытирает общий ключ с клиентом, а также уничтожает оставшиеся
данные с заказом. Ну или не уничтожает, потому что это БД и дорого.
Прочесть их нельзя из-за вытертого ключа.
Если Яндекс, или Деливери, или кто угодно возьмёт в работу эту схему (не в этом виде, а подгонит под свои запросы, конечно), назовите её "схема Мячина". Я про это никогда не узнаю, никто у вас не будет знает, кто такой Мячин. Но я буду про себя думать, что кому-то когда-то смог помочь.
Веб версия Family Link |
Важно понимать. Здесь рассматривается подход, когда у ребёнка своё собственное устройство, он не пользуется вашим. Если для вас такой подход непригоден, вы можете создать второй профиль на собственном устройстве и этого будет, в общем-то, достаточно. Если же у вашего ребёнка реально своё собственное Android устройство и, что здесь ОЧЕНЬ важно, оно использует учётную запись Google, то можете продолжить чтение.
Как понять, использует ли прошивка в этом устройсте учётную запись Google? Если не понимаете, о чём идёт речь, то значит использует. Всё просто.
После очередного обновления системы (pacman -Suy в данном случае) у меня перестал собираться проект из командной строки:
➜ clicker git:(master) ✗ ./gradlew assembleAndroidTest assembleDebug
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details
> Task :app:processDebugMainManifest FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processDebugMainManifest'.
> Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @101d84f6
Однако, чтобы эта запись была более полезной, чем просто список фич, сюда же будет подтянут текст с расширенным объяснением того или иного изменения. То есть если у какого-то изменения есть своя статья (например, она есть у one-time permissions), то оттуда будет взято пояснение, что это такое и как работает.
Здесь можно включить поддержку нескольких профилей |
Якобы изменений нет |
Первый подход к снаряду. Выглядит так себе |
Этот модуль должен быть доступен сразу Но если его нет, то, видимо, эта запись для вас |
java.lang.IllegalArgumentException: Argument for @NotNull parameter 'message' of com/android/tools/idea/gradle/project/sync/GradleSyncState.syncFailed must not be nullВот так выглядит ситуация, когда проблемы нет. В случае воспроизведения этой ошибки здесь будет только 1.8 (ну или другая версия JDK) и всё:
Когда проблема решена |
Последняя публичная бета Дальше — релиз |
setThreadStatsTag()
, то при использовании binder
IPC с
ParcelFileDescriptor
контейнером для отправки сокета другому процессу, тег слетал.queryDetailsForUidTag()
. Чтобы вернуть старое поведение вам нужно вызвать untagSocket()
перед отправкой сокета другому процессу
.available()
после shutdownInput(),
то будет возвращён 0
.NetworkCapabilities
сообщал ограниченный набор данных для VPN. Например, сообщал TRANSPORT_VPN
, но не NET_CAPABILITY_NOT_VPN
. Из-за этого разработчикам было трудно понимать, приведёт ли использование VPN к расходу средств пользователя. К примеру, проверка NET_CAPABILITY_NOT_METERED
не определяла, поднят VPN на сети с оплатой трафика или же на безлимитной сети.setUnderlyingNetworks()
, система просуммирует транспорты и свойства всех сетей, на которых запущено подключение и вернёт нормальную совокупность свойств этих сетей.То самое зарядное устройство |
Получаем вот этот экран |
adb push myDir /sdcard/
Подсвечивание новых API |
Утилита имеет множество опций, включая аргументы quemu |
umnik@myachin: > emul @Pixel_2_API_27Пусть вас не смущает emul. Это просто алиас на $ANDROID_HOME/tools/emulator. В общем, если вы столкнулись с похожей проблемой, то вот решение.
PANIC: Missing emulator engine program for 'x86' CPU.
Ну всё, заработало |
Хочется, но не удаётся |
для GNU/Linux илиERROR:android/android-emu/android/qt/qt_setup.cpp:28:Qt library not found at ../emulator/lib64/qt/lib
emulator/qemu/windows-x86_64/qemu-system-i386.exe': No such file or directoryдля Windows, то вам сюда.
Now Playing распознал гимн СССР |
Когда эмулятор всё-таки запустился |
Запрос разрешения, без которого антивирус будет слепым и беззубым |
Рис. 1. Содержание папки Android SDK |
Картинка без смысла |
До Android N Accessibility недоступен в процессе загрузки ОС |
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder at android.support.v7.app.ActionBarActivityDelegateBase.initializePanelMenu(ActionBarActivityDelegateBase.java:991) at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:1041) at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1259) at android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:80) at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:116) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5299) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) at dalvik.system.NativeStart.main(Native Method)