Repository files navigation

PHPChain redux

This is an update to what is a pretty ancient password management application. PHPChain was developed against PHP v4, using the PHP mcrypt library, and mySQL. The original documentation (a README file) is available as original_README.txt

Updates

  • converted for use on PHP 7.4 and 8.0

    • Minor deprecations (e.g. each()) and updated tag style (e.g. <? to <?php)
    • Truthfully most my testing has been a combination of 7.1 (the last version to provide mcrypt) and 7.4.
  • converted from mcrypt (deprecated in PHP 7.2) to use the openssl_encrypt.

    • Unfortunately this is NOT compatible encryption - old passwords need some hand processing to convert.
    • I do have a process for upgradingencrypted parts, but haven't had time to document.
    • The encryption, none-the-less is pretty weak, and I know some of the ciphertext is double base64 encoded, but I'm not too concerned at this point. If I had time I'd have it only store encrypted passwords (not sites, urls, logins) and only encrypt/decrypt passwords in the browser.
  • Cosmetics and UI.

    • This started with some css lipstick on a pig, but went to an almost entire (and I think it is entire) replacement and upate to use w3.css.
    • Filters are over tables to allow searching of large pages, as well as the category column.
    • Click on the password or login to copy it to your clipboard.
    • I'm not going to claim this is a responsive or mobile app, but it is a lot more friendly than the original.
    • I'm hardly a convert to material design, but it looks fresh compared to the original code, and w3.css makes it so easy.
    • I've checked this on Firefox, Chrome, Edge, and Safari.
    • Quick eval on iPhone - it's not pretty, but usable, but it does work (D+).
  • Upgraded to more contemporary security practices:

    • CSRF tokens are used
    • Sanitization of form and query string parameter data against injection and XSS attacks
    • Moved key paramenters from cookies to session data.
    • session cookie is HTTPonly, Secure, (and samesite strict)
  • Database changes:

    • Added database support for sqlite3.
    • date formats now implemented using epoch time in PHP and not database specific
    • SQL statements are more portable
    • the create and last modified date is added for each entry. Create date is not used in the app but is available for forensics.
    • Sqlite3 handles multiple users just fine. I don't know if it would go web-scale, but it works fine with a few dozen users and does not appear to be close to top.
  • Notes can be added to entries, allowing more detailed data. This data is not encrypted. The size is currently set at upt to 2048 bytes per entry. The idea here is it gives a way to attach ssh keys, etc. but keep in mind these are clear text in the database.

  • HTML in the original was done by concatenating HTML and echoing out a huge string at the end. Most/all of this has been redone to be flat HTML with php additions - kind of the reverse. I would have moved to a template engine but I'm not super into the PHP ecosystem to know the best way forward.

  • The form part of views is now seperated from the action part. i.e. login.php presents a login form and loginexec.php processes the actual login. This has eliminated massive case statements or if/else structures in the original code.

  • Some logic is pushed to the browser, especially on the catview page. This requests confirmation for delete and a detail pane for entries.

About

A more or less complete re-write and update of the original PHPchain Password management system - supports mysql and sqlite

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

PHPChain redux

This is an update to what is a pretty ancient password management application. PHPChain was developed against PHP v4, using the PHP mcrypt library, and mySQL. The original documentation (a README file) is available as original_README.txt

