Palace led thanks to Andros Townsend's first-half goal, but quickfire strikes from Salah and Roberto Firmino turned the game around eight minutes into the second half.
James Tomkins headed Palace level but an awful error by veteran goalkeeper Speroni, tipping James Milner's cross towards his own goal for Salah to score his 50th goal in the Premier League, gave Liverpool a lead that was later added to by Sadio Mane.
Palace netted a stoppage-time consolation through Max Meyer but Liverpool - who had Milner sent off for a second bookable offence late in the second half - held on to stretch their cushion at the top, with Manchester City away to managerless Huddersfield Town on Sunday afternoon (Monday morning AEDT).
Fabinho fired an early effort over Speroni's crossbar, the 39-year-old goalkeeper becoming the oldest player to feature in the Premier League this season.
Joel Matip then headed a Milner corner narrowly wide as Liverpool pushed for the opener, but it was Palace who took the lead in the 34th minute.
Townsend, who moments earlier survived a penalty appeal for handball, slammed in a first-time finish after Wilfried Zaha beat makeshift right-back Milner far too easily to send in a fizzing low cross.
But Liverpool were level within a minute of the restart, Salah pouncing from close range with a deft close-range finish after Virgil van Dijk's speculative drive deflected high into the air.
Within seven minutes Liverpool were in front after another stroke of fortune, Naby Keita setting up Firmino for a shot that took a deflection to beat the helpless Speroni.
Palace drew level in the 65th minute, however, as Tomkins took advantage of slack marking to head home Luka Milivojevic's corner at the back post, but Liverpool hit back again 10 minutes later.
Speroni's misjudgment of a Milner cross saw the ball again loop invitingly for Salah to finish from virtually on the line.
Jeffrey Schlupp missed a great chance to score an equaliser for Palace and Liverpool were reduced to 10 men after Milner was dismissed for a second yellow card having tripped Zaha.
But Liverpool's threat on the counter was maintained and they made sure of the points in the third minute of added time when Mane cut in from the left wing to beat Speroni.
There was still time for yet another goal, though, as substitute Meyer beat Alisson from inside the box.
What does it mean? Palace almost party-poopers again
Winning a title needs some luck and Liverpool certainly had fortune on their side as Salah and Firmino benefited from deflections to score before Speroni gifted them the third goal. Former Reds boss Roy Hodgson will be wondering how his side managed to lose after scoring three.
Salah instinct brings up milestone
Liverpool were indebted to Salah for his brace, the goals coming from a combined distance of about five yards out. He may have had little impact outside of those twin moments but, as he has so often, Salah's quality made a big difference. He now has 50 Premier League goals and only three players have reached that landmark in fewer appearances than his 72.
Salah simulation causes anger
The Egypt superstar scored twice, but there will be more debate about an incident in the first half that saw Salah go to ground in Palace's box exceptionally easily. After winning a number of recent penalties, Salah may be earning a reputation he will find it difficult to shake off. Palace defenders reacted angrily when he went down, but referee Jonathan Moss opted not to book Salah.
Key Opta stats:
- Liverpool have won seven consecutive Premier League home games for the first time since January 2014. - Palace are the first Premier League team to score more than once at Anfield since February 2018 when Tottenham Hotspur drew 2-2 with Liverpool. - The Reds hit the 1,000-goal mark in the Premier League at Anfield (1,002 in total), only the third side to score 1,000+ goals at a specific venue in the competition (Manchester United, 1,094 at Old Trafford and Chelsea, 1,005 at Stamford Bridge).
- Milner picked up his second red card for Liverpool in the Premier League and was also sent off against Crystal Palace in March 2016 after a foul on Wilfried Zaha.