Playing their second straight game without star Tim Duncan, the Spurs won their fifth in a row and remained unbeaten in 12 home games. It has been eight seasons since Utah has won in San Antonio.
San Antonio trailed by four going into the fourth period, but took the lead early in the quarter and spent the rest of the game fighting off the Jazz.
The Spurs' lead was only one when Ginobili went to the line with 17 seconds left, but he made two foul shots. Utah's Carlos Boozer was then called for a controversial charging foul and Bonner made one of two from the line with 14 seconds remaining.
After another futile Utah possession, Ginobili clinched it with two more free throws with six seconds to go.
Ginobili led San Antonio with 37 points. Duncan was held out with a bruised knee and sprained ankle suffered earlier in the week.
Boozer and Deron Williams both scored 28 for Utah.