Updates

  • converted for use on PHP 7.4 and 8.0

    • Minor deprecations (e.g. each()) and updated tag style (e.g. <? to <?php)
    • Truthfully most my testing has been a combination of 7.1 (the last version to provide mcrypt) and 7.4.
  • converted from mcrypt (deprecated in PHP 7.2) to use the openssl_encrypt.

    • Unfortunately this is NOT compatible encryption - old passwords need some hand processing to convert.
    • I do have a process for upgradingencrypted parts, but haven't had time to document.
    • The encryption, none-the-less is pretty weak, and I know some of the ciphertext is double base64 encoded, but I'm not too concerned at this point. If I had time I'd have it only store encrypted passwords (not sites, urls, logins) and only encrypt/decrypt passwords in the browser.
  • Cosmetics and UI.

    • This started with some css lipstick on a pig, but went to an almost entire (and I think it is entire) replacement and upate to use w3.css.
    • Filters are over tables to allow searching of large pages, as well as the category column.
    • Click on the password or login to copy it to your clipboard.
    • I'm not going to claim this is a responsive or mobile app, but it is a lot more friendly than the original.
    • I'm hardly a convert to material design, but it looks fresh compared to the original code, and w3.css makes it so easy.
    • I've checked this on Firefox, Chrome, Edge, and Safari.
    • Quick eval on iPhone - it's not pretty, but usable, but it does work (D+).
  • Upgraded to more contemporary security practices:

    • CSRF tokens are used
    • Sanitization of form and query string parameter data against injection and XSS attacks
    • Moved key paramenters from cookies to session data.
    • session cookie is HTTPonly, Secure, (and samesite strict)
  • Database changes:

    • Added database support for sqlite3.
    • date formats now implemented using epoch time in PHP and not database specific
    • SQL statements are more portable
    • the create and last modified date is added for each entry. Create date is not used in the app but is available for forensics.
    • Sqlite3 handles multiple users just fine. I don't know if it would go web-scale, but it works fine with a few dozen users and does not appear to be close to top.
  • Notes can be added to entries, allowing more detailed data. This data is not encrypted. The size is currently set at upt to 2048 bytes per entry. The idea here is it gives a way to attach ssh keys, etc. but keep in mind these are clear text in the database.

  • HTML in the original was done by concatenating HTML and echoing out a huge string at the end. Most/all of this has been redone to be flat HTML with php additions - kind of the reverse. I would have moved to a template engine but I'm not super into the PHP ecosystem to know the best way forward.

  • The form part of views is now seperated from the action part. i.e. login.php presents a login form and loginexec.php processes the actual login. This has eliminated massive case statements or if/else structures in the original code.

  • Some logic is pushed to the browser, especially on the catview page. This requests confirmation for delete and a detail pane for entries.

About

A more or less complete re-write and update of the original PHPchain Password management system - supports mysql and sqlite

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

PHPChain redux

This is an update to what is a pretty ancient password management application. PHPChain was developed against PHP v4, using the PHP mcrypt library, and mySQL. The original documentation (a README file) is available as original_README.txt

Updates

  • converted for use on PHP 7.4 and 8.0

    • Minor deprecations (e.g. each()) and updated tag style (e.g. <? to <?php)
    • Truthfully most my testing has been a combination of 7.1 (the last version to provide mcrypt) and 7.4.
  • converted from mcrypt (deprecated in PHP 7.2) to use the openssl_encrypt.

    • Unfortunately this is NOT compatible encryption - old passwords need some hand processing to convert.
    • I do have a process for upgradingencrypted parts, but haven't had time to document.
    • The encryption, none-the-less is pretty weak, and I know some of the ciphertext is double base64 encoded, but I'm not too concerned at this point. If I had time I'd have it only store encrypted passwords (not sites, urls, logins) and only encrypt/decrypt passwords in the browser.
  • Cosmetics and UI.

    • This started with some css lipstick on a pig, but went to an almost entire (and I think it is entire) replacement and upate to use w3.css.
    • Filters are over tables to allow searching of large pages, as well as the category column.
    • Click on the password or login to copy it to your clipboard.
    • I'm not going to claim this is a responsive or mobile app, but it is a lot more friendly than the original.
    • I'm hardly a convert to material design, but it looks fresh compared to the original code, and w3.css makes it so easy.
    • I've checked this on Firefox, Chrome, Edge, and Safari.
    • Quick eval on iPhone - it's not pretty, but usable, but it does work (D+).
  • Upgraded to more contemporary security practices:

    • CSRF tokens are used
    • Sanitization of form and query string parameter data against injection and XSS attacks
    • Moved key paramenters from cookies to session data.
    • session cookie is HTTPonly, Secure, (and samesite strict)
  • Database changes:

    • Added database support for sqlite3.
    • date formats now implemented using epoch time in PHP and not database specific
    • SQL statements are more portable
    • the create and last modified date is added for each entry. Create date is not used in the app but is available for forensics.
    • Sqlite3 handles multiple users just fine. I don't know if it would go web-scale, but it works fine with a few dozen users and does not appear to be close to top.
  • Notes can be added to entries, allowing more detailed data. This data is not encrypted. The size is currently set at upt to 2048 bytes per entry. The idea here is it gives a way to attach ssh keys, etc. but keep in mind these are clear text in the database.

  • HTML in the original was done by concatenating HTML and echoing out a huge string at the end. Most/all of this has been redone to be flat HTML with php additions - kind of the reverse. I would have moved to a template engine but I'm not super into the PHP ecosystem to know the best way forward.

  • The form part of views is now seperated from the action part. i.e. login.php presents a login form and loginexec.php processes the actual login. This has eliminated massive case statements or if/else structures in the original code.

  • Some logic is pushed to the browser, especially on the catview page. This requests confirmation for delete and a detail pane for entries.

About

A more or less complete re-write and update of the original PHPchain Password management system - supports mysql and sqlite

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

PHPChain redux

This is an update to what is a pretty ancient password management application. PHPChain was developed against PHP v4, using the PHP mcrypt library, and mySQL. The original documentation (a README file) is available as original_README.txt

Updates

  • converted for use on PHP 7.4 and 8.0

    • Minor deprecations (e.g. each()) and updated tag style (e.g. <? to <?php)
    • Truthfully most my testing has been a combination of 7.1 (the last version to provide mcrypt) and 7.4.
  • converted from mcrypt (deprecated in PHP 7.2) to use the openssl_encrypt.

    • Unfortunately this is NOT compatible encryption - old passwords need some hand processing to convert.
    • I do have a process for upgradingencrypted parts, but haven't had time to document.
    • The encryption, none-the-less is pretty weak, and I know some of the ciphertext is double base64 encoded, but I'm not too concerned at this point. If I had time I'd have it only store encrypted passwords (not sites, urls, logins) and only encrypt/decrypt passwords in the browser.
  • Cosmetics and UI.

    • This started with some css lipstick on a pig, but went to an almost entire (and I think it is entire) replacement and upate to use w3.css.
    • Filters are over tables to allow searching of large pages, as well as the category column.
    • Click on the password or login to copy it to your clipboard.
    • I'm not going to claim this is a responsive or mobile app, but it is a lot more friendly than the original.
    • I'm hardly a convert to material design, but it looks fresh compared to the original code, and w3.css makes it so easy.
    • I've checked this on Firefox, Chrome, Edge, and Safari.
    • Quick eval on iPhone - it's not pretty, but usable, but it does work (D+).
  • Upgraded to more contemporary security practices:

    • CSRF tokens are used
    • Sanitization of form and query string parameter data against injection and XSS attacks
    • Moved key paramenters from cookies to session data.
    • session cookie is HTTPonly, Secure, (and samesite strict)
  • Database changes:

    • Added database support for sqlite3.
    • date formats now implemented using epoch time in PHP and not database specific
    • SQL statements are more portable
    • the create and last modified date is added for each entry. Create date is not used in the app but is available for forensics.
    • Sqlite3 handles multiple users just fine. I don't know if it would go web-scale, but it works fine with a few dozen users and does not appear to be close to top.
  • Notes can be added to entries, allowing more detailed data. This data is not encrypted. The size is currently set at upt to 2048 bytes per entry. The idea here is it gives a way to attach ssh keys, etc. but keep in mind these are clear text in the database.

  • HTML in the original was done by concatenating HTML and echoing out a huge string at the end. Most/all of this has been redone to be flat HTML with php additions - kind of the reverse. I would have moved to a template engine but I'm not super into the PHP ecosystem to know the best way forward.

  • The form part of views is now seperated from the action part. i.e. login.php presents a login form and loginexec.php processes the actual login. This has eliminated massive case statements or if/else structures in the original code.

  • Some logic is pushed to the browser, especially on the catview page. This requests confirmation for delete and a detail pane for entries.

About

A more or less complete re-write and update of the original PHPchain Password management system - supports mysql and sqlite

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

