The hosts held control for large periods and pulled clear in the closing stages, scoring six tries in total to secure a hard-fought win at DHL Stadium and set up a semi-final against either Leinster or the Lions.
There will also be concern over an injury to star flyhalf Sacha Feinberg-Mngomezulu, however, who left the field unaided after falling awkwardly on his knee as he scored a try.
Cardiff made the stronger start and opened the scoring through Cameron Winnett, with Ioan Lloyd adding the conversion for a 7-0 lead. The Stormers responded through Andre-Hugo Venter, who crashed over from close range, before Sacha Feinberg-Mngomezulu levelled the scores with the conversion.
The hosts then edged ahead when Ntuthuko Mchunu powered over from close range, before threatening to run away with the contest when Damian Willemse created space for Leolin Zas, who finished well in the corner to extend the lead. Feinberg-Mngomezulu added the conversion to make it 21-7.
Cardiff hit back early in the second half when James Botham forced his way over and Ioan Lloyd converted to reduce the deficit, but the Stormers immediately responded through Feinberg-Mngomezulu, who intercepted a Cardiff kick and raced clear for a crucial try - though that his was his final involvement in the match.
Paul de Villiers then added another from a driving maul to push the Stormers further ahead, before Cardiff were reduced to 14 men after Keiron Assiratti was yellow-carded for repeated scrum infringements.
Cardiff briefly threatened again when Botham scored his second and Lloyd converted to make it 26-21, but that was as close as they would get.
The Stormers finished strongly, with Jurie Matthee adding a penalty before JJ Kotze powered through the defence for their sixth try after a strong attacking move. Matthee added two late conversions, including one on the hooter, to complete the scoring.