{"id":13470679,"url":"https://github.com/jstrieb/link-lock","last_synced_at":"2025-04-14T06:06:22.705Z","repository":{"id":43036431,"uuid":"264746231","full_name":"jstrieb/link-lock","owner":"jstrieb","description":"Password-protect URLs using AES in the browser; create hidden bookmarks without a browser extension","archived":false,"fork":false,"pushed_at":"2025-01-25T01:54:06.000Z","size":59,"stargazers_count":897,"open_issues_count":5,"forks_count":171,"subscribers_count":21,"default_branch":"master","last_synced_at":"2025-04-14T06:06:11.597Z","etag":null,"topics":["aes","aes-encryption","bookmark","distributed","encrypted-links","encryption","encryption-decryption","hidden-bookmark","hidden-bookmarks","javascript","locked-links","static-site","web-application"],"latest_commit_sha":null,"homepage":"https://jstrieb.github.io/link-lock","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jstrieb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-17T19:59:36.000Z","updated_at":"2025-04-11T13:37:46.000Z","dependencies_parsed_at":"2024-03-25T05:26:22.732Z","dependency_job_id":"db3f7a37-8846-48ee-9a6f-5ce23bb7f287","html_url":"https://github.com/jstrieb/link-lock","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jstrieb%2Flink-lock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jstrieb%2Flink-lock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jstrieb%2Flink-lock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jstrieb%2Flink-lock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jstrieb","download_url":"https://codeload.github.com/jstrieb/link-lock/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248830397,"owners_count":21168272,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aes","aes-encryption","bookmark","distributed","encrypted-links","encryption","encryption-decryption","hidden-bookmark","hidden-bookmarks","javascript","locked-links","static-site","web-application"],"created_at":"2024-07-31T16:00:33.785Z","updated_at":"2025-04-14T06:06:22.672Z","avatar_url":"https://github.com/jstrieb.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# Link Lock\n\n[Password-protect URLs using AES in the\nbrowser.](https://jstrieb.github.io/link-lock)\n\nLink Lock now supports secure, hidden bookmarks via bookmark knocking! Read\nmore [here](https://jstrieb.github.io/projects/hidden-bookmarks).\n\n\n\n## About\n\nLink Lock is a tool for encrypting and decrypting URLs. When a user visits an\nencrypted URL, they will be prompted for a password. If the password is\ncorrect, Link Lock retrieves the original URL and then redirects there.\nOtherwise, an error is displayed. Users can also add hints to display near the\npassword prompt.\n\nEach encrypted URL is stored entirely within the link generated by the\napplication. As a result, users control all the data they create with Link\nLock. Nothing is ever stored on a server, and there are no cookies, tracking,\nor signups.\n\nLink Lock has many uses:\n\n- Store private bookmarks on a shared computer\n- Encrypt entire web pages (via [URL\n  Pages](https://github.com/jstrieb/urlpages))\n- Send sensitive links over public or insecure channels (e.g., posting links\n  to a public website that require a password to access)\n- Implement simple CAPTCHAs – particularly effective against basic web scrapers\n  that do not respect `robots.txt`\n- Add a password to shared Dropbox or Google Drive links\n- Share password-protected magnet links and torrents\n- [Evade censorship](#evading-censorship)\n\nLink Lock uses AES in GCM mode to securely encrypt passwords, and PBKDF2 and\nsalted SHA-256 (100,000 iterations) for secure key derivation. Encryption,\ndecryption, and key derivation are all performed by the [`SubtleCrypto`\nAPI](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto). The\ninitialization vector is randomized by default, but the salt is not.\nRandomization of both the initialization vector and salt can be enabled or\ndisabled by the user via \"advanced options.\" The salt and initialization vector\nare sent with the encrypted data if they are randomly generated. The API is\nversioned such that old encrypted links will always work, even if later\nversions of Link Lock are updated to be more secure. Please read the code\n([`api.js`](https://github.com/jstrieb/link-lock/blob/master/api.js) in\nparticular) for more information.\n\nRead the Hacker News discussion [here](https://news.ycombinator.com/item?id=23242290).\n\nAlso [discussed on\nr/netsec](https://www.reddit.com/r/netsec/comments/i3n4sm/link_lock_password_protect_urls_using_aes_in_the/)\nand [discussed on\nr/programming](https://www.reddit.com/r/programming/comments/i5kpjx/link_lock_is_a_tool_for_encrypting_and_decrypting/).\n\n\n\n## Examples\n\n- [Regular link encryption](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiRkVJR0FzdE53NXFzM1N1N0pVQUtlOEJpWWtYWERaU012WmFDdWxZYWo2eFJzY2lDRGJXd3VZRmFkdVpqbEN4UDN4S0lWQXRoMmJHcjhHWUciLCJoIjoiXG5QYXNzd29yZDogaGFja2VybmV3cyIsImkiOiJBOWJMZkFKbXJ1RFplWktJIn0=) - Password: hackernews\n- [Encrypt entire\n  pages](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiWWhjbG0xeE9uZTJWU2tvc3N1WERwKytyN1lscW1nMVNNemRoSUVER2xVZVBTUFZ3MFA3WTVwQXdnVFVKZkt4WHJ4Nlg1KytCU09RNlVTTlI3M244VEdTeWJGMmJFTG5wc0x6WVRtZnQ3aDFZSzJ5VW16TEpBTk5VOThqZFMvTVFNUG93cWdoRjVUVnYyRWF1VkVHVVlJeE5iT3BtaldCNWJyMWpXemMyakJTNUxZVGVSajNTbVI5UWNwWlRWWmVrbit4Rzd3VzNIcEttRTdVRWNtbkhZS2dydGVmaHp5eTJGNVd6N1NKSm55OTJPWnJUOEFHUE9XY3JUbmxYV0NsTDB5QjVsQmZnUTJkcHk4Y3RmMHNvdVlvb1l2LzQ1U3krZUNtdHl2WkVDd25IeUhwUForamxsaDhuNUV5U2N1ZVRWTmRtRmlmOFBhM0FtdUpQOTdTYWZXbzNwbUo4cU40UFYvMllQbHlwSGFtTmI1dnBBQkc2cU1yUWlLMVp3WHBUSnF4OG9NNFdVVGh3L3B5S0QzOWRNNml2RlNzQzVRUWpaVHl0ODlSNDNVOVdkRDVMWHprdlZ1bVpNSmM2WDExTkI4V0ZSKzdyOGVvVU8wR21rRkxTU0JlaDJickt3bzkwWjRlZkJHTkZiYWE2dU9SWnQzSm1YU0NSSGZyclVRQ053cU96R2pCKzBYZHJFeC9NbHd3QkFKNTIvY0EraW9IUDk5RkszUDN1MlN6Sk1uQzVVSFg1NGNDd1Z2dWdiMzAvUmNsMjZvZzFxUDU0NWJlMGFiak9wYnZ5aFp6RjhkdDNUUjJFLzBMY2dUQUg4dE5wSVAyYzJoM2d4NlJEQUNTZ25LRzlteW4xdFU4Y0IwbWMrd1NPdkxIRlVXVXhIYnpGSkR0aS9MSDg1RDFvdVRNWTFjM3BsSSsxRFFROG5lbjVrR2hmRUhELzdsSFhIY1ZWTHNCbi9HOTFJZU02T2pTeS9aZFcySGZ4d050VzR2WEE3em1FdjhYRDNHL3M2ZTVqdVdQWjV3ck5JWFdzcDVROHdUSlI3U2JQUi94VDNwUUZncW9LaDF2OXVEWGZBaE5xYStXaElzNTlaR1UzdFlkRVFOZEVLdGpIcnF1bzJkcVpuNnB4eTU1ZDJiOVBrcFRLNGh5TEtDOEc1TmN3TEE3dUIzYTNlNlZ2NjVVVHcrdS9oWTBoMy9Nb3ZJaERmT3k2aGZiN2FQaEIyMStxSGZSeWt2VlFPUFZrbE41ak5EK1hKZURialgvd0NUWXJJVm0yOFZkTHppZURob2ZpRGpJRjdyakFQNlF6dWJjaGJYRGFtbFZQWUhOaGVNMWdTeGROSGw5a1lRVE5kbjA1WlcvbVhXNkQwbHk0VkwrOHRwZzdxQjU2YTRyL3lIWHA0Q0tSUkdIaEVWQUptbmh2ZnBaWE11QWdneGVoSkRibVdVKy9VMUgwM2JicUZub2h5R0VGRUxQV2JjZ05kdDJwWU1Cdy81TVNqSkdWWWRPQk5nTUsxbHA2ZVRxRGhwTVdJT2E4a1dSYWx3RzV1bDhuQjhnUVBkcXBCYVdxc3I3V242SVZoZHdLc0FvTGtsdTlnL0JoelNlZEQxRjcyblprN2tSS2l3a3BJbVhOeW9TQk1SSFJSMURjSm9qdU1ZVWlrZ2JxM0dpR2ZqNmMwTTBlU2lyMlhJRnRCTzd2VkJyRmpZL1pvVnJBQ1kwTzJ2UVlGcHovaEprNElKN0daOUpmc3U4ajl5Umc5S3IrNFU3MFhoZHRLY1VYeEtrbCt1VDBtN1owb2puR0xWOGRtampzTVdna3ZhV0FYNkJpK3cycVJKYnVYRW5yUEN5dUZGODhiZ2k3UDNYUVhOMHZTY3h2Uk4wVktKQ1MvR2RVWTJsZ0lDSXVBWFlUVE9KTGNsRkJPQWxialRmZThoTG5saTkzQm4xcnZOamhnM0Y2UkJ2N3NQOTlzODlGT3pwcEZHeHVKS1RhNEg4Y2NSRmxMWDBWbE9kR0RhNWM0NGVTdzh5dCsxWWJndDlvMlExcWNSYVZsaVdadSs5VjdxM1pqcWIxcDdKb2FUN0pDQ1U2ZXR6b0dJWjBQT1JqL3pVNUlVQkRjYXdHZWszZ0djSDBLdDcxa1NSN0F2TWRYeTR3WVI4ZmdTTlpoR3gwSTZYczZ5Vy9oWFB1WERPRjNHTVBTRFFmNGNhUjBuc3pmYTl3MXdGMzVSYktodEVkZnIwU0NLQzhIRXFzNWdsQ0M4RmIxN04wbGtBVlFwSWFRRGJrN254TjVINEFhQ3RKbU5JNHFYUDhocUV6aVhySGhhZWNzNkVBUDBvdjg2cWp4dz09IiwiaCI6InVybHBhZ2U1IiwiaSI6InJNZ2xiSEpzK3pSL2dteFAifQ==) - Password: urlpage5\n- [Implement a simple\n  CAPTCHA](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiZEx3Yi9CNitlK0ZjM1B3ZURrbUY2NjdQWFlIV1dsS3dpclhvZmkvRXBFTXU0ZERlVkJuSmUrN1loS2JxQ3RrPSIsImgiOiIxICsgMSA9ID8iLCJpIjoiRDJYd1MyK1EzaHpuUDV1NyJ9)\n- [Emoji\n  support](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiU1ZBemc0NUVoeXJMR1hXYmRUMXpLSFFIa0hiR2F3SzlMaWZzWW5SL0ZiaGp1cnZqMGg5VTE0bG9kVGs3S3B0TjdhcjZ2T3FvRjJLNkxMcDByL05PZE5nUTJ3UlhVOWM2RmFJdXNGajdrNkFkTC82OVJ6dmlFV2R0dWVacFM1dS9SN2w4L3Mzc1pMTVJNeHdhTVhVenYxTjZUVkdWTGloaXc3ZXlGY093Nkp2ZVN3aGl0OW9XWW84Yk9CMkpkTTF4ZnFRSGExbEoiLCJoIjoi8J+lkSIsImkiOiI5L3pmdHFmeHdoWFh4bDc4In0=) - Password: avocado\n- [Riddles in the dark](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiYkV5TzZDZ0VwVXZOU2xucWZiQlo3YUdYa1pSL1lub00vekJNaTBMS1VQRXVicktJQTBhS00zNkNEK0tDWXYxd3l0L2dxWTFMS0NPQnFLTldSSEpsYXVodEQ4L0dKVkU3eTFnb2JZalRmcXFtWmpRQTlVMmNhL3dJb2JvMk5DdENnWTZYMHE5MHJzZDk1L0Z6K2orNGlYSHJBa2htN01kL2pJRnNIeDIwZlNVTEFadUpyNjF6TTRucS9nQTZNcW9OS1VKaUxpSWdEakdUd0dhRmdER29OdHJ5Kzd1cUtVbW1BbWQvbWlISERqRDY3bjRtSDA5eWtndlIyVnkzanRsdU44S0puMWdkYWlTeGQvWVhXcUR2WUhrMWIzOVFlSnlIYUV5Q3ZlQkJoQ1RzZDVJbG1obU45WjB0UTdoYUpGVUl1R2hxOTNrOC82MDhpbUxKR0p0M1VNbHRHcEZJck9wUGJuSTlSVkg4WGhwVFh5aEc0Q0ZWajNNU1FGWHdLOXRkc1M4MGF0VGc1MXliZHBEcVIwV1dtWHJBN0hIQ1RCV253WEQ4SGR3SWZidkNmR2s2aW5ZajRHaHpjYUJ4UmV2c08xaGs0M1FmblQya0JHSHhBd0JqQkZTeVlrWCtldGlINHhVVFY3L295ZWtINWxzMmFSczZxc290RDNhS25jWDR3dm1VRUZNKzd3d3Z0UTlhUSt0NFprUWNyWmxGOFBUSVNRRmN3M0ZDMG5zREt1b2lHWWx1S044SGk1dW1QVjZvSC91ckdHSFJBd0VmWDg3VDNubzFBOHRJaEFhYURjSnBpQ2xvZERId3FYOWZmZC9US2JWVUd3a0cxMHdERGN1QUMrR3lJZUVNWExpR2VtNC9DSWNINnRRNTV1UGRZTmZ2aTVuNkU3UHZydFhOSkh5a21jdHpSUVZlSGlOeXp4TDZNY1BSSmZqLy9xZ0dWSWQ0M3Z6aFJBZDFzZHpYa1ZtREhJNFpneDBrQ3dxd05FUllLU3JTNGIwdmV3c3dOQjRVa2lIUFMwMDFpUjVCNG1hUjAvMkhhSFJnWjNMT0RFU1U4djdVNVhrUHllNC85WTZmY3BNeDdWRXg2OUYrem1GL1JsNml3bU1FYk55Ry9YQlU3bERGYXB3Uk1HUmExLzNSTWRObzFoVm5oQ08rNzRMNkxRQlNBSk04VldiZUE2bXVydG1vVHpxb2gvaWtqckxHKzFGUUVvM1lSMnhwQ1VlWVhxOXFSK2YwRGFCM3d4NFk4S0IrcmdUelhLc1JDZXBCTHRjVkhtcFV5UW4rdWswVitDZ0RCOXlPSkJFSXpYSmNnUWxHVlMyOGF4RjFmTnR4UTZkbzdiTU5xbFlqN1RvVzhaQ1NNU0JOVFU5cU92dlNESFBxTFZZOXEzYlhhc3gvZDVwRDBiTzdHTzVsdjlubm91MTZHNUpVTFRlM2IrN0I2azFpZFE3akd0VDFmOTNhUEg0bzZodWlLQXBZdVZQOVJjVHBHVlVyd3dhMzlPcFF4eFNJS2xxeW53d0xwZGxOMjJ0NUJIRm92c1IyUkZCeDhXTFA1a0tuNG9HdTJJcDVBVThDeGs4MG5GZ2VjUGIzS3RuL1lteHJqTVNVVkxmSXMyVUxmbHhqbkE5Q01aWi9ZdG0zZXpFc0VveU1wM3FZWnN1SGh4Rld2ajZXalFkUXdxRXlHY2Z6ZG94dDFvTXh1WVB3ZjF3N3JxWlR6eDVwVkptRGZ1V1VDUUxub2c5c0RqWmRKSHhZVTRadCt2NEYrRDJXdlZ1c0FZSzNJRGJZSnQzOWxSRUxXcUp4dkpaa2pHeXdSaWo1OGsvUzZtTmg0SnJaTk5hNmZFT08rcjU2U2RMcHI1dmh3enorbjFURExiWWZILzdsU0xvc0VaZk4vMFQyOFBrdlJEMlcrMnVvWm5QaVFRV2FnQXdIcmRCc0UrUjdEbFNsdnJWNmJtN0tuSlBWc2NqbXRVVlc3SXBDZ1NNMWh4QWhSZm5hRDJucGdRMmVocUhJZXFlZkpFc281WE1pVDNiWVUwRS92WVdSaHROMTJWdkwxa0k2ejA1UlR3PT0iLCJoIjoiVm9pY2VsZXNzIGl0IGNyaWVzLFxuV2luZ2xlc3MgZmx1dHRlcnMsXG5Ub290aGxlc3MgYml0ZXMsXG5Nb3V0aGxlc3MgbXV0dGVycy4iLCJpIjoiWW91TVFyMmJXRHdGMW1BVSJ9) - The password is a single, lowercase word\n- [Share\n  torrents](https://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoieVJqZnVGdlJETGFTdk4vRVYzUlg3OG9GZHRlWW81U04wcFlvSkFScFRaeXFwZTVoV1lESjFBeDVWRUswMDBNUlQ2ZVAwZ2tCTmlyaVdrYnNsVFdrZTNtNVVOVnoxSW43Z3BST1hQZDhsVmVDTkpJZi81Wm1PWFdzSDZ6dVJmdkVrald0UTRndkZBUE9VSm9id00rdnhtWGtuZW5TZ0pHeW9mMjg3L01pTERDN085NFoxTUwrMzlaNUkwdCtsaW1CaDFaNElWZ1p1QkpQUURvM2NodWZXemdTNU05Zk1FOFlxNXVUV1ZoZjVLV2VaTUR1Q0VWSmN2TjRXbDByZHl6MFpBPT0iLCJoIjoiXG5QYXNzd29yZDogdG9ycmVudGluZ19pcy1sZWdhbCEiLCJpIjoiUlIvNnJtRFhzb1lGblhiOSJ9) - Password: torrenting_is-legal!\n\n\n\n## Disclaimer\n\nThe code was written to be read. Please read it, especially if you don't trust\nme to build a secure encryption application. In particular:\n\n- Once someone decrypts a link, they can share the original URL as much as they\n  want. Only share encrypted links with trusted people.\n- Most of the encryption/decryption code is based on [MDN\n  tutorials](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveKey#PBKDF2_2)\n  for the `SubtleCrypto` API.\n\n\n\n## Usage\n\n- Create a locked link here: [https://jstrieb.github.io/link-lock](https://jstrieb.github.io/link-lock).\n- Once you have a locked link, create a hidden bookmark here:\n  \u003chttps://jstrieb.github.io/link-lock/hidden\u003e.\n- Use the advanced options when creating a link to make the encryption more\n  secure (at the cost of a longer link).\n    - By default, the initialization vector is randomized for security, but\n      this can be disabled, even though doing so is a vulnerability.\n    - By default, the salt used to hash the password during key derivation is\n      not randomized, but this can be enabled.\n- To bookmark a locked link, drag it from the output box to the bookmarks bar.\n  Alternatively, visit the locked link and bookmark it before entering the\n  password.\n- If you lose the password, it is almost impossible to recover the original\n  link. The strong security guaranteed by encryption can be a blessing or a\n  curse if you are not careful!\n- Currently, the only way to recover a lost password is by trying all possible\n  options (very slowly) by brute force. An example application to brute force\n  Link Lock URLs in the browser can be found here:\n  \u003chttps://jstrieb.github.io/link-lock/bruteforce\u003e.\n- A parallelized, cross-platform, CPU-based brute forcer can be found here:\n  \u003chttps://github.com/jstrieb/bruteforce-link-lock\u003e\n- If you receive a Link Lock URL that you do not trust, decrypt it using this\n  interface that does not automatically redirect:\n  \u003chttps://jstrieb.github.io/link-lock/decrypt\u003e.\n\n### Evading Censorship\n\nLink Lock can be used to evade censorship. If you are concerned that sending\nlinks with the `jstrieb.github.io` domain name will put you at risk, just\nreplace the domain with another. For example, share\n\n```\nhttps://wikipedia.org/#eyJ2IjoiMC4wLjEiLCJlIjoiYUgrNDhISkpBWWhkeFFMc0l0VlIzeFlma21mYlZCOFJ5Zz09In0=\n```\n\ninstead of\n\n```\nhttps://jstrieb.github.io/link-lock/#eyJ2IjoiMC4wLjEiLCJlIjoiYUgrNDhISkpBWWhkeFFMc0l0VlIzeFlma21mYlZCOFJ5Zz09In0=\n```\n\nAny domain can be used in place of `wikipedia.org`. That way, a malicious\nthird-party who clicks the altered link will be taken to a valid page, which\nhelps alleviate suspicion. When sharing the password to unlock the link,\nexplain how to switch out the domain name with either\n`jstrieb.github.io/link-lock`, or with the path to a local clone of Link Lock.\nUsing a local copy is particularly recommended for evading censorship, since no\nrequest to my domain is ever made.\n\nAlternatively paste the altered link directly into the [decrypt\npage](https://jstrieb.github.io/link-lock/decrypt/). This page does not check\nthe domain name of the pasted link, only the \"fragment\" (the part after the\n`#`). So, for example, the Wikipedia link above can be pasted directly in there\nand decrypted without changing the domain.\n\nUsing a local copy of [URL Pages](https://github.com/jstrieb/urlpages) is also\nrecommended. Entire web pages can be shared safely and secretly this way.\n\n\n\n## Project Status\n\nThis project is actively maintained. If there are no recent commits, it means\nthat everything has been running smoothly! Even if the link storage protocol\nis updated, Link Lock is designed to be 100% backwards-compatible, so your\nlocked links will never break.\n\nEven if something were to happen to me, and I could not continue to work on\nthe project, Link Lock will continue to work as long as my GitHub account is\nopen and the [jstrieb.github.io](https://jstrieb.github.io) domain is online.\n\n\n\n## Other Versions \u0026 Related Projects\n\n- French translation: [cachetonsite.di20.net](https://cachetonsite.di20.net)\n- German translation:\n  [ebildungslabor.github.io/link-lock](https://ebildungslabor.github.io/link-lock/)\n- Polish translation: \n  [yoursenseicreeper.github.io/link-lock](https://yoursenseicreeper.github.io/link-lock/)\n\n\n\n\n## Acknowledgments\n\nThank you to those who offered feedback on this program before its release.\nThanks also to the Hacker News second-chance pool.\n\nThanks to [@IAmMandatory](https://twitter.com/iammandatory) for discovering a\nreflected XSS vulnerability resulting from allowing non-hypertext protocols in\nthe URL. The vulnerability has since been fixed.\n\nThank you to Guillaume ([@gverdun](https://link.di20.net)) for\ntranslating Link Lock into French, and hosting a translated version. Likewise,\nthanks to Nele Hirsch ([@eBildungslabor](https://github.com/eBildungslabor/))\nfor translating and hosting a German version, and to Piotr Wereszczyński\n([@YourSenseiCreeper](https://github.com/YourSenseiCreeper)) for translating\nand hosting a Polish version.\n\n\n\n# Support the Project\n\nThere are a few things you can do to support the project:\n\n- Star the repository and follow me on GitHub\n- Share and upvote on sites like Twitter, Reddit, and Hacker News\n- Report any bugs, glitches, or errors that you find\n- Translate into other languages\n\nThese things motivate me to to keep sharing what I build, and they provide\nvalidation that my work is appreciated! They also help me improve the project.\nThanks in advance!\n\nIf you are insistent on spending money to show your support, I encourage you to\ninstead make a generous donation to one of the following organizations. By\nadvocating for Internet freedoms, organizations like these help me to feel\ncomfortable releasing work publicly on the Web.\n\n- [Electronic Frontier Foundation](https://supporters.eff.org/donate/)\n- [Signal Foundation](https://signal.org/donate/)\n- [Mozilla](https://donate.mozilla.org/en-US/)\n- [The Internet Archive](https://archive.org/donate/index.php)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjstrieb%2Flink-lock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjstrieb%2Flink-lock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjstrieb%2Flink-lock/lists"}