{"id":683,"date":"2026-07-26T07:05:43","date_gmt":"2026-07-26T07:05:43","guid":{"rendered":"https:\/\/freewebtools.co.in\/?page_id=683"},"modified":"2026-07-26T07:18:32","modified_gmt":"2026-07-26T07:18:32","slug":"url-checker","status":"publish","type":"page","link":"https:\/\/freewebtools.co.in\/index.php\/url-checker\/","title":{"rendered":"URL checker"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>URL Reputation Checker<\/title>\n  <style>\n    :root {\n      --bg-main: #ffffff;\n      --bg-card: #f8fafc;\n      --bg-input: #ffffff;\n      --border: #cbd5e1;\n      --accent-blue: #2563eb;\n      --text-main: #0f172a;\n      --text-sub: #64748b;\n      --safe: #059669;\n      --warn: #d97706;\n      --danger: #dc2626;\n    }\n\n    * { box-sizing: border-box; margin: 0; padding: 0; }\n\n    body {\n      background-color: var(--bg-main);\n      color: var(--text-main);\n      font-family: system-ui, -apple-system, sans-serif;\n      padding: 30px 15px;\n      display: flex;\n      justify-content: center;\n    }\n\n    .container {\n      width: 100%;\n      max-width: 850px;\n      background: var(--bg-card);\n      border: 1px solid var(--border);\n      border-radius: 12px;\n      padding: 24px;\n      box-shadow: 0 4px 12px rgba(0,0,0,0.05);\n    }\n\n    header {\n      margin-bottom: 20px;\n      padding-bottom: 12px;\n      border-bottom: 1px solid var(--border);\n    }\n\n    h1 { font-size: 1.5rem; color: var(--text-main); }\n    p.sub { font-size: 0.875rem; color: var(--text-sub); margin-top: 4px; }\n\n    .input-group {\n      display: flex;\n      gap: 10px;\n      margin-bottom: 20px;\n      flex-wrap: wrap;\n    }\n\n    input[type=\"text\"] {\n      flex: 1;\n      min-width: 250px;\n      background: var(--bg-input);\n      border: 1px solid var(--border);\n      color: var(--text-main);\n      padding: 12px 16px;\n      border-radius: 8px;\n      font-size: 1rem;\n      outline: none;\n    }\n\n    input[type=\"text\"]:focus {\n      border-color: #2563eb;\n      box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);\n    }\n\n    button {\n      padding: 12px 20px;\n      border-radius: 8px;\n      border: none;\n      font-weight: 600;\n      cursor: pointer;\n      transition: background 0.2s, color 0.2s;\n    }\n\n    .btn-primary { background: var(--accent-blue); color: white; }\n    .btn-primary:hover { background: #1d4ed8; }\n    .btn-secondary { background: #e2e8f0; color: var(--text-main); border: 1px solid var(--border); }\n    .btn-secondary:hover { background: #cbd5e1; }\n\n    \/* Results Box *\/\n    .results-area {\n      display: none; \/* Shown via JS *\/\n      margin-top: 20px;\n      animation: fadeIn 0.3s ease-in-out;\n    }\n\n    @keyframes fadeIn {\n      from { opacity: 0; transform: translateY(5px); }\n      to { opacity: 1; transform: translateY(0); }\n    }\n\n    .status-badge {\n      padding: 16px;\n      border-radius: 8px;\n      font-weight: bold;\n      font-size: 1.1rem;\n      margin-bottom: 20px;\n      display: flex;\n      align-items: center;\n      gap: 10px;\n    }\n\n    .status-safe { background: #ecfdf5; color: var(--safe); border: 1px solid #a7f3d0; }\n    .status-warn { background: #fffbeb; color: var(--warn); border: 1px solid #fde68a; }\n    .status-danger { background: #fef2f2; color: var(--danger); border: 1px solid #fecaca; }\n\n    .grid {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 20px;\n    }\n\n    @media (max-width: 600px) { .grid { grid-template-columns: 1fr; } }\n\n    .card {\n      background: #ffffff;\n      border: 1px solid var(--border);\n      border-radius: 8px;\n      padding: 16px;\n    }\n\n    .card h3 {\n      font-size: 0.95rem;\n      color: var(--text-sub);\n      margin-bottom: 12px;\n      text-transform: uppercase;\n      letter-spacing: 0.5px;\n    }\n\n    .data-row {\n      display: flex;\n      justify-content: space-between;\n      padding: 6px 0;\n      border-bottom: 1px solid #f1f5f9;\n      font-size: 0.875rem;\n    }\n\n    .data-row:last-child { border: none; }\n    .data-val { font-family: monospace; color: var(--text-main); word-break: break-all; }\n\n    ul.findings {\n      list-style: none;\n    }\n\n    ul.findings li {\n      padding: 8px 10px;\n      margin-bottom: 6px;\n      border-radius: 4px;\n      font-size: 0.85rem;\n      background: #f1f5f9;\n      border-left: 3px solid var(--border);\n    }\n\n    ul.findings li.warn { border-left-color: var(--warn); background: #fffbeb; }\n    ul.findings li.danger { border-left-color: var(--danger); background: #fef2f2; }\n    ul.findings li.safe { border-left-color: var(--safe); background: #ecfdf5; }\n\n    .ext-links {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 8px;\n      margin-top: 20px;\n    }\n\n    .ext-links a {\n      color: var(--accent-blue);\n      text-decoration: none;\n      font-size: 0.85rem;\n      background: #ffffff;\n      padding: 8px 12px;\n      border-radius: 6px;\n      border: 1px solid var(--border);\n    }\n\n    .ext-links a:hover { background: #f1f5f9; }\n  <\/style>\n<\/head>\n<body>\n\n<div class=\"container\">\n  <header>\n    <h1>URL Reputation Checker<\/h1>\n    <p class=\"sub\">Client-side link analysis &#038; threat detection engine<\/p>\n  <\/header>\n\n  <div class=\"input-group\">\n    <input type=\"text\" id=\"targetUrl\" placeholder=\"Enter web address (e.g., https:\/\/example.com\/login)\" \/>\n    <button type=\"button\" id=\"btnAnalyze\" class=\"btn-primary\">Analyze Address<\/button>\n    <button type=\"button\" id=\"btnDemo\" class=\"btn-secondary\">Load Demo<\/button>\n    <button type=\"button\" id=\"btnClear\" class=\"btn-secondary\">Clear<\/button>\n  <\/div>\n\n  <!-- RESULTS SECTION -->\n  <div id=\"resultsArea\" class=\"results-area\">\n    <div id=\"statusBadge\" class=\"status-badge status-safe\">\n      <span id=\"statusIcon\">\u2713<\/span>\n      <span id=\"statusText\">Analysis Complete<\/span>\n    <\/div>\n\n    <div class=\"grid\">\n      <!-- STRUCTURAL BREAKDOWN -->\n      <div class=\"card\">\n        <h3>Url Components<\/h3>\n        <div class=\"data-row\"><span>Protocol:<\/span><span class=\"data-val\" id=\"valProtocol\">&#8211;<\/span><\/div>\n        <div class=\"data-row\"><span>Hostname:<\/span><span class=\"data-val\" id=\"valHost\">&#8211;<\/span><\/div>\n        <div class=\"data-row\"><span>Port:<\/span><span class=\"data-val\" id=\"valPort\">&#8211;<\/span><\/div>\n        <div class=\"data-row\"><span>Path:<\/span><span class=\"data-val\" id=\"valPath\">&#8211;<\/span><\/div>\n        <div class=\"data-row\"><span>Query Parameters:<\/span><span class=\"data-val\" id=\"valQuery\">&#8211;<\/span><\/div>\n        <div class=\"data-row\"><span>Length:<\/span><span class=\"data-val\" id=\"valLength\">&#8211;<\/span><\/div>\n      <\/div>\n\n      <!-- FINDINGS LIST -->\n      <div class=\"card\">\n        <h3>Threat Assessment<\/h3>\n        <ul id=\"findingsList\" class=\"findings\"><\/ul>\n      <\/div>\n    <\/div>\n\n    <!-- EXTERNAL LOOKUPS -->\n    <div class=\"ext-links\" id=\"extLinks\">\n      <a id=\"linkVt\" href=\"#\" target=\"_blank\" rel=\"noopener\">VirusTotal \u2197<\/a>\n      <a id=\"linkGsb\" href=\"#\" target=\"_blank\" rel=\"noopener\">Google Safe Browsing \u2197<\/a>\n      <a id=\"linkUrlVoid\" href=\"#\" target=\"_blank\" rel=\"noopener\">URLVoid \u2197<\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n  \/\/ DOM Elements\n  const inputEl = document.getElementById('targetUrl');\n  const btnAnalyze = document.getElementById('btnAnalyze');\n  const btnDemo = document.getElementById('btnDemo');\n  const btnClear = document.getElementById('btnClear');\n  const resultsArea = document.getElementById('resultsArea');\n\n  \/\/ Outputs\n  const statusBadge = document.getElementById('statusBadge');\n  const statusIcon = document.getElementById('statusIcon');\n  const statusText = document.getElementById('statusText');\n  const valProtocol = document.getElementById('valProtocol');\n  const valHost = document.getElementById('valHost');\n  const valPort = document.getElementById('valPort');\n  const valPath = document.getElementById('valPath');\n  const valQuery = document.getElementById('valQuery');\n  const valLength = document.getElementById('valLength');\n  const findingsList = document.getElementById('findingsList');\n  const linkVt = document.getElementById('linkVt');\n  const linkGsb = document.getElementById('linkGsb');\n  const linkUrlVoid = document.getElementById('linkUrlVoid');\n\n  \/\/ Main Analysis Logic\n  function analyzeUrl() {\n    let rawInput = inputEl.value.trim();\n\n    if (!rawInput) {\n      alert(\"Please enter a web address to analyze.\");\n      return;\n    }\n\n    \/\/ Auto-fix protocol if missing\n    let formattedUrl = rawInput;\n    if (!\/^[a-zA-Z][a-zA-Z0-9+.-]*:\\\/\\\/\/.test(rawInput)) {\n      formattedUrl = 'http:\/\/' + rawInput;\n    }\n\n    let parsed = null;\n    try {\n      parsed = new URL(formattedUrl);\n    } catch (e) {\n      alert(\"Invalid web address format. Please check the URL and try again.\");\n      return;\n    }\n\n    let findings = [];\n    let severity = 'SAFE'; \/\/ SAFE, WARN, DANGER\n\n    \/\/ Protocol Check\n    if (parsed.protocol === 'http:') {\n      severity = 'WARN';\n      findings.push({ level: 'warn', text: 'Insecure Connection: Uses HTTP instead of encrypted HTTPS.' });\n    }\n\n    \/\/ IP Address Host Check\n    const isIp = \/^(\\d{1,3}\\.){3}\\d{1,3}$\/.test(parsed.hostname);\n    if (isIp) {\n      severity = 'DANGER';\n      findings.push({ level: 'danger', text: 'Raw IP Host: Targets an IP address instead of a standard domain.' });\n    }\n\n    \/\/ Punycode\/Internationalized domain check\n    if (parsed.hostname.includes('xn--')) {\n      severity = 'DANGER';\n      findings.push({ level: 'danger', text: 'Punycode Detected: High risk of spoofing\/typosquatting.' });\n    }\n\n    \/\/ Executable\/Suspicious Extension Check\n    const path = parsed.pathname.toLowerCase();\n    if (path.endsWith('.exe') || path.endsWith('.scr') || path.endsWith('.vbs') || path.endsWith('.bat')) {\n      severity = 'DANGER';\n      findings.push({ level: 'danger', text: 'Direct File Download: Points directly to an executable binary file.' });\n    } else if (path.endsWith('.zip') || path.endsWith('.rar') || path.endsWith('.7z')) {\n      if (severity !== 'DANGER') severity = 'WARN';\n      findings.push({ level: 'warn', text: 'Compressed Archive: Direct download link to a compressed file.' });\n    }\n\n    \/\/ Redirect Parameter Check\n    if (parsed.search.includes('redirect=') || parsed.search.includes('url=')) {\n      if (severity !== 'DANGER') severity = 'WARN';\n      findings.push({ level: 'warn', text: 'Potential Open Redirect: Contains destination parameters in query string.' });\n    }\n\n    if (findings.length === 0) {\n      findings.push({ level: 'safe', text: 'No obvious structural anomalies or threat patterns detected.' });\n    }\n\n    \/\/ RENDER OUTPUTS\n    valProtocol.textContent = parsed.protocol;\n    valHost.textContent = parsed.hostname;\n    valPort.textContent = parsed.port || (parsed.protocol === 'https:' ? '443' : '80');\n    valPath.textContent = parsed.pathname || '\/';\n    valQuery.textContent = parsed.search || 'None';\n    valLength.textContent = rawInput.length + ' characters';\n\n    \/\/ Render Badge\n    statusBadge.className = 'status-badge';\n    if (severity === 'SAFE') {\n      statusBadge.classList.add('status-safe');\n      statusIcon.textContent = '\u2713';\n      statusText.textContent = 'Structure Appears Safe';\n    } else if (severity === 'WARN') {\n      statusBadge.classList.add('status-warn');\n      statusIcon.textContent = '\u26a0';\n      statusText.textContent = 'Caution Recommended';\n    } else {\n      statusBadge.classList.add('status-danger');\n      statusIcon.textContent = '\u2715';\n      statusText.textContent = 'High Threat Indicators Detected';\n    }\n\n    \/\/ Render Findings List\n    findingsList.innerHTML = '';\n    findings.forEach(f => {\n      const li = document.createElement('li');\n      li.className = f.level;\n      li.textContent = f.text;\n      findingsList.appendChild(li);\n    });\n\n    \/\/ Update External Service Links\n    const cleanHost = encodeURIComponent(parsed.hostname);\n    linkVt.href = `https:\/\/www.virustotal.com\/gui\/search\/${cleanHost}`;\n    linkGsb.href = `https:\/\/transparencyreport.google.com\/safe-browsing\/search?url=${cleanHost}`;\n    linkUrlVoid.href = `https:\/\/www.urlvoid.com\/scan\/${cleanHost}\/`;\n\n    \/\/ Show Results Area\n    resultsArea.style.display = 'block';\n  }\n\n  \/\/ Helper Actions\n  function loadDemo() {\n    inputEl.value = 'http:\/\/login.xn--p1ai-update.com\/secure\/account-update.exe?redirect=http:\/\/evil.com';\n    analyzeUrl();\n  }\n\n  function clearAll() {\n    inputEl.value = '';\n    resultsArea.style.display = 'none';\n  }\n\n  \/\/ DIRECT EVENT BINDINGS\n  btnAnalyze.onclick = analyzeUrl;\n  btnDemo.onclick = loadDemo;\n  btnClear.onclick = clearAll;\n\n  \/\/ Allow pressing Enter in the input field\n  inputEl.addEventListener('keypress', function(e) {\n    if (e.key === 'Enter') {\n      analyzeUrl();\n    }\n  });\n<\/script>\n\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>URL Reputation Checker URL Reputation Checker Client-side link analysis &#038; threat detection engine Analyze Address Load Demo Clear \u2713 Analysis Complete Url Components Protocol:&#8211; Hostname:&#8211; Port:&#8211; Path:&#8211; Query Parameters:&#8211; Length:&#8211; Threat Assessment VirusTotal \u2197 Google Safe Browsing \u2197 URLVoid \u2197<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-683","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/683","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/comments?post=683"}],"version-history":[{"count":6,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/683\/revisions"}],"predecessor-version":[{"id":689,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/683\/revisions\/689"}],"wp:attachment":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/media?parent=683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}