I have a confession: I didn’t study computer science.
I also didn’t study software engineering, cybersecurity, or any other relevant major that would make sense for someone working for an application security company. In fact, I studied fashion design. So you can imagine, dear reader, my daily confusion with the litany of acronyms and concepts that abound in this humble industry. SAST/DAST/IAST, zero-day, CVE, attack surface, CRUD… the list goes on.
But the concept that took by far the longest to wrap my head around now seems strikingly easy to grasp: the difference between the Import and Reimport functions.
Each one is used to add scan results to Tests in DefectDojo. They both accept the same file, and they both show up in Import History. So what’s the difference between them?
Import was originally added to DefectDojo in its very earliest versions. Its purpose was simple: capture a point-in-time assessment for new occurrences of data.
Each time you import a scan report (from SAST, a dependency scan, and so on), DefectDojo stores it in a new Test and creates a Finding for every vulnerability in the report.
However, the reality of application security is that you won’t just scan once and call it a day. Every week you’re scanning your network infrastructure, or you’re doing a container scan on every deploy.
Reimport was added later to address exactly this. It represents testing efforts where the scope of each Test hasn’t changed. That way, you can see how the Findings shift from one scan to the next.
In essence, Import is for new occurrences of data, while Reimport is for further iterations of the same data in the same context. Import records what a scan found, and Reimport records what changed since the last scan.
The world’s oldest surviving photograph, View from the Window at Le Gras, was taken sometime in the summer of 1827.
It wasn’t until The Horse in Motion in 1878 that anyone put images in sequence to create a sense of movement.
Reimport functions similarly by imbuing Findings with a “sense of movement.” It still includes frames of the same subject, but its meaning is derived from the difference between them.
If you watch a movie one frame at a time, it’s harder to follow the arc of the plot. Relying solely on Import to ingest your data would present you with the same problem: you can see what’s there, but not what’s changing.
Picture a nightly scan of one repository, run once each day.
On Monday, the scan reports 16 Findings, and the same 16 show up in each scan through Thursday. After Thursday’s scan, the team fixes 15 of them, so Friday’s scan reports only the one that remains.
With Import, each day’s run would create a separate Test with its own full set of Findings. Come Friday, there are five separate Tests, and the same vulnerabilities appear in each one. Each Import is a new photograph. Deduplication can flag the repeats, but you still have to compare them separately to figure out what actually changed.
Each Import creates a separate Test, so duplicate Findings from earlier scans pile up, and nothing shows as Mitigated even after the fix. The Reimports column remains 0 because each scan has been imported separately.
With Reimport, each run feeds a single Test and diffs the scan against the existing Test. It will then create Findings for newly introduced issues, log unchanged ones, close Findings that disappeared, and reopen any that have reappeared.
That Test then becomes a living document of that scanning pipeline over time. Recurring scans are contained within one Test page, where Import History records what was created, closed, reactivated, and left untouched on each run, along with metadata like timestamp, branch/tag, build ID, commit hash, and version (when provided).
Reimporting each subsequent scan into the original Test keeps track of whether the Findings persisted, were mitigated, or recurred. The Reimports count increases by 1 with each ingestion of the next scan.
Imports, like photographs, can still tell a story. And sometimes photographs are even more impactful specifically because they isolate a moment in time from what came before or what followed. But in application security, following Findings through time is essential to keeping your security posture strong. Reimport is equipped to help you do just that.
Before you start defaulting to Reimport for every scan, there are a few things worth acknowledging.
Looking back, my confusion between Import and Reimport makes sense. They seem like two buttons that do the same thing, but really, one captures a moment and the other is defined by movement.
So the next time you have a scan to load, ask yourself the question that finally made it click for me: do I want a photograph, or do I want to see what’s changed since the last frame?