keepassxreboot / keepassxc

KeePassXC is a cross-platform community-driven port of the Windows application “Keepass Password Safe”.
https://keepassxc.org/
Other
20.99k stars 1.45k forks source link

Support multiple urls per entry [$30 awarded] #398

Closed Kaito23 closed 4 years ago

Kaito23 commented 7 years ago

Hey,

is it possible to add multiple urls to a single entry? Maybe a cool feature? (Working with passiFox)

Greetings Kaito

phoerious commented 7 years ago

You can only add one URL per entry. But you can add more as custom attributes when needed. 2.2.0 will also support references, so you create multiple entries referencing each other where only specific fields are different (e.g. the URL).

ibrokemypie commented 7 years ago

Would there be an option to show the referenced entries as simply being additional attributes in the first, so that the number of entries remains the same and everything is held together? Understand that due to the keepass compatibility that it is not possible to do this in the database, but displaying it otherwise in app would be a good workaround

TheZ3ro commented 7 years ago

Hiding entry just because they have reference seems a little confusing to me and it will be complex to implement. We already have a nice way to display Reference-entry. Does some other KeePass-compatible program do that?

ibrokemypie commented 7 years ago

Not as far as I know, my thinking was just that if a user simply wants multiple urls for the exact same entry, we deliver that to the user, while keeping the keepass backend exactly the same. eg Entry: Microsoft username: whatever password: *** url: microsoft.com url: live.com url: office.com

it is the exact same account over all 3 urls, so wouldnt it make more sense to display it as a single entry to be updated and interacted with, and display one entry in keepassxc rather than 3?

phoerious commented 7 years ago

We need to remain compatible with other KDBX implementations. You can of course, add multiple URLs as advanced/custom fields.

ibrokemypie commented 7 years ago

then we will need to broaden the keehttp protocol to integrate that with the extensions though, would we not?

droidmonkey commented 7 years ago

No, this is already a feature in the http plugin. It searches the attributes for a specific key name. I believe that is in the settings

ibrokemypie commented 7 years ago

what is the standard for more than two urls? two seems fine, however you cant have more than one field with the same name, and it doesnt detect when two urls are in the same field

droidmonkey commented 7 years ago

Looks like you create an attribute with the name of "KPH: XXXX" and the value of the URL you want to match against. XXXX can be anything

yan12125 commented 7 years ago

Many people mentioned that KeeFox has this feature [1][2], so I studied its implementation. Detailed descriptions with a screenshot can be found at KeeFox's wiki page. [3]

Data for additional URLs are stored in an advanced attribute "KPRPC JSON". It stores more than additional URLs.

{
    "version":1,
    "alwaysAutoFill":false,
    "neverAutoFill":false,
    "alwaysAutoSubmit":false,
    "neverAutoSubmit":false,
    "priority":0,
    "altURLs":["https://foo.com"],
    "hide":false,
    "blockedURLs":["https://bar.com"],
    "regExBlockedURLs":["https://bad.com"],
    "regExURLs":["https://good.com"],
    "blockHostnameOnlyMatch":false,
    "blockDomainOnlyMatch":false
}

The implementation can be found in keepassrpc, the backend behind KeeFox. [4]

[1] https://github.com/pfn/passifox/issues/296#issuecomment-54646160 [2] https://sourceforge.net/p/keepass/discussion/329220/thread/cb922dee/#5027 [3] https://github.com/kee-org/KeeFox/wiki/en-%7C-Using-KeeFox-%7C-Alternative-URLs [4] https://github.com/kee-org/keepassrpc/blob/master/KeePassRPC/KeePassRPCService.cs#L1784

yan12125 commented 6 years ago

Another implementation submitted to pfn/keepasshttp: https://github.com/pfn/keepasshttp/pull/340

It put configurations in KeePassHttp Settings. The limitation is that it only allows one regular expression.

themasch commented 6 years ago