PHPChain redux

This is an update to what is a pretty ancient password management application. PHPChain was developed against PHP v4, using the PHP mcrypt library, and mySQL. The original documentation (a README file) is available as original_README.txt

Updates

  • converted for use on PHP 7.4 and 8.0

    • Minor deprecations (e.g. each()) and updated tag style (e.g. <? to <?php)
    • Truthfully most my testing has been a combination of 7.1 (the last version to provide mcrypt) and 7.4.
  • converted from mcrypt (deprecated in PHP 7.2) to use the openssl_encrypt.

    • Unfortunately this is NOT compatible encryption - old passwords need some hand processing to convert.
    • I do have a process for upgradingencrypted parts, but haven't had time to document.
    • The encryption, none-the-less is pretty weak, and I know some of the ciphertext is double base64 encoded, but I'm not too concerned at this point. If I had time I'd have it only store encrypted passwords (not sites, urls, logins) and only encrypt/decrypt passwords in the browser.
  • Cosmetics and UI.

    • This started with some css lipstick on a pig, but went to an almost entire (and I think it is entire) replacement and upate to use w3.css.
    • Filters are over tables to allow searching of large pages, as well as the category column.
    • Click on the password or login to copy it to your clipboard.
    • I'm not going to claim this is a responsive or mobile app, but it is a lot more friendly than the original.
    • I'm hardly a convert to material design, but it looks fresh compared to the original code, and w3.css makes it so easy.
    • I've checked this on Firefox, Chrome, Edge, and Safari.
    • Quick eval on iPhone - it's not pretty, but usable, but it does work (D+).
  • Upgraded to more contemporary security practices:

    • CSRF tokens are used
    • Sanitization of form and query string parameter data against injection and XSS attacks
    • Moved key paramenters from cookies to session data.
    • session cookie is HTTPonly, Secure, (and samesite strict)
  • Database changes:

    • Added database support for sqlite3.
    • date formats now implemented using epoch time in PHP and not database specific
    • SQL statements are more portable
    • the create and last modified date is added for each entry. Create date is not used in the app but is available for forensics.
    • Sqlite3 handles multiple users just fine. I don't know if it would go web-scale, but it works fine with a few dozen users and does not appear to be close to top.
  • Notes can be added to entries, allowing more detailed data. This data is not encrypted. The size is currently set at upt to 2048 bytes per entry. The idea here is it gives a way to attach ssh keys, etc. but keep in mind these are clear text in the database.

  • HTML in the original was done by concatenating HTML and echoing out a huge string at the end. Most/all of this has been redone to be flat HTML with php additions - kind of the reverse. I would have moved to a template engine but I'm not super into the PHP ecosystem to know the best way forward.

  • The form part of views is now seperated from the action part. i.e. login.php presents a login form and loginexec.php processes the actual login. This has eliminated massive case statements or if/else structures in the original code.

  • Some logic is pushed to the browser, especially on the catview page. This requests confirmation for delete and a detail pane for entries.

About

A more or less complete re-write and update of the original PHPchain Password management system - supports mysql and sqlite

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

PHPChain redux

This is an update to what is a pretty ancient password management application. PHPChain was developed against PHP v4, using the PHP mcrypt library, and mySQL. The original documentation (a README file) is available as original_README.txt

