一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Android應(yīng)用程序簽名和權(quán)限增強(qiáng)應(yīng)用程序安全性

 techres 2012-02-07
Android應(yīng)用程序簽名和權(quán)限增強(qiáng)應(yīng)用程序安全性 作者:uugo    文章來源:uugo    點(diǎn)擊數(shù):103    更新時(shí)間:2011-11-7    

沙箱、進(jìn)程和權(quán)限

在 Linux 中,一個(gè)用戶 ID 識(shí)別一個(gè)給定用戶;在 Android 上,一個(gè)用戶 ID 識(shí)別一個(gè)應(yīng)用程序。應(yīng)用程序在安裝時(shí)被分配用戶 ID,應(yīng)用程序在設(shè)備上的存續(xù)期間內(nèi),用戶 ID 保持不變。權(quán)限是關(guān)于允許或限制應(yīng)用程序(而不是用戶)訪問設(shè)備資源。

Android 使用沙箱的概念來實(shí)現(xiàn)應(yīng)用程序之間的分離和權(quán)限,以允許或拒絕一個(gè)應(yīng)用程序訪問設(shè)備的資源,比如說文件和目錄、網(wǎng)絡(luò)、傳感器和 API。為此,Android 使用一些 Linux 實(shí)用工具(比如說進(jìn)程級(jí)別的安全性、與應(yīng)用程序相關(guān)的用戶和組 ID,以及權(quán)限),來實(shí)現(xiàn)應(yīng)用程序被允許執(zhí)行的操作。

兩個(gè) Android 應(yīng)用程序,各自在其自己的基本沙箱或進(jìn)程上

圖:兩個(gè) Android 應(yīng)用程序,各自在其自己的基本沙箱或進(jìn)程上(具有不同的用戶 ID)

Android 應(yīng)用程序運(yùn)行在它們自己的 Linux 進(jìn)程上,并被分配一個(gè)惟一的用戶 ID。默認(rèn)情況下,運(yùn)行在基本沙箱進(jìn)程中的應(yīng)用程序沒有被分配權(quán)限,因而防止了此類應(yīng)用程序訪問系統(tǒng)或資源。但是 Android 應(yīng)用程序可以通過應(yīng)用程序的 manifest 文件請(qǐng)求權(quán)限。

通過做到以下兩點(diǎn),Android 應(yīng)用程序可以允許其他應(yīng)用程序訪問它們的資源:

聲明適當(dāng)?shù)?manifest 權(quán)限

與其他受信任的應(yīng)用程序運(yùn)行在同一進(jìn)程中,從而共享對(duì)其數(shù)據(jù)和代碼的訪問

后者演示在 圖 2 中。

兩個(gè) Android 應(yīng)用程序,運(yùn)行在同一進(jìn)程上

圖:兩個(gè) Android 應(yīng)用程序,運(yùn)行在同一進(jìn)程上(具有相同的數(shù)字簽名和相同的 Linux 用戶 ID)

不同的應(yīng)用程序可以運(yùn)行在相同的進(jìn)程中。對(duì)于此方法,首先必須使用相同的私鑰簽署這些應(yīng)用程序,然后必須使用 manifest 文件給它們分配相同的 Linux 用戶 ID,這通過用相同的值/名定義 manifest 屬性 android:sharedUserId 來做到。

開發(fā)人員用例

圖 3 演示了很多在開發(fā) Android 應(yīng)用程序時(shí)會(huì)發(fā)現(xiàn)的與安全性相關(guān)的用例。

圖 3. 編寫 Android 應(yīng)用程序時(shí)出現(xiàn)的安全領(lǐng)域

圖:編寫 Android 應(yīng)用程序時(shí)出現(xiàn)的安全領(lǐng)域

應(yīng)用程序或代碼簽名是這樣一個(gè)過程,即生成私有、公共密鑰和公共密鑰證書,簽署和優(yōu)化應(yīng)用程序。

權(quán)限是 Android 平臺(tái)的一種安全機(jī)制,以允許或限制應(yīng)用程序訪問受限的 API 和資源。默認(rèn)情況下,Android 應(yīng)用程序沒有被授予任何權(quán)限,不允許它們?cè)L問設(shè)備上受保護(hù)的 API 或資源,從而保證了它們的安全。權(quán)限必須被請(qǐng)求,定義了定制的權(quán)限,文件和內(nèi)容提供者就可以受到保護(hù)。確保在運(yùn)行時(shí)檢查、執(zhí)行、授予和撤銷權(quán)限。