Since this KeePassHttp thing is dying (#913) and KeePassXC-Browser is here I'd like to ask if this feature has a chance to be implemented? I'd really like to be able to use a single entry from multiple urls since the websites are using the same database.

I know I could create multiple entries that use references, but that would generate redundant entries that only vary in the URL which doesn't feel "right" for me.

It would also be totally fine to me if keepassxc-browser could use the additional properties for the lookup so I could add these urls there. By this the entry would still contain only one URL which is opened by keepassxc but the browser plugin could find the same entry for other urls, too.

neochrome commented 6 years ago

Also entries can't reference custom fields, so TOTP Seeds needs to be duplicated. I think it would be better to support multiple urls via some additional setting like KPH: urls which could be multiline

yan12125 commented 6 years ago

I created a proof-of-concept patch at https://github.com/keepassxreboot/keepassxc/pull/1769. I'll be glad to hear some feedback :)

vasyugan commented 5 years ago

What about just supporting the scheme KeeFox (now Kee) uses? I don't know if I am the only one, but I am extensibly making use of KeeFox' multi URL feature, and having to replicate all of that for KeePassXC would be a bit frustrating. Why can't KeeKassXC re-use what is already there?

droidmonkey commented 5 years ago

Can you link us to this scheme? There is literally nothing in the KDBX scheme that supports this feature. It is a custom job no matter what.

yan12125 commented 5 years ago

Can you link us to this scheme?

https://github.com/keepassxreboot/keepassxc/issues/398#issuecomment-326755012

Quite near :)

droidmonkey commented 5 years ago

Oh lol

phoerious commented 5 years ago

I think we can implement multiple URLs quite easily. Just add new URL fields and add a counter to their name. In other implementations, they will just appear as additional string fields. The KeeFox implementation is extremely ugly, though.

AdamPS commented 5 years ago

I started a bounty https://www.bountysource.com/issues/43057047-support-multiple-urls-per-entry please join in if you would like to see this feature.

AustinCGomez commented 5 years ago

I saw this on BountySource and I am gonna give my best shot at solving this!

AdamPS commented 5 years ago

@austinprog Great thanks!

droidmonkey commented 5 years ago

@austinprog Just a tip, we want to make sure the eventual solution is fully compatible with the template system. See #863

AustinCGomez commented 5 years ago

Thanks! I just got the build up and working on my Debian VM. I am currently exploring the code base and understanding how it all works. I will look at #863 shortly. I also will be hopping on the IRC soon to chat

droidmonkey commented 5 years ago

Alternatively, we could support a flexible "URL" field that defaults to a size of 1 and has a "+" button to add more which are stored as additional attributes. This would apply anywhere a "URL" field is requested and operate the same across templates.

Quick mockup I made:

image

AustinCGomez commented 5 years ago

@droidmonkey and everyone else That seems like a good mockup. I will try to implement it the way you mentioned in your diagram. I am starting to understand the code base a little better and hopefully will start working on a fix in the next few days. :)

AustinCGomez commented 5 years ago

I hate to say this but I believe that this issue might be a little out of my skill level at the moment. I am sorry. Therefore, I am relinquishing my request to fix this and someone else and can try. :)

AdamPS commented 5 years ago

@austinprog Thanks for trying! I plan to offer some other bounties on this add-on so maybe there will be another chance.

sebast889 commented 5 years ago

The above mockup seems it like it could become cluttered UI wise if there are many URLs.

Is there a way to expand the URL field by adding a dropdown arrow so that when clicked it becomes a Notes like field where each new line can take a URL?

droidmonkey commented 5 years ago

Interesting idea!

varjolintu commented 5 years ago

https://github.com/keepassxreboot/keepassxc/pull/3444 could be expanded in the future to hold multiple URL's for a single entry, just for browser extension use. Those URL's could be saved to custom data instead of attributes.

yan12125 commented 5 years ago

3444 could be expanded in the future to hold multiple URL's for a single entry, just for browser extension use. Those URL's could be saved to custom data instead of attributes.

Glad to hear that!

However, I think #3444 will not be compatible with templates mentioned in https://github.com/keepassxreboot/keepassxc/issues/398#issuecomment-489799372? Templates use attributes instead of custom data (https://github.com/keepassxreboot/keepassxc/issues/863#issuecomment-476537687).

I think #3444 is a better approach as in templates the number of fields is fixed, while the number of extra URLs should be flexible.

