<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: HackerMe</title>
    <description>The latest articles on DEV Community by HackerMe (@hackerme).</description>
    <link>https://dev.to/hackerme</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4094444%2F9bc80efa-e28d-446e-b320-b5ccf9afd7d9.jpg</url>
      <title>DEV Community: HackerMe</title>
      <link>https://dev.to/hackerme</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hackerme"/>
    <language>en</language>
    <item>
      <title>Website Security: 7 Practical Checks, and What They Don't Prove</title>
      <dc:creator>HackerMe</dc:creator>
      <pubDate>Mon, 02 Nov 2026 08:09:59 +0000</pubDate>
      <link>https://dev.to/hackerme/website-security-7-practical-checks-and-what-they-dont-prove-2866</link>
      <guid>https://dev.to/hackerme/website-security-7-practical-checks-and-what-they-dont-prove-2866</guid>
      <description>&lt;p&gt;&lt;em&gt;Published by the HackerMe team (Agura), the makers of HackerMe, a free automated website security scanner. The checks below are vendor-neutral. Each one is marked as a public check (anyone can run it from outside), a maintainer check (it needs access to the server, the code or the admin panel), or both. Run active tests such as login attempts only on systems you own or have written permission to test.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A clean result on any of these checks does not mean a site is secure. They are a baseline for catching common, avoidable gaps, and each section says what a pass does and doesn't tell you.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. HTTPS redirect and certificate (public check)
&lt;/h2&gt;

