They aren't citizens in the country, they shouldn't be allowed to directly influence elections or buy, which often happens, influence in congress.
The best solution would be for candidates to simply stick to campaigning in person and doing debates, but that's Utopian and not very realistic. I also do not like the idea of institutionalizing the big parties which is what public funding of election ads can, but not always, happen. We already have this with publicly funded primary elections.
I for one am for free speech, even if it is expensive. However, for this to work, it needs to be known by everyone. Hyper-information is what I personally would advocate, this means full disclosure laws. IMO, you give up your right to privacy when you take a more active part in politics than voting. I have the right to know who donates money to who. If you are worried about reprisal, then make it illegal to fire people for their political opinion, or you can deal with it?