接下來,更加詳細(xì)地來看一下每個(gè)安全領(lǐng)域。

所有 Android 應(yīng)用程序都必須被簽名。應(yīng)用程序或代碼簽名是一個(gè)這樣的過程,即使用私有密鑰數(shù)字地簽署一個(gè)給定的應(yīng)用程序,以便:

識(shí)別代碼的作者

檢測(cè)應(yīng)用程序是否發(fā)生了改變

在應(yīng)用程序之間建立信任

基于這一信任關(guān)系,應(yīng)用程序可以安全地共享代碼和數(shù)據(jù)。

使用相同數(shù)字簽名簽署的兩個(gè)應(yīng)用程序可以相互授予權(quán)限來訪問基于簽名的 API,如果它們共享用戶 ID,那么也可以運(yùn)行在同一進(jìn)程中,從而允許訪問對(duì)方的代碼和數(shù)據(jù)。

應(yīng)用程序簽名首先是生成一個(gè)私有、公共密鑰對(duì)和一個(gè)相關(guān)公共密鑰證書,簡稱為公共密鑰證書。

構(gòu)建 Android 應(yīng)用程序時(shí)可以采用調(diào)試模式和發(fā)布模式:

使用 Android 構(gòu)建工具(命令行和 Eclipse ADT)構(gòu)建的應(yīng)用程序是用一個(gè)調(diào)試私有密鑰自動(dòng)簽名的;這些應(yīng)用程序被稱為調(diào)試模式應(yīng)用程序。調(diào)試模式應(yīng)用程序用于測(cè)試,不能夠發(fā)布。注意,未簽名的或者使用調(diào)試私有密鑰簽名的應(yīng)用程序不能夠通過 Android Market 發(fā)布。

您準(zhǔn)備發(fā)布自己的應(yīng)用程序時(shí),必須構(gòu)建一個(gè)發(fā)布模式的版本,這意味著用私有密鑰簽署應(yīng)用程序。

Android 中的代碼簽名采用一種比其他移動(dòng)平臺(tái)中要簡單得多的方式。在 Android 上,證書可以是自簽名的,這就是說,無需證書授權(quán)。這種方法簡化了發(fā)布過程和相關(guān)的成本。

接下來,介紹如何從命令行以及通過使用 Eclipse ADT 手動(dòng)簽署 Android 應(yīng)用程序。本文中不介紹第三種方法,即使用 Ant。

手動(dòng)創(chuàng)建私有、公共密鑰和公共密鑰證書

回想一下,調(diào)試模式應(yīng)用程序是使用調(diào)試密鑰/證書由構(gòu)建工具自動(dòng)簽名的。要簽署一個(gè)發(fā)布模式的應(yīng)用程序,首先必須生成私有、公共密鑰對(duì)和公共密鑰證書。可以手動(dòng)地或者通過使用 Eclipse ADT 簽署應(yīng)用程序。兩種方法中都使用了 Java Developer Kit (JDK) keytool 密鑰和證書管理實(shí)用工具。

要手動(dòng)生成私有、公共密鑰信息,可以從命令行使用 keytool,如 清單 1 所示。

清單 1. 使用 keytool 生成私有/公共密鑰和證書

  1. keytool -genkey -v -alias -keystore
  2. -keyalg RSA -keysize 2048 -validity

注意:清單 1 假設(shè) JDK 已安裝在您的計(jì)算機(jī)上,并且 JAVA_HOME 路徑被正確定義為指向您的 JDK 目錄(參見 參考資料,獲得下載和設(shè)置信息)。

在 清單 1 中,-genkey 表示一個(gè)公共、私有密鑰對(duì)項(xiàng),以及一個(gè) X.509 v1 自簽署的單個(gè)元素證書鏈,其中包含生成的公共密鑰。-v表示冗長模式。-alias 是用于 keystore 項(xiàng)的別名,keystore 存儲(chǔ)生成的私有密鑰和證書。-keystore 表示使用的密鑰倉庫的名稱。-keyalg 是用來生成密鑰對(duì)的算法。-keysize 是生成的密鑰大小,其中默認(rèn)大小是 1024,但是推薦大小是 2048。-validity 是有效天數(shù);推薦采用大于 1000 的值。

