allow webdomains for browsers only, otherwise use package name

This commit is contained in:
Philipp Crocoll
2017-12-30 20:36:27 +01:00
parent 6c69119d09
commit c150d24843
4 changed files with 28 additions and 13 deletions

View File

@@ -34,7 +34,7 @@ namespace keepass2android.services.AutofillBase
CommonUtil.logd( "onFillRequest"); CommonUtil.logd( "onFillRequest");
var structure = request.FillContexts[request.FillContexts.Count - 1].Structure; var structure = request.FillContexts[request.FillContexts.Count - 1].Structure;
//TODO package signature verification? //TODO support package signature verification as soon as this is supported in Keepass storage
var clientState = request.ClientState; var clientState = request.ClientState;
CommonUtil.logd( "onFillRequest(): data=" + CommonUtil.BundleToString(clientState)); CommonUtil.logd( "onFillRequest(): data=" + CommonUtil.BundleToString(clientState));
@@ -96,8 +96,8 @@ namespace keepass2android.services.AutofillBase
public override void OnSaveRequest(SaveRequest request, SaveCallback callback) public override void OnSaveRequest(SaveRequest request, SaveCallback callback)
{ {
//TODO implement //TODO implement save
callback.OnFailure("not implemented"); callback.OnFailure("Saving data is currently not implemented in Keepass2Android.");
} }

View File

@@ -1,4 +1,5 @@
using Android.Content; using System.Collections.Generic;
using Android.Content;
namespace keepass2android.services.AutofillBase namespace keepass2android.services.AutofillBase
{ {
@@ -23,8 +24,23 @@ namespace keepass2android.services.AutofillBase
public bool IsValid(Context context, string webDomain, string packageName) public bool IsValid(Context context, string webDomain, string packageName)
{ {
//TODO implement return (IsTrustedBrowser(packageName));
return true;
}
static readonly HashSet<string> _trustedBrowsers = new HashSet<string>
{
"org.mozilla.klar","org.mozilla.focus","org.mozilla.firefox","org.mozilla.firefox_beta","com.microsoft.emmx",
"com.android.chrome","com.chrome.beta","com.android.browser","com.brave.browser","com.opera.browser",
"com.opera.browser.beta","com.opera.mini.native","com.chrome.dev","com.chrome.canary",
"com.google.android.apps.chrome","com.google.android.apps.chrome_dev","com.yandex.browser",
"com.sec.android.app.sbrowser","com.sec.android.app.sbrowser.beta","org.codeaurora.swe.browser",
"com.amazon.cloud9"
};
private bool IsTrustedBrowser(string packageName)
{
return _trustedBrowsers.Contains(packageName);
} }
} }
} }

View File

@@ -103,13 +103,12 @@ namespace keepass2android.services.AutofillBase
bool valid = Kp2aDigitalAssetLinksDataSource.Instance.IsValid(mContext, webDomain, packageName); bool valid = Kp2aDigitalAssetLinksDataSource.Instance.IsValid(mContext, webDomain, packageName);
if (!valid) if (!valid)
{ {
throw new Java.Lang.SecurityException(mContext.GetString( CommonUtil.loge($"DAL verification failed for {packageName}/{webDomain}");
Resource.String.invalid_link_association, webDomain, packageName)); webDomain = null;
} }
Log.Debug(CommonUtil.Tag, $"Domain {webDomain} is valid for {packageName}");
} }
else if (string.IsNullOrEmpty(webDomain))
{ {
webDomain = "androidapp://" + packageName; webDomain = "androidapp://" + packageName;
Log.Debug(CommonUtil.Tag, "no web domain. Using package name."); Log.Debug(CommonUtil.Tag, "no web domain. Using package name.");
} }
@@ -143,7 +142,7 @@ namespace keepass2android.services.AutofillBase
} }
else else
{ {
//TODO implement //TODO implement save
throw new NotImplementedException("TODO: Port and use AutoFill hints"); throw new NotImplementedException("TODO: Port and use AutoFill hints");
//ClientFormData.Add(new FilledAutofillField(viewNode)); //ClientFormData.Add(new FilledAutofillField(viewNode));
} }

View File

@@ -83,7 +83,7 @@ namespace keepass2android.services.AutofillBase.model
} }
AutofillHints = hintList.ToArray(); AutofillHints = hintList.ToArray();
//TODO port updated FilledAutofillField //TODO port updated FilledAutofillField for saving
AutofillValue autofillValue = viewNode.AutofillValue; AutofillValue autofillValue = viewNode.AutofillValue;
if (autofillValue != null) if (autofillValue != null)
{ {