The bill also prohibits describing Nazi death camps in Poland as Polish. It sets fines or a maximum three-year jail term as punishment.
The proposal caused a weekend rift with Israel, which accuses Poland of attempting to change history.
The bill must be signed off by the president before entering into law.
It passed in the upper house of the Polish parliament with 57 votes to 23, with two abstaining, according to AFP news agency.
On Sunday Israeli Prime Minister Benjamin Netanyahu spoke out against the draft, calling for it to be dropped.
“I strongly oppose it. One cannot change history and the Holocaust cannot be denied,” he said in a statement.
Polish President Andrzej Duda responded in a television interview, saying they could not back down and asserted that his country had the right “to defend historical truth”.
On Wednesday, a US State Department spokeswoman also asked the Polish government to rethink the bill, saying the US was concerned the legislation could undermine free speech in the country and cause further diplomatic division.
Poland was attacked and occupied by Nazi Germany during World War Two. Millions of its citizens were killed, including three million Polish Jews in the Holocaust.
The country has long objected to the use of phrases like “Polish death camps”, which suggest the Polish state in some way shared responsibility for camps such as Auschwitz. The camps were built and operated by the Nazis after they invaded the country in 1939.
The Polish government said the bill was not intended to limit freedom to research or discuss the Holocaust, but protect the country’s name abroad.
Deputy Justice Minister Patryk Jaki, who authored the bill, said the Israeli reaction was “proof how necessary this bill is”. (Courtesy BBC)