Detroit allowed 10 goals in a game for the first time in 17 seasons.
The contest was deadlocked at 2-2 when Porter, recalled from Peoria in the American Hockey League last month, put the Blues in front for good with 1:36 to go in the first. Matt D'Agostini, B.J. Crombeen and David Backes all scored in the first half of the second period to give the Blues a 6-2 advantage.
Porter's second goal of the game, and the third of his career, came with 2:10 remaining in the third period.
St. Louis, which has been virtually eliminated from playoff contention, won for the third time in four games. Jaroslav Halak made 41 saves to get the victory.
Detroit has lost five out of six but still has a one-point lead over idle San Jose for second place in the Western Conference.
Joey MacDonald allowed seven goals on 39 shots before being relieved by Thomas McCollum.
McCollum, making his NHL debut, gave up three goals on eight shots. MacDonald was making his second straight start for the injured Jimmy Howard.