Dan Fitchett gave the away side an eighth minute lead but the Bees hit back in the second-half with Ahmed Abdulla, who replaced the injured Mark Byrne, powering a header home on 72 minutes.
One minute later man of the match Andy Yiadom burst down the right, cut inside and fired the ball into the corner before Keanu Marsh-Brown sealed the points from a deflected free-kick.
Barnet created the first chance of the match when Luisma Villa shot just wide from 25-yards with five minutes played.
But just three minutes later the Whites took the lead when Fitchett volleyed home at the back post after Edgar Davids conceded a sloppy free-kick.
The Bees reacted positively and they could have levelled shortly after when Keanu Marsh-Brown latched onto Villa’s superb cross-field pass to cross low into the box but nobody was on hand to convert.
Marsh-Brown then shot wide before both sides were forced into changes. Luke Ruddick departed for the visitors and shortly after Mark Byrne exited play after a collision with keeper Puddy.
Ahmed Abdulla replaced the Irishman and within two minutes of his introduction the Bees almost levelled when Luke Gambin burst into the box and shot straight at Puddy.
Salisbury almost doubled their lead when Barnet failed to deal with another set-piece but luckily Elliot Johnson was alert to clear the ball off the line.
The final chance of the half fell to Marciano Mengerink who turned sharply in the box before firing the ball in at the near post but once more Puddy was there to deny the Bees.
Davids’ made one change during the break with Mauro Vilhete replacing Gambin.
The first chance of the half fell to Villa who curled an effort just wide of the post before fan favourite Clovis Kamdjo came off the bench for the visitors.
With time ticking away the Bees were dragged back into the game by Abdulla who headed powerfully past Puddy.
Two minutes later Davids’ side took the lead as Yiadom burst down the right and into the box before cutting past one defender and hitting it low into the net.
The visitors failed to create any clear-cut chances in the second period and with two minute remaining Marsh-Brown’s deflected free-kick sealed Barnet’s first win in five matches.
Barnet: Stack; Yiadom, Davids, Stephens, Johnson; Villa (Acheampong 83), Casabella, Byrne (Abdulla 31); Marsh-Brown, Gambin (Vilhete 45), Mengerink.
Barnet substitutes: Acheampong, Crawford, Jupp, Abdulla, Vilhete.
Salisbury City: Puddy; Ruddick (Brett 19), Clarke, Wilson, McPhee, Wellard, Lewis (Kamdjo 52), Frear, Sinclair, Fitchett, MacDonald.
Salisbury City substitutes: Brett, Kamdjo, Wright, Feeney, Thomson.