注意:生成密鑰之后,一定要保證密鑰的安全。不要共享私有密鑰,也不要在命令行或腳本中指定密鑰;注意,keytool 和 jarsigner 會(huì)提示輸入密碼。關(guān)于這一技巧和其他技巧,請(qǐng)參考 Android Developers 網(wǎng)站的 “Securing Your Private Key”(參見 參考資料 中的鏈接)。

Keytool 提示您輸入名和姓、公司、城市、州、國家,從這些信息生成一個(gè) X.500 Distinguished Name(更多信息請(qǐng)參見 參考資料),還要輸入保護(hù)私有密鑰和密鑰倉庫本身的密碼。

對(duì)于有效期,請(qǐng)確保使用超出應(yīng)用程序本身和相關(guān)應(yīng)用程序預(yù)期生命期的時(shí)期。如果您是在 Android Market 上發(fā)布應(yīng)用程序,那么有效期必須晚于 2033 年 10 月 22 日結(jié)束;否則不能上載。此外,擁有長壽命的證書讓升級(jí)應(yīng)用程序更為容易。幸運(yùn)的是,Android Market 強(qiáng)制采用長壽命的證書,以幫助您避免此類問題。

手動(dòng)簽署應(yīng)用程序

接下來,使用 jarsigner 工具(它是 JDK 的一部分)簽署未簽名的應(yīng)用程序:

  1. jarsigner -verbose -keystore

在上述代碼中,-verbose 表示冗長模式,-keystore 表示使用的密鑰倉庫的名稱。接下來是應(yīng)用程序的名稱 (.apk),最后是用于私有密鑰的別名。

Jarsigner 提示您輸入使用密鑰倉庫和私有密鑰時(shí)的密碼。

應(yīng)用程序可以使用不同的密鑰進(jìn)行多次簽名,用相同私有密鑰簽名的應(yīng)用程序之間可以建立一種信任關(guān)系,并且可以運(yùn)行在同一進(jìn)程中,共享代碼和數(shù)據(jù)。

手動(dòng)優(yōu)化應(yīng)用程序

簽署過程的最后一步是優(yōu)化應(yīng)用程序,以便數(shù)據(jù)邊界與文件的開始是內(nèi)存對(duì)齊的,這種技術(shù)有助于改善運(yùn)行時(shí)性能和內(nèi)存利用率。要簽署應(yīng)用程序,可以使用 zipalign:

  1. zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk

在前面的代碼中,-v 表示冗長輸出。數(shù)字 4 表示使用四字節(jié)對(duì)齊(總是使用四字節(jié))。下一個(gè)參數(shù)是輸入已簽署應(yīng)用程序的文件名 (.apk),它必須用您的私有密鑰簽署。最后一個(gè)參數(shù)是輸出文件名;如果覆蓋現(xiàn)有應(yīng)用程序,則添加一個(gè) -f。

手動(dòng)驗(yàn)證應(yīng)用程序已經(jīng)簽署

要驗(yàn)證應(yīng)用程序已經(jīng)簽署,可以使用 Jarsigner,這次傳遞 -verify 標(biāo)志:

  1. jarsigner -verify -verbose -certs my_application.apk

在前面的代碼中,-verify 表示驗(yàn)證應(yīng)用程序;-verbose 表示冗長模式;-certs 表示展示創(chuàng)建密鑰的 CN 字段,最后一個(gè)參數(shù)是要驗(yàn)證的 Android 應(yīng)用程序包的名稱。

注意:如果 CN 讀入 "Android Debug",那么意味著應(yīng)用程序是用調(diào)試密鑰簽署的,這表明不能發(fā)布;如果您計(jì)劃在 Android Market 上發(fā)布您的應(yīng)用程序,一定要記得使用私有密鑰。

剛才學(xué)習(xí)了如何手動(dòng)創(chuàng)建私有、公共密鑰,以及簽署和優(yōu)化應(yīng)用程序。接下來,了解如何使用 Eclipse ADT 自動(dòng)創(chuàng)建私有、公共密鑰,以及簽署和優(yōu)化應(yīng)用程序。

使用 Eclipse ADT 創(chuàng)建密鑰和證書,以及簽署和優(yōu)化應(yīng)用程序

要使用 Eclipse ADT 生成密鑰,必須導(dǎo)出應(yīng)用程序。有兩種方法從 Eclipse 導(dǎo)出應(yīng)用程序:

導(dǎo)出您必須手動(dòng)簽署的應(yīng)用程序的未簽署 版本

導(dǎo)出應(yīng)用程序的已簽署 版本,其中所有步驟都由 ADT 為您代勞

導(dǎo)出未簽署的應(yīng)用程序

您可以導(dǎo)出您必須手動(dòng)簽署的應(yīng)用程序的未簽署版本。就是說,您需要手動(dòng)運(yùn)行 keytool(如前所述,是為了生成密鑰)和 Jarsigner(為了簽署應(yīng)用程序),并使用 zipalign 工具優(yōu)化應(yīng)用程序,跟前面解釋的那樣。

要使用 ADT 導(dǎo)出應(yīng)用程序的未簽署版本,可以右鍵單擊項(xiàng)目并選擇 Android Tools>Export Unsigned Application Package(參見圖 4)。

圖 4. 導(dǎo)出未簽署的應(yīng)用程序

導(dǎo)出未簽署的應(yīng)用程序的屏幕截圖

選中之后,ADT 提示您選擇將未簽署應(yīng)用程序?qū)С龅降哪夸洝S涀?,一旦?yīng)用程序被導(dǎo)出,您就必須手動(dòng)簽署和優(yōu)化應(yīng)用程序,跟前面介紹的那樣。

導(dǎo)出已簽署的應(yīng)用程序

利用 Eclipse ADT,您可以導(dǎo)出應(yīng)用程序的已簽署版本。使用這種方法,ADT 提示您輸入以下內(nèi)容:

使用現(xiàn)有 KeyStore 或者創(chuàng)建新的受保護(hù) KeyStore 所需的信息

創(chuàng)建受保護(hù)私有密鑰所需的信息

生成公共密鑰證書所需的信息

要導(dǎo)出已簽署的應(yīng)用程序,可以右鍵單擊項(xiàng)目,但是這一次選擇菜單項(xiàng) Android Tools->Export Signed Application Package,如圖 5 所示。

圖 5. 導(dǎo)出已簽署的應(yīng)用程序

導(dǎo)出已簽署的應(yīng)用程序的屏幕截圖

此時(shí),Export Wizard 執(zhí)行,如 圖 6 所示。

圖 6. Export Wizard

Export Wizard 的屏幕截圖

在 圖 7 中,選擇一個(gè)現(xiàn)有的密鑰倉庫(或者創(chuàng)建一個(gè)新的)和證書。

圖 7. Export Wizard:密鑰倉庫選擇

Export Wizard:密鑰倉庫選擇的屏幕截圖

在 圖 8 中,輸入信息以創(chuàng)建私有密鑰和數(shù)字證書。

圖 8. Export Wizard:創(chuàng)建私有密鑰和數(shù)字證書

Export Wizard:創(chuàng)建私有密鑰和數(shù)字證書的屏幕截圖

在 圖 9 中,輸入目標(biāo)文件的路徑和名稱,并驗(yàn)證有效期間。

圖 9. 輸入目標(biāo)文件的路徑和名稱

輸入目標(biāo)文件的路徑和名稱的屏幕截圖

完成時(shí),您就有了一個(gè)發(fā)布模式的已簽署和已優(yōu)化的應(yīng)用程序,您可以發(fā)布它。

另外,您也可以使用 Android Manifest 工具調(diào)用 Export Wizard,如 圖 10 所示。

圖 10. 使用 Android Manifest 工具調(diào)用 Export Wizard

使用 Android Manifest 工具調(diào)用 Export Wizard 的屏幕截圖

應(yīng)用程序簽署之后,下一步由您在 manifest 中定義應(yīng)用程序需要的權(quán)限。接下來將描述這一過程。

注意,Android Developer 網(wǎng)站有非常好的關(guān)于應(yīng)用程序簽署的文檔,當(dāng)有 Android 平臺(tái)的新版本可用時(shí),這些文檔都會(huì)更新.

使用權(quán)限

權(quán)限是一種 Android 平臺(tái)安全機(jī)制,旨在允許或限制應(yīng)用程序訪問受限的 API 和資源。默認(rèn)情況下,Android 應(yīng)用程序沒有被授予權(quán)限,這通過不允許它們?cè)L問設(shè)備上的受保護(hù) API 或資源,確保了它們的安全。權(quán)限在安裝期間通過 manifest 文件由應(yīng)用程序請(qǐng)求,由用戶授予或不授予。

Android 定義長長的一系列 manifest 權(quán)限,以保護(hù)系統(tǒng)或其他應(yīng)用程序的各個(gè)方面。要請(qǐng)求權(quán)限,可以在 manifest 文件中聲明一個(gè) 屬性:

其中 android:name 指定權(quán)限的名稱。

要得到所有 Android 定義的 manifest 權(quán)限的列表,請(qǐng)參見 Manifest.permisson 頁面。清單 2 是一個(gè) manifest 文件的例子,它請(qǐng)求使用 Internet 的權(quán)限和寫到外部存儲(chǔ)器的權(quán)限:

清單 2. 聲明(請(qǐng)求)權(quán)限

  1. android:versionCode="1"
  2. android:versionName="1.0"
  3. package="com.cenriqueortiz.tutorials.datastore"
  4. android:installLocation="auto">
  5. :
  6. :
  7. :
  8. android:name="android.permission.INTERNET"/>
  9. android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

應(yīng)用程序可以定義它們自己的定制權(quán)限,以保護(hù)應(yīng)用程序資源。其他應(yīng)用程序想要訪問一個(gè)應(yīng)用程序的受保護(hù)資源,就必須通過它們自己的 manifest 文件請(qǐng)求適當(dāng)?shù)臋?quán)限。清單 3 展示了一個(gè)如何定義權(quán)限的例子。

清單 3. 聲明定制權(quán)限

  1. xmlns:android="http://schemas./apk/res/android"
  2. android:name="com.cenriqueortiz.android.ACCESS_FRIENDS_LIST"
  3. android:description="@string/permission_description"
  4. android:label="@string/permission_label"
  5. android:protectionLevel="normal"
  6. >

在 清單 3 中,通過指定最少的屬性,即 name、description、label 和 protectionLevel,定義了一個(gè)定制權(quán)限。也可以定義其他屬性,但是這里沒做介紹。

特別有趣的是 android:protectionLevel 屬性,它表示系統(tǒng)向一個(gè)請(qǐng)求權(quán)限的應(yīng)用程序授予(或不授予)給定的權(quán)限時(shí)應(yīng)該遵循的方法。保護(hù)級(jí)別有普通 和危險(xiǎn)。前者自動(dòng)授予權(quán)限(盡管用戶在安裝之前總是可以重審),基于簽名授予權(quán)限(就是說,如果請(qǐng)求權(quán)限的應(yīng)用程序是用同一證書簽署的);后者表示權(quán)限給予私有數(shù)據(jù)的訪問權(quán),或者具有另一個(gè)潛在的負(fù)面影響。有關(guān) manifest 屬性的更多信息,請(qǐng)參見 頁面(參見 參考資料)。

應(yīng)用程序可以限制對(duì)應(yīng)用程序及其使用的系統(tǒng)組件(比如 Activity、Service、Content Provider 和 Broadcast Receiver)的訪問。通過像 清單 4 中那樣定義 android:permission 屬性,很容易實(shí)現(xiàn)這種限制。這種級(jí)別的保護(hù)讓應(yīng)用程序允許或限制其他應(yīng)用程序訪問系統(tǒng)資源。

清單 4. 定義一個(gè)活動(dòng)的權(quán)限

  1. android:name=".FriendsListActivity"
  2. android:label="Friends List">
  3. android:permission="com.cenriqueortiz.android.ACCESS_FRIENDS_LIST"
  4. :
  5. :

內(nèi)容提供者和文件權(quán)限

內(nèi)容提供者暴露一個(gè)公共 URI,用于惟一地識(shí)別它們的數(shù)據(jù)(參見 參考資料)。要保護(hù)此內(nèi)容提供者,當(dāng)開始時(shí)或者從活動(dòng)返回結(jié)果時(shí),調(diào)用者可以設(shè)置 Intent.FLAG_GRANT_READ_URI_PERMISSION 和 Intent.FLAG_GRANT_WRITE_URI_PERMISSION,以便授予接收活動(dòng)權(quán)限,以訪問特定的數(shù)據(jù) URI。

應(yīng)用程序文件默認(rèn)是受保護(hù)的。文件基于用戶 ID 受保護(hù),因而只對(duì)所有者應(yīng)用程序是可訪問的(此應(yīng)用程序具有相同的用戶 ID)。正如前面介紹的,共享相同用戶 ID(并使用相同數(shù)字證書簽署)的應(yīng)用程序運(yùn)行在相同進(jìn)程上,因而共享對(duì)它們的應(yīng)用程序的訪問。

應(yīng)用程序可以允許其他應(yīng)用程序或進(jìn)程訪問它們的文件。這種允許是通過指定適當(dāng)?shù)?MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE操作模式(以便允許對(duì)文件的讀或?qū)懺L問)或 MODE_PRIVATE(以便以私有模式打開文件)而做到的。您可以在創(chuàng)建或打開文件時(shí)利用以下方法指定操作模式:

  1. getSharedPreferences(filename, operatingMode)
  2. openFileOutput(filename, operatingMode)
  3. openOrCreateDatabase(filename, operatingMode, SQLiteDatabase.CursorFactory)

運(yùn)行時(shí) Permission API

Android 提供各種 API 來在運(yùn)行時(shí)檢查、執(zhí)行、授予和撤銷權(quán)限。這些 API 是 android.content.Context 類的一部分,這個(gè)類提供有關(guān)應(yīng)用程序環(huán)境的全局信息。例如,假設(shè)您想要優(yōu)雅地處理權(quán)限,您可以確定您的應(yīng)用程序是否被授予了訪問 Internet 的權(quán)限(參見確定 5)。

清單 5. 使用運(yùn)行時(shí) Permission API 在運(yùn)行時(shí)檢查權(quán)限

  1. if (context.checkCallingOrSelfPermission(Manifest.permission.INTERNET)
  2. != PackageManager.PERMISSION_GRANTED) {
  3. // The Application requires permission to access the
  4. // Internet");
  5. } else {
  6. // OK to access the Internet
  7. }

要了解其他在運(yùn)行時(shí)檢查、執(zhí)行、授予和撤銷權(quán)限的權(quán)限 API,請(qǐng)參考上下文類。

Android 平臺(tái)上的安全性,包括沙箱、應(yīng)用程序簽名、應(yīng)用程序權(quán)限,以及文件和內(nèi)容提供者權(quán)限。閱讀完這篇介紹性文章之后,您將能夠使用 Eclipse 手動(dòng)創(chuàng)建數(shù)字證書,請(qǐng)求應(yīng)用程序權(quán)限,以及允許或不允許應(yīng)用程序訪問文件和內(nèi)容提供者。此外,您還簡要了解了權(quán)限運(yùn)行時(shí) API,這些 API 允許您在運(yùn)行時(shí)檢查、執(zhí)行、授予和撤銷權(quán)限。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日本女人亚洲国产性高潮视频| 色婷婷视频免费在线观看| 粉嫩内射av一区二区| 欧美性欧美一区二区三区| 午夜精品在线观看视频午夜| 九九热这里只有精品哦| 好吊妞视频免费在线观看| 亚洲国产一区精品一区二区三区色| 午夜精品久久久99热连载| 在线视频三区日本精品| 日韩在线中文字幕不卡| 亚洲欧美国产精品一区二区| 激情综合网俺也狠狠地| 日韩精品一区二区三区av在线| 一区二区三区日本高清| 九九热这里只有免费精品| 五月婷婷综合激情啪啪| 日韩特级黄片免费观看| 日韩欧美国产三级在线观看| 精品香蕉国产一区二区三区| 国产精品免费视频专区| 在线一区二区免费的视频| 91国内视频一区二区三区| 亚洲天堂有码中文字幕视频| 99久久精品国产麻豆| 久久精品国产亚洲av麻豆尤物| 亚洲中文字幕综合网在线| 中文字幕乱码免费人妻av| 国产不卡最新在线视频| 成人你懂的在线免费视频| 国产又粗又硬又长又爽的剧情| 国产一区二区久久综合| 黄男女激情一区二区三区| 国产伦精品一区二区三区高清版| 日本人妻精品有码字幕| 五月激情综合在线视频| 精品久久久一区二区三| 99国产一区在线播放| 欧美日韩国产二三四区| 麻豆视传媒短视频在线看| 日本高清加勒比免费在线|