DEV Community

Mohammad Waseem
Mohammad Waseem

Posted on

Detecting Phishing Patterns in JavaScript Without a Budget

Detecting Phishing Patterns in JavaScript Without a Budget

In today’s digital landscape, phishing remains a pervasive threat that compromises user data and organizational security. For security researchers and developers operating on a zero-budget constraint, innovative and resource-efficient methods are essential. JavaScript, being omnipresent in web environments, presents a practical avenue for client-side detection of suspicious patterns indicative of phishing.

This guide explores how to leverage existing JavaScript capabilities—without relying on paid APIs or external services—to identify common phishing tactics such as suspicious URL structures, deceptive domain names, and obfuscation techniques.

Key Phishing Indicators to Detect

Some typical indicators that can be programmatically identified include:

  • Suspicious URL patterns: Look for URLs with unusual length, excessive query parameters, or known malicious domains.
  • Discrepancy between displayed text and URL: Often, phishing links display legitimate text but redirect to malicious addresses.
  • Obfuscated URLs: Use of % encoding or complex, unreadable strings.
  • Use of non-standard port numbers: URLs specifying suspicious ports may be a red flag.

Practical JavaScript Implementations

Let's review how to implement these detections within a webpage, utilizing JavaScript event listeners and simple pattern matching.

Detect URL Discrepancies

function checkLinkDiscrepancy(link) {
  const url = new URL(link.href);
  const displayedText = link.textContent.trim();
  const hostname = url.hostname;

  // Example: Compare displayed text with domain
  if (displayedText.includes(hostname)) {
    return false; // No discrepancy detected
  }
  return true; // Potential phishing
}

// Attach to all links
document.querySelectorAll('a').forEach(link => {
  link.addEventListener('mouseover', () => {
    if (checkLinkDiscrepancy(link)) {
      console.warn('Possible phishing link detected:', link.href);
    }
  });
});
Enter fullscreen mode Exit fullscreen mode

Detect Suspicious URL Patterns

function isSuspiciousURL(urlString) {
  try {
    const url = new URL(urlString);
    // Check for overly long URLs
    if (url.href.length > 200) {
      return true;
    }
    // Check for uncommon ports
    const port = url.port;
    if (port && (port !== '80' && port !== '443')) {
      return true;
    }
    // Detect encoded characters
    if (/%/.test(url.href)) {
      return true;
    }
    return false;
  } catch (e) {
    return false;
  }
}

// Apply check on links
document.querySelectorAll('a').forEach(link => {
  if (isSuspiciousURL(link.href)) {
    console.warn('Suspicious URL pattern detected:', link.href);
  }
});
Enter fullscreen mode Exit fullscreen mode

Obfuscated URL Detection

Obfuscation often involves URL encoding or unorthodox character usage. Detecting such patterns can be key.

function detectObfuscation(url) {
  // Look for percent-encoding
  return /%[0-9A-Fa-f]{2}/.test(url);
}

// Example usage
document.querySelectorAll('a').forEach(link => {
  if (detectObfuscation(link.href)) {
    console.warn('Obfuscated URL detected:', link.href);
  }
});
Enter fullscreen mode Exit fullscreen mode

Integrating Detection in Real-Time

To make these detections practical, embed the scripts into your website and trigger them during user interactions such as mouseover, click, or form submissions. Combining multiple checks enhances accuracy.

Caveats and Considerations

While JavaScript-based detection is a powerful tool, it should be supplemented with server-side validation and user education. Don't rely solely on client-side scripts for security-critical decisions.

Conclusion

Operating without a budget demands resourcefulness. By leveraging native JavaScript functionalities, security researchers can craft effective, real-time phishing detection tools. The strategies outlined above form a foundation that can be extended with machine learning, pattern analysis, or community-driven blocklists as needed.

Stay vigilant, code responsibly, and continually update your detection logic to adapt to evolving phishing tactics.


🛠️ QA Tip

To test this safely without using real user data, I use TempoMail USA.

Top comments (0)