Updates

  • converted for use on PHP 7.4 and 8.0

    • Minor deprecations (e.g. each()) and updated tag style (e.g. <? to <?php)
    • Truthfully most my testing has been a combination of 7.1 (the last version to provide mcrypt) and 7.4.
  • converted from mcrypt (deprecated in PHP 7.2) to use the openssl_encrypt.

    • Unfortunately this is NOT compatible encryption - old passwords need some hand processing to convert.
    • I do have a process for upgradingencrypted parts, but haven't had time to document.
    • The encryption, none-the-less is pretty weak, and I know some of the ciphertext is double base64 encoded, but I'm not too concerned at this point. If I had time I'd have it only store encrypted passwords (not sites, urls, logins) and only encrypt/decrypt passwords in the browser.
  • Cosmetics and UI.

    • This started with some css lipstick on a pig, but went to an almost entire (and I think it is entire) replacement and upate to use w3.css.
    • Filters are over tables to allow searching of large pages, as well as the category column.
    • Click on the password or login to copy it to your clipboard.
    • I'm not going to claim this is a responsive or mobile app, but it is a lot more friendly than the original.
    • I'm hardly a convert to material design, but it looks fresh compared to the original code, and w3.css makes it so easy.
    • I've checked this on Firefox, Chrome, Edge, and Safari.
    • Quick eval on iPhone - it's not pretty, but usable, but it does work (D+).
  • Upgraded to more contemporary security practices:

    • CSRF tokens are used
    • Sanitization of form and query string parameter data against injection and XSS attacks
    • Moved key paramenters from cookies to session data.
    • session cookie is HTTPonly, Secure, (and samesite strict)
  • Database changes:

    • Added database support for sqlite3.
    • date formats now implemented using epoch time in PHP and not database specific
    • SQL statements are more portable
    • the create and last modified date is added for each entry. Create date is not used in the app but is available for forensics.
    • Sqlite3 handles multiple users just fine. I don't know if it would go web-scale, but it works fine with a few dozen users and does not appear to be close to top.
  • Notes can be added to entries, allowing more detailed data. This data is not encrypted. The size is currently set at upt to 2048 bytes per entry. The idea here is it gives a way to attach ssh keys, etc. but keep in mind these are clear text in the database.

  • HTML in the original was done by concatenating HTML and echoing out a huge string at the end. Most/all of this has been redone to be flat HTML with php additions - kind of the reverse. I would have moved to a template engine but I'm not super into the PHP ecosystem to know the best way forward.

  • The form part of views is now seperated from the action part. i.e. login.php presents a login form and loginexec.php processes the actual login. This has eliminated massive case statements or if/else structures in the original code.

  • Some logic is pushed to the browser, especially on the catview page. This requests confirmation for delete and a detail pane for entries.

About

A more or less complete re-write and update of the original PHPchain Password management system - supports mysql and sqlite

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

PHPChain redux

This is an update to what is a pretty ancient password management application. PHPChain was developed against PHP v4, using the PHP mcrypt library, and mySQL. The original documentation (a README file) is available as original_README.txt

Updates

  • converted for use on PHP 7.4 and 8.0

    • Minor deprecations (e.g. each()) and updated tag style (e.g. <? to <?php)
    • Truthfully most my testing has been a combination of 7.1 (the last version to provide mcrypt) and 7.4.
  • converted from mcrypt (deprecated in PHP 7.2) to use the openssl_encrypt.

    • Unfortunately this is NOT compatible encryption - old passwords need some hand processing to convert.
    • I do have a process for upgradingencrypted parts, but haven't had time to document.
    • The encryption, none-the-less is pretty weak, and I know some of the ciphertext is double base64 encoded, but I'm not too concerned at this point. If I had time I'd have it only store encrypted passwords (not sites, urls, logins) and only encrypt/decrypt passwords in the browser.
  • Cosmetics and UI.

    • This started with some css lipstick on a pig, but went to an almost entire (and I think it is entire) replacement and upate to use w3.css.
    • Filters are over tables to allow searching of large pages, as well as the category column.
    • Click on the password or login to copy it to your clipboard.
    • I'm not going to claim this is a responsive or mobile app, but it is a lot more friendly than the original.
    • I'm hardly a convert to material design, but it looks fresh compared to the original code, and w3.css makes it so easy.
    • I've checked this on Firefox, Chrome, Edge, and Safari.
    • Quick eval on iPhone - it's not pretty, but usable, but it does work (D+).
  • Upgraded to more contemporary security practices:

    • CSRF tokens are used
    • Sanitization of form and query string parameter data against injection and XSS attacks
    • Moved key paramenters from cookies to session data.
    • session cookie is HTTPonly, Secure, (and samesite strict)
  • Database changes:

    • Added database support for sqlite3.
    • date formats now implemented using epoch time in PHP and not database specific
    • SQL statements are more portable
    • the create and last modified date is added for each entry. Create date is not used in the app but is available for forensics.
    • Sqlite3 handles multiple users just fine. I don't know if it would go web-scale, but it works fine with a few dozen users and does not appear to be close to top.
  • Notes can be added to entries, allowing more detailed data. This data is not encrypted. The size is currently set at upt to 2048 bytes per entry. The idea here is it gives a way to attach ssh keys, etc. but keep in mind these are clear text in the database.

  • HTML in the original was done by concatenating HTML and echoing out a huge string at the end. Most/all of this has been redone to be flat HTML with php additions - kind of the reverse. I would have moved to a template engine but I'm not super into the PHP ecosystem to know the best way forward.

  • The form part of views is now seperated from the action part. i.e. login.php presents a login form and loginexec.php processes the actual login. This has eliminated massive case statements or if/else structures in the original code.

  • Some logic is pushed to the browser, especially on the catview page. This requests confirmation for delete and a detail pane for entries.

