MINNEAPOLIS -- The Minnesota Vikings are going to have to surpass 58 yards passing to stay in the playoff chase.
Peterson ran 23 times for a season-high 153 yards and a first-quarter touchdown, and the Vikings survived a dreadful second half to hang on and hand the Cardinals their third straight loss.
"The way we've tried to structure our team, the philosophy lends itself to winning games like this when you are not completing a lot of balls down the field in a league where so many say that's the way you have to win," coach Leslie Frazier said, adding: "That's a formula for success."
Christian Ponder threw a second-quarter touchdown pass to Percy Harvin, but he had only one completion for 4 yards in the second half while the Vikings (5-2) punted five straight times. The last four were three-and-out possessions.
"To win an ugly game like this is huge. That shows how good of a team we are," said Ponder, who finished 8 for 17 for 58 yards and two interceptions.
One of them led to a second-quarter touchdown run by LaRod Stephens-Howling.
The other gave the Cardinals a 47-yard field goal try on the last play of the first half, after a strange decision by the Vikings to pass three straight times inside their own 25 but take their time doing it.
But Jay Feely's kick was wide right.
"I've got to be a lot smarter and make better decisions. That's for sure," said Ponder, who has seven turnovers in the past three games.
Two of them were turned into touchdowns last week at Washington.
Rookie Harrison Smith returned an interception 31 yards for a touchdown in the first minute of the second half, giving the Vikings enough of a cushion to withstand the offensive woes down the stretch.
John Skelton hit Andre Roberts for a 6-yard scoring pass with 1:48 left to pull the Cardinals (4-3) within one score, but they tried an onside kick and Peterson ended the game with a tough inside run for just Minnesota's the second first down of the second half.
Seven games into his comeback from reconstructive surgery on his left knee, Peterson is in prime form.
"There's still a little missing. You guys probably think I'm crazy, but it is," Peterson said. "I feel good. I'm not going to complain. I'm just going to keep working and just keep getting better each week."
Skelton went 25 for 36 for 262 yards and two turnovers, taking the job from Kevin Kolb (damaged ribs).
Many of the throws he missed were way off the mark, but the lack of time he had in the pocket made it difficult to judge his performance.
The Vikings sacked him seven times, giving the Cardinals an NFL-most 35 allowed this season. Antoine Winfield delivered a jarring stop on fourth-and-1 at the Minnesota 17 midway through the third quarter.
Then with 6:16 left on fourth-and-10, Skelton was taken down near midfield in a swarm led by Kevin Williams.
"Nobody's ready to call it a season. We're going to get back to our winning ways, starting with San Francisco this week. It'll be another dogfight. NFC West at home. We've just got to be ready," Skelton said.
After starting 4-0, the Cardinals have scored a total of 33 points.
"We like when teams come out and want to throw the ball on us. We know we have good guys on the back end, and we know we have a heck of a good pass rush," said cornerback Chris Cook, who helped limit Cardinals star Larry Fitzgerald to 29 yards on four receptions.
For the third straight year, Fitzgerald's visit to his hometown was ruined. The Cardinals haven't won here since 1977, when they played in St. Louis and the Vikings played outdoors.
Peterson tied Robert Smith's franchise record with his 29th career 100-yard rushing game. ... The 5-foot-7, 185-pound Stephens-Howling finished with 104 yards on 20 carries, the first 100-yard game for the Cardinals since last November. ... The Vikings had only two first downs outside of their two touchdown drives. ... Cardinals RG Adam Snyder suffered a bruised quadriceps in the third quarter and didn't return. For the Vikings, TE John Carlson, their biggest free-agent signing who has only three catches for 8 yards this season, left the game with a concussion. ... Harvin returned the opening kickoff for a touchdown, but Marvin Mitchell was called for an illegal block in the back to wipe it out.