If #3444 is the way to go, I might check if it's possible to import data from Keepass2Android (https://github.com/keepassxreboot/keepassxc/issues/863#issuecomment-524256307) and KeeFox (https://github.com/keepassxreboot/keepassxc/issues/398#issuecomment-326755012).

varjolintu commented 5 years ago

Maybe it's the attributes then, so everything would be compatible with the templates.

AdamPS commented 5 years ago

I think it's really important to be compatible with Keepass2Android because many users will use the same database on PC and Android.

varjolintu commented 5 years ago

I agree. Supporting KP2A_URL and KP2A_URL_[counter] directly would do the job.

varjolintu commented 5 years ago

Work is in progress: https://github.com/varjolintu/keepassxc/tree/feature/multiple_urls if you want to try it, but it's not ready for an official PR yet.

For now, the URL's can be added/edited/removed via the new Browser Integration page under Entry settings. But it's also fine to add the custom attributes manually. This list reads the KP2A_URL attributes directly.

Screen Shot 2019-09-08 at 12 27 29

AdamPS commented 5 years ago

Great thanks @varjolintu . I don't have my own build environment set up so I can't try it yet but as soon as there is a built release I would be very happy to try it.

droidmonkey commented 5 years ago

There is a bounty in your future!

AdamPS commented 4 years ago

It's very nice many thanks @varjolintu

zeorin commented 3 years ago

Is there a way to bulk-add sites? The Stack Exchange network of sites currently has 176 sites in it, and they all use the same login credentials. Adding them one-by-one is clearly impractical.

varjolintu commented 3 years ago

@zeorin Just use https://stackexchange.com as your entry URL. It will cover all subdomains.

zeorin commented 3 years ago

Good point. There are a few that aren't subdomains (AskUbuntu, StackOverflow, etc.) but that's manageable.

Vakke commented 2 years ago

Why the minimum URL match accuracy was deemend not to usable and this additional URL to be used instead?

E1: I migrated from Bitwarden to KeepassXC and I have many legacy URLs which have different URLs to same site. KeepassXC is unable to recognize almost any website which have these external pop up window logins etc with different URLs and would need a manual reset on almost every site. Keepass addon Kee has this URL match accuracy which seems to be very accurate and helps with the pop up login fields.

I don't know does anybody else have these issues but I would really like to migrate to KeepassXC rather than be on Keepass or Bitwarden but I'm way too lazy to manually correct over 1000 URLs.

E2: Also a one solution would be a somekind of an URL checker program which would get rid off any other than the needed for KeepassXC, for example, https://www.nba.com

E3: Or I just edit everything when these occur. Damnit.

Hidigoudi commented 3 months ago

Why this feature is not included inside the Debian 12 KeePassXC package ?

Here is my current version :

KeePassXC - Version 2.7.4
Revision: 63b2394

Qt 5.15.8
Debugging mode is disabled.

Operating system: Debian GNU/Linux 12 (bookworm)
CPU architecture: x86_64
Kernel: linux 6.1.0-21-amd64

Enabled extensions:
- Auto-Type
- Browser Integration
- SSH Agent
- KeeShare
- YubiKey
- Secret Service Integration

Cryptographic libraries:
- Botan 2.19.3

Is it because Debian team removes some "parts" of the software ?

varjolintu commented 3 months ago

@Hidigoudi If Browser Integration is enabled, the feature should be there.

Hidigoudi commented 3 months ago

Oh ok I see, is it work with Auto-Type also ? If browser integration is enabled I mean. Is there a link with the Browser Extension, it's weird ?!

varjolintu commented 3 months ago

@Hidigoudi Those are two different features. The only thing common between those two is that the browser extension can launch Global Auto-Type directly using the web site URL for matching.

Hidigoudi commented 3 months ago

Ok I understand, but is there any technical limitation to provide multiple URLs per entry for those using only Auto-Type ? I'm not a developer so this might be a stupid question...

varjolintu commented 3 months ago

@Hidigoudi I'm not 100% sure how those will work with just Auto-Type enabled in the compiler flags. Basically the additional URL's are just attributes starting with KP2A_URL , for example KP2A_URL_1.

droidmonkey commented 3 months ago

Are you typing the url with autotype? If not then you don't need to do anything. If so, use {S:KP2_URL}