HTML Email versturen met special characters worden leeggemaakt

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Daniel van Seggelen

Daniel van Seggelen

23/01/2025 09:30:57
Quote Anchor link
HI

Ik heb een wachtwoord :

f4=<H106w~:W

Deze komt goed in de database en kan ook inlogen.
Maar als ik deze per mail als $_POST waarde in een html mail plaat, dan komt alleen het volgende door.:

f4=

Waar ligt dit aan, en hoe is dit op te lossen?
 
PHP hulp

PHP hulp

15/02/2025 11:42:17
 
- Ariën  -
Beheerder

- Ariën -

23/01/2025 10:56:57
Quote Anchor link
Het kan aan veel zaken liggen, maar ik vermoed dat je ergens een bewerking eroverheen gooit die iets lijkt te strippen.

Maar overigens: Wachtwoorden in een mail plaatsen. AUW!
Laat je gebruikers liever een wachtwoord bedenken dan dat jij die open en bloot communiceert.
Gewijzigd op 23/01/2025 10:57:15 door - Ariën -
 
Ivo P

Ivo P

23/01/2025 11:17:10
Quote Anchor link
afgezien van plain-text passwords:

vervang die < door &lt;

Dat kun je, samen met enkele andere tekens regelen met htmlspecialchars()

Toevoeging op 23/01/2025 11:37:32:

want nu "denkt" je browser of email-client dat daar een html-tag begint.

Stel dat het wachtwoord was abc<br>123

Wat is dan het verschil met "print het wachtwoord abc en dan een enter naar de volgende regel en begin met 123"?

En html-tags mogen spaties gevatten: <div class="foo">, dus een tag loopt door tot de volgende >
In jouw geval heb je niet de afsluitende > staan, dus alles wat verder nog komt, valt onder de tag tot je eindelijk een volgende html-tag aantreft.
 
Adoptive Solution

Adoptive Solution

23/01/2025 12:23:04
Quote Anchor link
Ik gebruik dit :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$password = $db->real_escape_string( trim( $_POST['pass1'] ) );


Staat dan netjes in de e-mail EN in de database.
 
- Ariën  -
Beheerder

- Ariën -

23/01/2025 12:43:34
Quote Anchor link
Hoezo zou je het escapen, als je het password nog wilt hashen? Je wilt immers niet bepaalde gevaarlijke tekens eerst escapen, zodat je het wachtwoord vernachelt.
Gewijzigd op 23/01/2025 12:43:54 door - Ariën -
 
Ivo P

Ivo P

23/01/2025 12:43:39
Quote Anchor link
Adoptive Solution op 23/01/2025 12:23:04:
Ik gebruik dit :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$password = $db->real_escape_string( trim( $_POST['pass1'] ) );


Staat dan netjes in de e-mail EN in de database.


Nee.
dat is de verkeerde escaping. Deze functie maakt je string veilig om in de database te zetten. Simpel gezegd: een ' wordt vervangen door \'

Dus in de query komt bij de invoer 'foto's' te staan 'foto\'s'
Vervolgens snapt je database dat die ' voor de s niet het einde van de value is.

Met een <, > of & doet dit niets.
Daarvoor gebruik je htmlspecialchars() om dit veilig in een lap html te plaatsen.
Let wel: bij het plaatsen, niet bij het inserten in je database.
Je wilt namelijk niet &lt; in je database zetten. Leuk om de tekst weer te geven, maar als de gebruiker die < in zijn password invoert, dan is dat niet gelijk aan &lt;

En ook voor andere teksten: je hebt vast wel eens in een tekst in een website of pdf document iets als V&amp;D zien staan: dan wordt op de verkeerde plek de html-escaping toegepast.

Toevoeging op 23/01/2025 12:49:50:

oh, en er is natuurlijk geen reden om een password plain-text op te slaan. Daar zijn genoeg mooie simpele oplossingen voor in php.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.