Ryan Miller made 35 saves to get the win. The only goal he allowed came when one of his defensemen misplayed a loose puck.
The Sabres ended a two-game skid, building a 3-0 lead midway through the third period and then surviving Phil Kessel's shorthanded goal with 3:27 to play.
Toronto failed to score on any of its six power plays and lost in Buffalo for the sixth straight time.
Jonas Gustavsson allowed three goals on 28 shots to take the loss. He started his fourth straight game in place of the injured Jean-Sebastien Giguere.