The visitors did look to have a chance of a response when Gianni Bruno was dismissed for the hosts, but Didier Digard and Mahamane Traore both picked up second yellow cards to leave Nice with nine men to finish the encounter.
© Getty Images
The home side wasted little time in creating the game's first chance, but Yannick Cahuzac was unable to keep his shot down from the edge of the box inside the opening two minutes.
Bastia had a great chance 13 minutes later, when Milos Krasic found space on the right of the box and crossed to the far post, but a stretching Bruno was unable to get his shot on target.
However, Bastia went in front just nine minutes before half time when Squillaci was picked out from a corner to nod in at the far post.
The hosts nearly doubled their lead immediately after the break when Bruno's cross from the left of the box found Ryad Boudebouz at the far post, but he could only bounce his shot into the side-netting.
Nice were then given a boost on the hour mark when Bruno was handed a straight red card after leaving his studmarks in the midriff of Nemanja Pejcinovic.
However, Nice were also reduced to 10 men in the 80th minute when Digard picked up his second yellow card of the evening.
Nice were then forced to play the final seven minutes with just nine men after Traore earned his second booking.
Bastia move up to 11th in Ligue 1 while Nice slip to seventh.