Alex Smith threw for 267 yards and two touchdowns, and the San Francisco 49ers forced five turnovers to blow past the Arizona Cardinals 23-7 on a soggy Sunday at Candlestick Park.