About

A more or less complete re-write and update of the original PHPchain Password management system - supports mysql and sqlite

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

PHPChain redux

This is an update to what is a pretty ancient password management application. PHPChain was developed against PHP v4, using the PHP mcrypt library, and mySQL. The original documentation (a README file) is available as original_README.txt

Updates

  • converted for use on PHP 7.4 and 8.0

    • Minor deprecations (e.g. each()) and updated tag style (e.g. <? to <?php)
    • Truthfully most my testing has been a combination of 7.1 (the last version to provide mcrypt) and 7.4.
  • converted from mcrypt (deprecated in PHP 7.2) to use the openssl_encrypt.

    • Unfortunately this is NOT compatible encryption - old passwords need some hand processing to convert.
    • I do have a process for upgradingencrypted parts, but haven't had time to document.
    • The encryption, none-the-less is pretty weak, and I know some of the ciphertext is double base64 encoded, but I'm not too concerned at this point. If I had time I'd have it only store encrypted passwords (not sites, urls, logins) and only encrypt/decrypt passwords in the browser.
  • Cosmetics and UI.

    • This started with some css lipstick on a pig, but went to an almost entire (and I think it is entire) replacement and upate to use w3.css.
    • Filters are over tables to allow searching of large pages, as well as the category column.
    • Click on the password or login to copy it to your clipboard.
    • I'm not going to claim this is a responsive or mobile app, but it is a lot more friendly than the original.
    • I'm hardly a convert to material design, but it looks fresh compared to the original code, and w3.css makes it so easy.
    • I've checked this on Firefox, Chrome, Edge, and Safari.
    • Quick eval on iPhone - it's not pretty, but usable, but it does work (D+).
  • Upgraded to more contemporary security practices:

    • CSRF tokens are used
    • Sanitization of form and query string parameter data against injection and XSS attacks
    • Moved key paramenters from cookies to session data.
    • session cookie is HTTPonly, Secure, (and samesite strict)
  • Database changes:

    • Added database support for sqlite3.
    • date formats now implemented using epoch time in PHP and not database specific
    • SQL statements are more portable
    • the create and last modified date is added for each entry. Create date is not used in the app but is available for forensics.
    • Sqlite3 handles multiple users just fine. I don't know if it would go web-scale, but it works fine with a few dozen users and does not appear to be close to top.
  • Notes can be added to entries, allowing more detailed data. This data is not encrypted. The size is currently set at upt to 2048 bytes per entry. The idea here is it gives a way to attach ssh keys, etc. but keep in mind these are clear text in the database.

  • HTML in the original was done by concatenating HTML and echoing out a huge string at the end. Most/all of this has been redone to be flat HTML with php additions - kind of the reverse. I would have moved to a template engine but I'm not super into the PHP ecosystem to know the best way forward.

  • The form part of views is now seperated from the action part. i.e. login.php presents a login form and loginexec.php processes the actual login. This has eliminated massive case statements or if/else structures in the original code.

  • Some logic is pushed to the browser, especially on the catview page. This requests confirmation for delete and a detail pane for entries.

About

A more or less complete re-write and update of the original PHPchain Password management system - supports mysql and sqlite

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages