let idx = request.url.indexOf("password="); let password = request.url.substring(idx + 9); console.log("Extracted password: " + password); // 🚨 DANGER If indexofpassword logic precedes a log write, the plaintext password may end up in log files, which are often less protected than the main database. The standard indexOf is case‑sensitive. An attacker could bypass a naive check by using Password or PASSWORD . This leads to incomplete validation or extraction. Problem 4: False Assumptions About String Structure Consider this code:
Relying on low‑level string search for security‑sensitive data is asking for trouble. How to Replace "indexofpassword" with Secure Practices If you find indexofpassword or similar manual string searching in your codebase, refactor immediately. Here is how to do it right. For Web Request Parameters (JavaScript/Node.js) ❌ Don’t do this: indexofpassword
String queryString = "user=jdoe&password=abc123"; int indexOfPassword = queryString.indexOf("password"); In these cases, the developer is scanning a string (often a URL query, a form data payload, or a log entry) to locate where the password field begins. Understanding the legitimate uses of indexofpassword helps clarify why it appears so often in code reviews and security audits. 1. Parsing URL Query Strings Before the widespread adoption of frameworks with built‑in request parsers, many developers manually extracted parameters from URLs using indexOf . For example: let idx = request
function getPasswordFromQuery(query) { let start = query.indexOf("password=") + 9; let end = query.indexOf("&", start); return query.substring(start, end); } Security‑conscious applications sometimes scan log strings for the word "password" to redact sensitive data before writing to disk. This leads to incomplete validation or extraction
const safeLog = rawLog.replace(/password=[^&]*/gi, 'password=[REDACTED]'); ✅ Use includes() or indexOf() only for non‑security validation before hashing: