1. Mobil qurilmalar uchun dasturlar Ishlab chiqish muhiti


Mavzu: Kontent-provayderlardan foydalanish



Download 27,79 Mb.
bet12/18
Sana24.09.2022
Hajmi27,79 Mb.
#850101
1   ...   8   9   10   11   12   13   14   15   ...   18
Bog'liq
Amaliyot mobil qurulmalarni dasturlash

Mavzu: Kontent-provayderlardan foydalanish
Reja:
1. Ogohlantirish
2. Muammolar va yechimlar

Android qurilmalarida o'rtacha yuzdan ortiq eksport qilinadigan kontent provayderlari mavjud. Ular tizim ilovalari va foydalanuvchilar o'zlari o'rnatadigan ilovalar tomonidan taqdim etiladi. Kontent provayderlaridagi zaiflik avtomatik ravishda qurilma egasini xavf ostiga qo'yadi. Bundan tashqari, har kim maxsus so'ralgan imtiyozlarsiz ochiq kontent provayderlariga kirishi mumkin. Shaxsiy ma'lumotlaringizni sinchkovlik bilan o'qib chiqadigan dastur zararli kod belgilarini ko'rsatmaydi ...


Ogohlantirish
Barcha ma'lumotlar faqat ma'lumot olish uchun taqdim etiladi. Tahririyat kengashi ham, muallif ham ushbu maqola materiallaridan kelib chiqadigan har qanday zarar uchun javobgar emas.
O'zi yovuz Pinocchio
Jurnal sahifalarida Android platformasi uchun ilovalarni ishlab chiqish xususiyatlari allaqachon bir necha bor muhokama qilingan, shuning uchun biz o'quvchiga ma'lum bo'lgan tafsilotlarni yana bir bor o'rganmaymiz. Ammo shunga qaramay, men sizga Android arxitekturasi va uning ba'zi xususiyatlari haqida bir oz aytib beraman.
Barcha umumiy maqsadli operatsion tizimlar uchun muhim xususiyat har doim jarayonlararo aloqa usullarining xilma-xilligi bo'lib kelgan. Nisbatan yosh Android operatsion tizimida ishlab chiquvchilarning hayotini osonlashtirishi kerak bo'lgan juda ko'p qulay echimlar ishlatilgan. Kontent provayderlari ushbu yechimlardan biriga aylandi. Kontent provayderi ma'lumotlar provayderidir. Har qanday dastur o'zining kontent provayderini yaratishi mumkin, u dasturni o'rnatgandan so'ng, operatsion tizim tomonidan ro'yxatga olinadi ("Kontent provayderining xususiyatlari qanday o'rnatiladi" yon panelga qarang).
Kirish nazorati va kontent provayderlari
Android juda xavfsiz platforma sifatida yaratilgan, operatsion tizimni ishlab chiquvchilar kontent provayderlariga g'amxo'rlik qilishdi. Ular kirishni boshqarishning juda moslashuvchan tizimini taqdim etdi, bu ko'p darajalarda barcha o'zaro ta'sir imkoniyatlarini nozik sozlash imkonini beradi.
Eng yuqori darajada siz provayderni eksport qilinmaydigan qilib qo'yishingiz va uni ilovangiz ichida ishlatishingiz mumkin. Agar biz uni eksport qilishga qaror qilsak, manifest bo'limidagi android: ruxsat parametri yordamida unga kirishni global cheklashimiz mumkin. Ruxsat sifatida siz tizimda allaqachon belgilangan har qandayidan foydalanishingiz yoki o'zingiznikini o'rnatishingiz mumkin. Agar biz ilovalarimiz guruhi uchun provayderga kirishga ruxsat bermoqchi bo'lsak, bu juda qulay. Biz shunchaki barcha ilovalarimizga nostandart ruxsat beramiz va xuddi shu ruxsat bilan provayderga kirishni bloklaymiz. Shundan so'ng, bizning qulay infratuzilmamizdagi barcha ilovalar provayderga o'qish va yozish huquqiga ega bo'ladi.
Yaxshiroq boshqarish uchun siz android: readPermission va android: writePermission parametrlaridan foydalanishingiz mumkin. Ularning nomlaridan ko'rinib turibdiki, ular o'qish yoki yozish uchun alohida cheklovni o'rnatishga imkon beradi. Bundan tashqari, ushbu parametrlar umumiy android: ruxsat parametriga qaraganda yuqoriroq ustuvorlikka ega.
Ammo kirishni boshqarishning yana bir chuqurroq darajasi mavjud. Bu sizga provayder tomonidan taqdim etilgan ma'lum ma'lumotlar to'plamiga kirishga ruxsat berish imkonini beradi. To'liq darajada, bu holda, URI orqali xizmat ko'rsatuvchi provayderga kirish bit.ly .
Afsuski, barcha ishlab chiquvchilar xavfsizlik masalalariga e'tibor berishmaydi, shuning uchun ko'plab ilovalar o'qish va yozish uchun to'liq ochiq bo'lgan operatsion tizimda kontent provayderlarini ro'yxatdan o'tkazadi.
Muammolar va yechimlar
Shunday qilib, biz allaqachon noto'g'ri tatbiq etilgan kontent provayderi bizga tahdid solishi haqida dastlabki xulosalar chiqarishimiz mumkin:
Foydalanuvchining shaxsiy ma'lumotlari va maxfiy ma'lumotlariga ruxsatsiz kirish. Buning sababi tizimda qonuniy yuqori imtiyozli ilova o'rnatilgan ochiq manba kontent provayderi bo'lishi mumkin. Aytaylik, biz mutlaqo qonuniy bo'lmagan dasturimizdan foydalanuvchining SMS-xabarini o'qimoqchimiz. Agar biz to'g'ridan-to'g'ri READ_SMS ruxsatini so'rasak, keraksiz e'tiborni o'zimizga qaratamiz. Ha, va SMSni o'qiydigan dasturni o'rnatadigan odam, siz hali ham qarashingiz kerak. Shu bilan bir qatorda, imtiyozli uchinchi tomon yoki o'rnatilgan ilovani o'rnatgan tizimda allaqachon ro'yxatdan o'tgan kontent provayderini qidirishingiz mumkin.
Ma'lumotlar bazasi provayderlarida SQL in'ektsiya zaifliklari. Afsuski, foydalanuvchi ma'lumotlarini filtrlash butunlay mobil ilova ishlab chiqaruvchisining ixtiyorida. Bundan tashqari, "yaxshilar korporatsiyasi" dasturchilar qadam qo'yadigan hujjatlarda juda ko'p narsalarni qoldirdi. Shunday qilib, Kontent provayderi asoslari Android SDK bo'limida "Zararli kiritishdan himoya qilish" bo'limi mavjud bo'lib, ko'pchilik bunga e'tibor bermaydi. Ishlab chiquvchilar Android-da SQLite ma'lumotlar bazasiga kirish interfeyslari qanday ishlashini aniq tushunmaydilar. Misol uchun, ko'p odamlar android.database.sqlite sinfidagi hamma joyda mavjud bo'lgan so'rovlar usuli mutlaqo xavfsiz deb hisoblashadi. Ammo bu to'g'ri emas, MWR Labs tadqiqotchilari muammoni etarlicha batafsil tasvirlab berdilar va hatto bir nechtasini topdilarSamsung qurilmalaridagi zaifliklar . Shuningdek, ular ilovalarda bunday teshiklarni topishga imkon beruvchi qulay Mercury ramkasini chiqarishdi. Ko'pchilik Ishlab ayting-da, tayyor bayonotlar ishlatmang edi API birinchi versiyasi beri Android bilan.
MWR Mercury buyruq qatori interfeysi
Ushbu nashrdagi boshqa maqolalar:
Kontent provayderlarini tahlil qilish uchun o'z yordamchi dasturingizni yozish
Men ilgari MWR Labs-dan Merkuriy haqida gapirgan edim. Bu ajoyib vositalar to'plami va men undan foydalanishni tavsiya qilaman. Afsuski, men ushbu mahsulotga tegishli bo'lgan foydalanuvchi litsenziya shartnomasini ko'rib, shaxsan xafa bo'ldim. Bundan tashqari, materialni amalda o'rganish yaxshidir, ayniqsa dasturlash juda qiyin bo'lmaganda.
Kontent provayderlarini tahlil qilish uchun Android uchun o'z dasturimizni yozaylik. Biz nima qilmoqchimiz?
Operatsion tizimda ro'yxatdan o'tgan barcha kontent provayderlari haqida ma'lumot olamiz.
Keling, ushbu provayderlarning qaysi biri imtiyozli emasligini aniqlaylik.
Keling, biroz tajriba qilaylik;).
Aytib o'tganimdek, dastur o'rnatilganda provayderlar operatsion tizimda ro'yxatdan o'tadilar. Shuning uchun ma'lumotni olish uchun eng qulay vosita PackageManager bo'ladi.
getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS).size();
...
for (PackageInfo pack : getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS)){
providers = pack.providers;
if (providers != null){
for (ProviderInfo provider : providers){
if (provider.authority != null){
//provider.authority
//provider.readPermission
//provider.writePermission
...
}
}
}
}
ProviderInfo tipidagi ob'ekt bizga kerak bo'lgan barcha ma'lumotlarni o'z ichiga oladi. Biz tegishli ContentResolverni olamiz va natija va mumkin bo'lgan istisnolarni hal qilamiz.
...
try
{
Uri uri = Uri.parse(authority); // Получаем URI вида content: //
...// Подготавливаем параметры для обращения к контент-провайдеру
// Запрашиваем данные у контент-провайдера. В ответ получим курсор или исключение
Cursor c = getContentResolver().query(uri, prj, selection, sel_args, null);
int col_c = c.getColumnCount();
...
// Проходим курсором по результатам запроса
if (c.moveToFirst()) {
do {
// Пробежимся по всем колонкам
for (int i=0; i{
// Если в колонке, возможно, картинка
if (Columns[i].toLowerCase().contains("image"))
{
...
byte[] blob = c.getBlob(i);
// то показываем в hex-виде (можно и отобразить на экране устройства)
s += bytesToHexString(blob);
}
else
{
try
{
// Если содержимое колонки не отображается как текст
s += c.getString(i);
}
catch (Exception e)
{
// показываем как hex
byte[] blob = c.getBlob(i);
s += bytesToHexString(blob);
}
}
}
} while (c.moveToNext());
}
}
catch(Exception e)
{
// Чаще всего исключения возникают из-за недостатка прав или ошибки в запросе, но в любом случае они очень информативны
s += e.getMessage();
...
Ilovamizdagi kodning qolgan qismi foydalanuvchi interfeysini shakllantirish uchun mo'ljallangan, shuning uchun men uni o'tkazib yuboraman. Natijada biz kichik yordamchi dasturga ega bo'ldik. Ilovaning asosiy oynasi. Kontent provayderiga qo'ng'iroq qilish variantlarini tanlash imkonini beradi Ochiladigan ro'yxat. Oʻqish va yozish ruxsatnomalari koʻrsatilgan barcha mavjud kontent provayderlari roʻyxatini oʻz ichiga oladi  Sozlamalar provayderiga so'rov natijasi
Yordamchi dastur tayyor bo'lgach - men va'da qilganimdek, keling, biroz tajriba qilaylik. Men oddiy smartfon, eng yangi rasmiy proshivka va eng keng tarqalgan ilovalarga ega eski Samsung Galaxy S dan foydalanardim.
Telefoningizdagi kontent provayderlari ro'yxatida o'zingiz kulgili narsalarni topishingiz mumkin. Masalan, com.sec.provider.facekey provayderi e'tiborimni tortdi. MWR Labs maslahati bu haqda hech narsa aytmaydi, shunga qaramay, u qandaydir qiziqish uyg'otadi. Gap shundaki, u “biometrik” ekranni blokirovkalash tizimi tomonidan yuz surati asosida o‘rnatiladi va foydalaniladi. Ajablanarlisi shundaki, bu holatda o'qish / yozish imtiyozlari o'rnatilmagan. Keling, "* from sqlite_master--" vektorini SQL in'ektsiya provayderiga o'tkazishga harakat qilaylik.
Biometrik ekran qulfi (Samsung Galaxy S)
Biz ma'lumotlar bazasiga quyidagi shakldagi facefeature plitasi bilan kirganimizni qiziqish bilan bilamiz:
CREATE TABLE facefeature (_id integer primary key autoincrement, facetime long, facefeature blob, faceimage blob);
Ushbu jadvaldagi ma'lumotlarni o'qish oson, aytmoqchi, bizning test yordam dasturimiz hech qanday imtiyozlar so'ramasligini unutmang. Ammo shu bilan birga u sizning yuzingizning xususiyatlarini ham hisobga olishi mumkin :).
Ro'yxatni biroz qazib olgandan so'ng, siz com.settings provayderidan telefon sozlamalarini o'qishingiz mumkin (masalan, kontent: //com.settings/secure). Bu bizda READ_SETTINGS ruxsatiga ega emasligiga qaramay.
Qiziqarli natijaga "content: //com.google.settings/sqlite_master--" murojaat qilish orqali erishiladi (yaxshi, Google ham o'tkazib yuboradi):
Authority: content://com.google.settings/sqlite_master--
Projection:null
Selection:null
Selection args:null
type:name:tbl_name:rootpage:sql:
table;android_metadata;android_metadata;
3;CREATE TABLE android_metadata (locale TEXT);
table;partner;partner;
4;CREATE TABLE partner (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON CONFLICT REPLACE,value TEXT);
index;sqlite_autoindex_partner_1;partner;
5;null;
table;sqlite_sequence;sqlite_sequence;
6;CREATE TABLE sqlite_sequence(name,seq);
index;partnerIndex1;partner;
7;CREATE INDEX partnerIndex1 ON partner (name);
Men boshqa tajribalarni o'quvchiga qoldiraman. Yordamchi dastur uchun barcha manbalar GitHub da mavjud .
Kontent provayderi xususiyatlari qanday o'rnatiladi
Agar siz Android SDK ga murojaat qilsangiz (bu yerda butun jarayon batafsil va bosqichma-bosqich ko'rsatilgan), kontent provayderingizni ro'yxatdan o'tkazish uchun AndroidManifest.xml ga provayder tavsifini qo'shishingiz kerakligini ko'rasiz. bo'limidagi fayl. Bunday holda, siz juda ko'p parametrlarni belgilashingiz mumkin bit.ly , lekin biz faqat biz uchun muhim bo'lganlarni ko'rib chiqamiz:
android:authorities="com.test.provider"
android:name=".provider.MyContentProvider"
android:exported="true|false">
Muhim xususiyat shundaki, ma'lumotlarga kirish "kontent" sxemasi bilan maxsus URI yordamida amalga oshiriladi. Android: organlari parametri provayder uchun noyob identifikator bo'lib, URI ning birinchi qismini ifodalaydi, ikkinchi qism biz qanday ma'lumotlarni olishni xohlayotganimizni ko'rsatadi. Android: eksport qilingan parametr provayder boshqa ilovalar uchun mavjudligini ko'rsatadi. Bu yerda allaqachon ishlab chiquvchining hayotini buzishi mumkin bo'lgan kichik xususiyat mavjud. 16 tagacha bo'lgan Android versiyalarida (Android 4.1 JELLY_BEAN) ushbu parametr sukut bo'yicha "haqiqiy" ga o'rnatiladi va barcha kontent provayderlari eksport qilinadi, albatta, bu holat xavfsiz emas. Ammo faqat 17-versiyadan (Android 4.2 JELLY_BEAN_MR1) operatsion tizimga tuzatish kiritildi va endi provayderni eksport qilish uchun siz standart "noto'g'ri" ni o'zingiz o'zgartirishingiz kerak.
Shunday qilib, bizning holatlarimizda, kontent provayderiga kirish uchun shaklning URI-dan foydalanish mumkin bo'ladi:
content://com.test.provider/give_me_data_with_id/123
Provayderni yozishda ishlab chiquvchining fantaziyasi unchalik cheklangan emas, haqiqat shundaki, faqat oltita mavhum usullarni qayta aniqlash kerak (so'rov (), kiritish (), yangilash (), o'chirish (), getType (), onCreate ()). Shu bilan birga, hech kim ushbu usullarni bo'sh qilishni, har qanday so'rov uchun doimiyni qaytarishni, faylni o'qish yoki tarmoqqa kirishni taqiqlamaydi. Bundan tashqari, agar provayderingiz ma'lumotlarga faqat o'qish uchun kirishni ta'minlasa, unda qo'shish (), yangilash () va shunga o'xshash usullar umuman kerak emas.
Merkuriy logotipi
Va hech kim dasturchini o'z kontent-provayderining ma'lumotlar bazasini "kaput ostida" yashirishga majbur qilmasa ham, ular ko'pincha Android uchun mobil ilovalarni ishlab chiquvchilarga yaxshi ma'lum bo'lgan SQLite-ga duch kelishadi. Bundan tashqari, ma'lumotlarni qabul qilish uchun ishlatiladigan ContentResolver har doim kursor ob'ektini qaytaradi, bu esa ...
MEMENTO MORI
Shunday qilib, biz Android ilovalaridagi zaif tomonlardan birini ko'rib chiqdik. Men operatsion tizim tomonidan taqdim etilgan kirishni boshqarish imkoniyatlaridan maksimal darajada foydalanish qanchalik muhimligini ko'rsatishga harakat qildim.
Mobil ilovalar ishlab chiquvchilari shuni eslatib o'tishadiki, kontent-provayderni yozish orqali siz ma'lumot almashish to'g'risida qaror qabul qilasiz, shuning uchun unga kim va qay darajada kirishi mumkinligini ko'rib chiqishga arziydi. Bundan tashqari, ko'p odamlar SQL in'ektsiyasi zaifliklari nafaqat veb-ilovalarga ta'sir qilishini unutishadi. Shu sababli, hech kim foydalanuvchi kiritgan ma'lumotlarni sanitarizatsiya qilishni va tayyorlangan bayonotlardan foydalanishni hatto Android uchun ham bekor qilmadi.

Download 27,79 Mb.

Do'stlaringiz bilan baham:
1   ...   8   9   10   11   12   13   14   15   ...   18




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©www.hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish