Para habilitar la protección de aplicaciones en sus apps de Android, integre el Anti-Bot SDK (al que se hace referencia como SDK en este tema) antes de activar la función.
Limitaciones
Se requiere el nivel de API de Android 16 o posterior. Si su aplicación está diseñada para un nivel de API anterior, el SDK no funcionará correctamente.
Requisitos previos
Antes de empezar, compruebe que cuenta con lo siguiente:
La función App protection comprada y habilitada. Consulte Procedure to enable app protection.
El paquete del SDK (archivo AAR) para Android. Póngase en contacto con el soporte técnico en el grupo de servicio de DingTalk o envíe un ticket para solicitarlo. El archivo se llama
AliTigerTally_X.Y.Z.aar, dondeX.Y.Zes el número de versión.La app key (clave de autenticación del SDK). Para obtenerla, inicie sesión en la consola de WAF, elija Protection Config > Website Protection, vaya a la pestaña Bot Management, active App Protection y haga clic en Obtain and Copy Appkey.
Cada cuenta de Alibaba Cloud tiene una app key única que funciona para todos los nombres de dominio de su instancia de Web Application Firewall (WAF), tanto en aplicaciones de Android como de iOS. Ejemplo de app key:
****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****
Cómo funciona
El SDK firma cada solicitud saliente de su aplicación. WAF verifica estas firmas en el servidor para detectar y bloquear tráfico malicioso. Después, reenvía las solicitudes legítimas a su servidor de origen.
(Opcional) Crear un proyecto de prueba de Android
Si desea practicar los pasos de integración antes de aplicarlos a su aplicación de producción, cree primero un proyecto de prueba en Android Studio.
A continuación se muestra un proyecto de prueba de ejemplo llamado TigerTally_sdk_test.
Ejecute el proyecto de prueba para comprobar que funciona antes de continuar.
Integrar el SDK
Paso 1: Abrir el proyecto en Android Studio
Abra su proyecto en Android Studio y vaya al directorio de archivos del proyecto.
Paso 2: Agregar la dependencia AAR
Copie
AliTigerTally.aaren el directoriolibsde su proyecto. También puede arrastrar el archivo directamente al directorio.-
Abra
build.gradley agregue las siguientes configuraciones:-
Declare
libscomo un repositorio local:repositories { flatDir { dirs 'libs' } } -
Agregue una dependencia de compilación:
dependencies { compile(name: 'AliTigerTally_X.Y.Z', ext: 'aar') }Importante: Reemplace
X.Y.Zpor el número de versión real del nombre del archivo AAR que descargó.
-
Haga clic en Sync Now para aplicar los cambios.
-
Si utiliza ProGuard para ofuscar su aplicación, agregue la siguiente regla a su archivo de configuración de ProGuard inmediatamente después de agregar la dependencia. Esto evita que se eliminen las clases del SDK durante la compilación, lo cual provocaría errores en tiempo de ejecución.
-keep class com.aliyun.TigerTally.* {*;}
Paso 3: Configurar filtros de bibliotecas nativas (si es necesario)
Omita este paso si su proyecto ya incluye un archivo SO. De lo contrario, agregue el siguiente bloque ndk a build.gradle:
android {
defaultConfig {
ndk {
abiFilters 'arm64-v8a', 'x86', 'armeabi-v7a'
//abiFilters "armeabi-v7a"
}
}
}
Paso 4: Solicitar permisos
Agregue los siguientes permisos a su archivo AndroidManifest.xml. Solo INTERNET es obligatorio para que el SDK funcione.
|
Permiso |
Obligatorio |
Solicitud en tiempo de ejecución (Android 6.0+) |
Descripción |
|
|
Sí |
No: se otorga automáticamente durante la instalación |
Permite que el SDK envíe solicitudes firmadas a WAF. |
|
|
No |
No: se otorga automáticamente durante la instalación |
Lee el estado de red del dispositivo para mejorar las señales de riesgo. |
|
|
No |
No: se otorga automáticamente durante la instalación |
Lee el estado de la conexión Wi-Fi para mejorar las señales de riesgo. |
|
|
No |
Sí: debe solicitarse en tiempo de ejecución |
Lee la identidad del dispositivo para mejorar las señales de riesgo. |
|
|
No |
No: se otorga automáticamente durante la instalación |
Lee la información del dispositivo Bluetooth para mejorar las señales de riesgo. |
|
|
No |
Sí: debe solicitarse en tiempo de ejecución |
Lee el almacenamiento externo para mejorar las señales de riesgo. |
|
|
No |
No: se otorga automáticamente durante la instalación |
Modifica el estado de conectividad de red para mejorar las señales de riesgo. |
Paso 5: Agregar el código de integración
5a. (Opcional) Establecer el identificador de usuario
Llame a setAccount() para asociar un identificador de usuario con las solicitudes del SDK. Esto ayuda a que WAF aplique políticas de protección a nivel de usuario. Omita esta llamada si el usuario no ha iniciado sesión y llame directamente a init().
// Signature: int setAccount(String account)
// Returns: 0 on success, -1 on failure
final String account = "account"; // Use a masked user ID
TigerTallyAPI.setAccount(account);
|
Parámetro |
Tipo |
Descripción |
|
|
|
El identificador de usuario. Utilice un valor enmascarado para proteger la privacidad del usuario. |
5b. Inicializar el SDK
Llame a init() una sola vez cuando inicie su aplicación. Esta acción recopila por única vez la información del dispositivo que se usa para el análisis de riesgos.
Hay dos modos de recopilación disponibles:
DEFAULT: recopila todos los datos del dispositivo, incluidos los campos sensibles (imei,imsi,simSerial,wifiMac,wifiList,bluetoothMac). Requiere los permisos correspondientes. Utilice este modo después de que el usuario acepte la política de privacidad de la aplicación.NOT_GRANTED: omite los campos sensibles. Utilice este modo antes de que el usuario acepte la política de privacidad.
// Signature: int init(Context context, String appkey, int type)
// Returns: 0 on success, -1 on failure
final String appkey = "your_appkey";
// Full data collection (after user accepts privacy policy)
int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, TigerTallyAPI.CollectType.DEFAULT);
// Exclude sensitive fields (before user accepts privacy policy)
int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, TigerTallyAPI.CollectType.NOT_GRANTED);
Log.d("AliSDK", "ret:" + ret);
|
Parámetro |
Tipo |
Descripción |
|
|
|
El contexto de la aplicación. |
|
|
|
La app key obtenida desde la consola de WAF. |
|
|
|
Modo de recopilación de datos: |
5c. Firmar la solicitud
Llame a vmpSign() antes de cada solicitud HTTP saliente. Pase el cuerpo de la solicitud como un arreglo de bytes. Para solicitudes GET o cuerpos POST vacíos, pase null o "".getBytes("UTF-8").
// Signature: String vmpSign(int signType, byte[] input)
// Returns: the wToken signature string
String request_body = "i am the request body, encrypted or not!";
String wToken = null;
try {
wToken = TigerTallyAPI.vmpSign(1, request_body.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Log.d("AliSDK", "wToken:" + wToken);
|
Parámetro |
Tipo |
Descripción |
|
|
|
Algoritmo de firma. Establézcalo en |
|
|
|
El cuerpo de la solicitud que se va a firmar. Pase |
5d. Agregar la firma al encabezado HTTP
Establezca el valor de wToken como una propiedad del encabezado HTTP antes de enviar la solicitud. En el siguiente ejemplo se utiliza HttpURLConnection:
String request_body = "i am the request body, encrypted or not!";
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL("https://www.aliyundoc.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5000);
conn.setRequestMethod("POST");
// Add the wToken signature to the request header
conn.setRequestProperty("wToken", wToken);
OutputStream os = conn.getOutputStream();
// Write the request body
byte[] requestBody = request_body.getBytes("UTF-8");
os.write(requestBody);
os.flush();
os.close();
int code = conn.getResponseCode();
Log.d("respCode", Integer.toString(code));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
Qué sucede después de la integración
Una vez completada la integración, el proceso para cada solicitud saliente que envíe su aplicación es el siguiente:
vmpSign()genera una firmawTokena partir del cuerpo de la solicitud.Su código adjunta
wTokencomo un encabezado HTTP.WAF inspecciona el encabezado
wToken, bloquea las solicitudes que no superan la verificación de firma y reenvía las válidas a su servidor de origen.