<?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: Glarion</title>
    <description>The latest articles on DEV Community by Glarion (glarion).</description>
    <link>https://dev.to/glarion</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%2Forganization%2Fprofile_image%2F14654%2Fefee23a4-657a-4268-be8c-45ad954f072b.png</url>
      <title>DEV Community: Glarion</title>
      <link>https://dev.to/glarion</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/glarion"/>
    <language>en</language>
    <item>
      <title>Turn a website security finding into a client-ready next step</title>
      <dc:creator>aurelio avila</dc:creator>
      <pubDate>Sun, 06 Sep 2026 23:39:35 +0000</pubDate>
      <link>https://dev.to/glarion/turn-a-website-security-finding-into-a-client-ready-next-step-5cch</link>
      <guid>https://dev.to/glarion/turn-a-website-security-finding-into-a-client-ready-next-step-5cch</guid>
      <description>&lt;p&gt;A scanner can identify an observation. It cannot, by itself, settle every business decision that follows.&lt;/p&gt;

&lt;p&gt;For an agency managing client websites, a useful report needs to bridge that gap. The reader should be able to identify the affected website, understand the evidence and decide who should investigate next.&lt;/p&gt;

&lt;p&gt;Here is a practical reporting structure we use in Glarion. The examples below are fictional and illustrate communication, not findings about a real customer's website.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the observation
&lt;/h2&gt;

&lt;p&gt;Compare these two statements:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your website is insecure.&lt;/p&gt;

&lt;p&gt;The homepage response observed during this check did not include a Content-Security-Policy header.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The second statement is narrower, but more useful. It identifies an observable condition without claiming that an attack occurred or that the whole website has been assessed.&lt;/p&gt;

&lt;p&gt;Include the domain, the check date and enough context to reproduce the observation. Avoid putting credentials, session tokens or unnecessary personal data into evidence that will be forwarded to a client.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explain the consequence separately
&lt;/h2&gt;

&lt;p&gt;For a missing CSP, the explanation might be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This response did not declare a Content Security Policy through an HTTP header. Check whether the page supplies a policy through HTML before concluding that none exists. An appropriate policy can reduce the impact of injected content.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This explains why the finding matters without claiming that a single header prevents every attack. Severity is a useful signal, but it should not replace an explanation of the risk in the website's context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the next step concrete
&lt;/h2&gt;

&lt;p&gt;A recommendation such as “fix security headers” leaves too much work to the reader.&lt;/p&gt;

&lt;p&gt;A more useful next step is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ask the development team to test a report-only Content Security Policy, review the resources the site needs and investigate violations before enforcing it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Report-only mode lets the team observe violations without enforcing that policy. Centralized collection also requires reporting configuration; simply naming the mode is not an implementation plan. The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy-Report-Only" rel="noopener noreferrer"&gt;MDN reference&lt;/a&gt; covers the relevant header and reporting directives.&lt;/p&gt;

&lt;p&gt;Agree on an owner and a follow-up check. Do not mark a finding resolved merely because a change was requested.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate actions, decisions and reference observations
&lt;/h2&gt;

&lt;p&gt;Not everything belongs in one list of problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Actions&lt;/strong&gt; have a concrete proposed fix or investigation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decisions&lt;/strong&gt; need context from the people responsible for the website. Publishing a security contact, for example, requires choosing a monitored address and a process for handling reports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reference observations&lt;/strong&gt; preserve useful context, such as an observed HTTPS endpoint. They are not a count of security tests passed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keeping these categories separate helps a client understand what requires a response. It also avoids inflating a report with information that looks more urgent than it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the limits visible
&lt;/h2&gt;

&lt;p&gt;A report describes what was observed within a particular scope and at a particular time. A clean result is not proof that the website has no vulnerabilities today.&lt;/p&gt;

&lt;p&gt;Keep this explanation close to the findings, and retain it in exported documents. A forwarded PDF should still make sense without the application that produced it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A checklist before sending
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Can the reader identify the domain, date and scope?&lt;/li&gt;
&lt;li&gt;Is each observation separated from assumptions?&lt;/li&gt;
&lt;li&gt;Is the consequence understandable without scanner terminology?&lt;/li&gt;
&lt;li&gt;Does each recommendation provide a next step?&lt;/li&gt;
&lt;li&gt;Are context-dependent decisions distinct from reference observations?&lt;/li&gt;
&lt;li&gt;Is there a way to verify the follow-up work?&lt;/li&gt;
&lt;li&gt;Are the limits visible in both the web report and PDF?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We build Glarion for agencies that need this workflow. You can inspect the &lt;a href="https://glarion.app/sample-report.html?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=agency_launch_202609&amp;amp;utm_content=client_report_article" rel="noopener noreferrer"&gt;fictional sample report without signing up&lt;/a&gt;. Glarion provides a limited free public check; full scans require a paid plan and current proof of domain control. It does not replace a manual penetration test.&lt;/p&gt;

&lt;p&gt;What information do you find most useful when turning a technical observation into work a client can approve?&lt;/p&gt;

</description>
      <category>security</category>
    </item>
  </channel>
</rss>
