コンテンツを表示するためにwebviewを使用するアプリケーションがあります.Javascript呼び出しはアプリケーションのコントローラです。 レベルのセキュリティを提供するために、私はコードを難読化しました。これは、htmlファイルとjsファイルを暗号化して実行時に解読したいので十分ではありません。私はこれらのリソースをRC4アルゴリズムで暗号化したapkファイルをパックしました。ファイルをロードするとき、私はjavascriptファイルを解読し、それらをロードしてから、htmlファイルを解読して読み込みます。しかし、これは、Webコンテンツが、データのWebページ:text/htmlが一時的にダウンしているか、永久に移動した可能性があるなどの形でメッセージを表示するため、動作しません。 何が表示されるかを調べるためにonLoadResourceをオーバーロードしました。コンテンツがロードされ、Javascriptコンテンツがロードされているのがわかりますが、ロードされたコンテンツはHTMLでもエスケープされています。android webview encrypted content
私の質問は次のとおりです。 1.アクセスできないようにするには、htmlファイルとjavascriptファイル(assetsフォルダにあります)を保護する方法はありますか? 2.私のアプローチが正しい場合は、私が間違っていることについて誰かに考えさせてください。
ありがとうございます!
以下リソースを復号化し、ロードするコードです:私が使用:
protected void loadWebContent() {
checkEncryptionEnabled();
loadJSFiles();
logger.info("Loaded js ... going for html");
loadAssetFile("www/index.html", "text/html");
}
private void loadJSFiles() {
String[] jsFilesArray = { "app.js", "iscroll.js", "iui.js", "json.js" };
for (String js : jsFilesArray) {
loadAssetFile("www/js/" + js, "application/javascript");
}
}
private void loadAssetFile(String filePath, String mimeType) {
AssetManager assetMgr = getAssets();
InputStream is = null;
try {
is = assetMgr.open(filePath);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] temp = new byte[512];
int bytesRead = -1;
while ((bytesRead = is.read(temp)) > 0) {
baos.write(temp, 0, bytesRead);
}
byte[] encrypted = baos.toByteArray();
String content = null;
/**
* true
* */
if (Config.ENCRYPTION_ENABLED) {
byte[] decrypted = new RC4Encrypter("rc4_key").rc4(encrypted);
content = new String(decrypted, "utf-8");
} else {
content = new String(encrypted, "utf-8");
}
/**
* The webview to use
* */
if("application/javascript".equals(mimeType)) {
webContent.loadUrl("javascript:" + content);
} else {
webContent.loadData(content, mimeType, "utf-8");
}
} catch (IOException ex) {
logger.error(null, ex);
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
}
}
質問:これを行う際に遅延が見受けられますか?私は最大限にすべてのコンテンツを絞り込み、CSS、Googleクローズコンパイラでコンパイルされたjsファイル、イメージ(base64)などを1つのファイルに結合する 'コンパイラ'もビルドしました。これはかなりうまくいく。ファイルのサイズは、例えば1.2MBです。サイズは問題ないようですが、それは速く読み込まれます。しかし、私があなたのように暗号化を使用したとき、それをメモリに解凍することをお勧めします。パニックオーバーヘッドを導入していますか? – Codebeat