&lt;p&gt;Request the HTTP version and see where it goes, then request the HTTPS version to inspect the response and certificate handling.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sI&lt;/span&gt; http://example.com | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 5
curl &lt;span class="nt"&gt;-sS&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; - &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null https://example.com/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Expected:&lt;/strong&gt; a permanent redirect (&lt;code&gt;301&lt;/code&gt; or &lt;code&gt;308&lt;/code&gt;, see &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/308" rel="noopener noreferrer"&gt;MDN: 308&lt;/a&gt;) from HTTP to HTTPS. The second command fails with a TLS error if the certificate is expired, mismatched or untrusted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finding:&lt;/strong&gt; content served over plain HTTP, or a certificate error. A temporary redirect (&lt;code&gt;302&lt;/code&gt;/&lt;code&gt;307&lt;/code&gt;) is not a vulnerability by itself, treat it as a configuration point to review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doesn't prove:&lt;/strong&gt; that certificate renewal is automated or that every subdomain is covered. Those are maintainer checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. HSTS (public check)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sI&lt;/span&gt; https://example.com | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; strict-transport-security
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Expected:&lt;/strong&gt; an HSTS policy with a positive &lt;code&gt;max-age&lt;/code&gt; appropriate to the site's rollout. One year is a common target for mature deployments, and a shorter value is not necessarily an error (&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security" rel="noopener noreferrer"&gt;MDN: HSTS&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Careful:&lt;/strong&gt; &lt;code&gt;includeSubDomains&lt;/code&gt; applies the policy to every subdomain, so add it only once all of them serve valid HTTPS. HSTS for the main domain alone does not have that requirement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finding:&lt;/strong&gt; the header is missing on HTTPS responses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doesn't prove:&lt;/strong&gt; that the site has no mixed content.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Other security headers (public check)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sI&lt;/span&gt; https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for &lt;code&gt;Content-Security-Policy&lt;/code&gt;, &lt;code&gt;X-Content-Type-Options: nosniff&lt;/code&gt;, &lt;code&gt;Referrer-Policy&lt;/code&gt;, &lt;code&gt;Permissions-Policy&lt;/code&gt;, and a clickjacking control (&lt;code&gt;X-Frame-Options&lt;/code&gt; or CSP &lt;code&gt;frame-ancestors&lt;/code&gt;).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Finding:&lt;/strong&gt; a missing header is a prompt to review. For CSP, &lt;code&gt;unsafe-inline&lt;/code&gt; alone is not an automatic failure, because its meaning depends on the full policy and browser support (&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/script-src" rel="noopener noreferrer"&gt;MDN: script-src&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doesn't prove:&lt;/strong&gt; that the application is free of XSS. Headers reduce the impact of a bug, they don't remove it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Exposed files (public check)
&lt;/h2&gt;

&lt;p&gt;Request &lt;code&gt;/.env&lt;/code&gt;, &lt;code&gt;/.git/config&lt;/code&gt;, &lt;code&gt;/backup.zip&lt;/code&gt; and &lt;code&gt;/phpinfo.php&lt;/code&gt; on your own domain.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Expected:&lt;/strong&gt; &lt;code&gt;404&lt;/code&gt; or &lt;code&gt;403&lt;/code&gt; with no sensitive content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finding:&lt;/strong&gt; any &lt;code&gt;200&lt;/code&gt; response that returns real file contents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doesn't prove:&lt;/strong&gt; that nothing else is exposed. This is a short list of well-known paths, not a full discovery.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Login and admin surface (public check plus maintainer check)
&lt;/h2&gt;

&lt;p&gt;An accessible login page is not a weakness in itself. Check what sits behind it. Publicly, with a test account on a system you own or are authorized to test, see whether repeated failed logins are throttled. Whether MFA is enforced and how lockouts are configured is a maintainer check.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Finding:&lt;/strong&gt; administrative functions accessible without proper authentication or authorization, or missing effective protection against repeated login attempts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doesn't prove:&lt;/strong&gt; that credentials are strong or that none have leaked.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Cookies and sessions (public check plus maintainer check)
&lt;/h2&gt;

&lt;p&gt;In the browser dev tools, open Application, then Cookies. Session cookies should have &lt;code&gt;Secure&lt;/code&gt;, &lt;code&gt;HttpOnly&lt;/code&gt; and &lt;code&gt;SameSite&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Logout needs more than deleting the cookie. Using your own test account, verify that a previously valid session token no longer grants access after logout. Maintainer access helps confirm how invalidation is implemented. This follows the approach in the &lt;a href="https://wstg.owasp.org/v4.2/4-Web_Application_Security_Testing/06-Session_Management_Testing/06-Testing_for_Logout_Functionality/" rel="noopener noreferrer"&gt;OWASP guide to testing logout&lt;/a&gt; and the &lt;a href="https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html" rel="noopener noreferrer"&gt;OWASP Session Management Cheat Sheet&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Finding:&lt;/strong&gt; missing flags, or an old session token that still works after logout.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Software inventory and error handling (maintainer check, partly public)
&lt;/h2&gt;

&lt;p&gt;List your CMS, plugins, frameworks and server packages and compare each with current releases and advisories. Publicly, trigger a 404 and a malformed form input and look for stack traces, file paths or database errors.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Finding:&lt;/strong&gt; components with known advisories, or detailed errors shown to visitors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doesn't prove:&lt;/strong&gt; that the versions visible from outside are the whole picture, since some are hidden.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example: reading one result
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ curl -sI https://example.com | grep -i -E "strict-transport|content-security|x-content-type"
strict-transport-security: max-age=31536000
x-content-type-options: nosniff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;HSTS and &lt;code&gt;nosniff&lt;/code&gt; are present. No CSP header appears in this response. Review whether an appropriate policy is enforced on the site's HTML pages. This output says nothing about whether the application itself has vulnerabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make it routine
&lt;/h2&gt;

&lt;p&gt;Re-run the baseline after deployments and major updates, and keep a short note of what you checked and when. A passing baseline is a starting point, not a guarantee.&lt;/p&gt;

&lt;p&gt;Disclosure: we are the team behind HackerMe, which runs automated checks against a public website for free: &lt;a href="https://hackerme.ai" rel="noopener noreferrer"&gt;https://hackerme.ai&lt;/a&gt;. The checklist above works without it.&lt;/p&gt;

&lt;p&gt;What would you add to this list? We would like to hear it in the comments.&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
