This is most certainly an incorrect printer setup than an issue with Cura.
For years I used to have to have an offset in the slicer to compensate for an incorrectly set z-height, until I eventually fully comprehended the differences and implications of “offset”, “level”, “flat”, “mesh leveling” etc…
Your printer should NEVER push the nozzle into the bed, regardless of what GCode is sent to it if the z-offsets are set correctly.
If you send “G28” what does your LCD say your Z height is (or use M114 to read the current positions at a terminal)? It should match the actual distance between the nozzle and the bed. Note, the actual distance will probably NOT be zero unless you (unnecessarily) spent a lot of time physically adjusting your Z end stop.
I used to adjust my z-offset in the slicer to correct for my z-home position being wrong.
If the actual z gap is different to what M114 says then you should really correct this with M851.
Don’t forget to a) save (M500) then b) re-home. If you have enabled mesh leveling then I recommend M420 S1 followed by G28 then re-measure the real distance and check against M114 result.
Once these are correct you can then dis-regard any z- offset corrections in the slicer, and trust that the first layer will actually be what you ask for. “G1 Z0” will put the nozzle just onto the bed, “G1 Z1” will give a gap of 1mm etc…
If you have calipers you can adjust with M851 until a piece of paper is JUST held after moving up “G1 Z1”, place paper under nozzle then “G1 Zmeasuredpaperthickness” where ‘measuredpaperthickness’ is… well… the thickness of the paper as measured with your calipers. I have gotten really good at visually guestimating 0.1mm instead of using paper
As I say, in the past I tried to correct for bad z-offset by either changing the z-offset in the slicer (bad) or changing the initial layer height (REALLY bad, since this also affects the flow rate and not just the height, so is basically completely wrong)