Niet juiste weergaven van script
Ik heb een probleem met een gedeelte van mijn website waar symbolen niet correct worden weergegeven.
Ik probeer symbolen zoals "e;, ©, en ë veilig te tonen, maar ze worden niet juist weergegeven.
Heeft iemand een idee wat de oorzaak kan zijn en hoe ik dit kan oplossen?
Alvast bedankt voor de hulp!
Foto van het script.
ip in de foto is onbelangrijk het is een vpn ip.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function sanitize_input($input, $dbcreat) {
$input = $dbcreat->real_escape_string(trim($input));
$input = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
return $input;
}
function decrypt_data($data, $encryption_key, $encryption_iv) {
$encryption_iv = substr($encryption_iv, 0, 16); // Ensure IV is 16 bytes long
$decrypted = openssl_decrypt($data, 'aes-256-cbc', $encryption_key, 0, $encryption_iv);
return $decrypted;
}
if (isset($_GET['id'])) {
$special_id = sanitize_input($_GET['id'], $dbcreat);
$stmt = $dbcreat->prepare("SELECT * FROM notities WHERE special_id = ?");
$stmt->bind_param('i', $special_id);
$stmt->execute();
$result = $stmt->get_result();
$note = $result->fetch_assoc();
if ($note) {
if ($note['password_lock'] == 1 && $_SERVER['REQUEST_METHOD'] !== 'POST') {
header("Location: ?page=privatenote");
exit();
} else {
if ($note['unlimited'] == 0 && $note['views'] >= $note['maximum_viewers']) {
echo 'The maximum viewers has been reached.';
} else {
$ip_anoniem = decrypt_data($note['ip_anoniem'], $encryption_key, $encryption_iv);
$text = decrypt_data($note['text'], $encryption_key, $encryption_iv);
// No need to convert <br /> tags back to newline characters for <textarea>
// Just display the decrypted text in the <textarea>
$stmt = $dbcreat->prepare("UPDATE notities SET views = views + 1 WHERE special_id = ?");
$stmt->bind_param('i', $special_id);
$stmt->execute();
echo '<div class="content-box">';
echo '<h1>'.sanitize_input($note['titel'], $dbcreat).'</h1>';
echo '<textarea readonly rows="10" cols="50">'.htmlspecialchars($text, ENT_QUOTES, 'UTF-8').'</textarea>';
echo '<p><small>IP Address: '.sanitize_input($ip_anoniem, $dbcreat).'</small></p>';
echo '</div>';
}
}
} else {
echo 'Note not found.';
}
$stmt->close();
} else {
echo 'No note ID specified.';
}
$input = $dbcreat->real_escape_string(trim($input));
$input = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
return $input;
}
function decrypt_data($data, $encryption_key, $encryption_iv) {
$encryption_iv = substr($encryption_iv, 0, 16); // Ensure IV is 16 bytes long
$decrypted = openssl_decrypt($data, 'aes-256-cbc', $encryption_key, 0, $encryption_iv);
return $decrypted;
}
if (isset($_GET['id'])) {
$special_id = sanitize_input($_GET['id'], $dbcreat);
$stmt = $dbcreat->prepare("SELECT * FROM notities WHERE special_id = ?");
$stmt->bind_param('i', $special_id);
$stmt->execute();
$result = $stmt->get_result();
$note = $result->fetch_assoc();
if ($note) {
if ($note['password_lock'] == 1 && $_SERVER['REQUEST_METHOD'] !== 'POST') {
header("Location: ?page=privatenote");
exit();
} else {
if ($note['unlimited'] == 0 && $note['views'] >= $note['maximum_viewers']) {
echo 'The maximum viewers has been reached.';
} else {
$ip_anoniem = decrypt_data($note['ip_anoniem'], $encryption_key, $encryption_iv);
$text = decrypt_data($note['text'], $encryption_key, $encryption_iv);
// No need to convert <br /> tags back to newline characters for <textarea>
// Just display the decrypted text in the <textarea>
$stmt = $dbcreat->prepare("UPDATE notities SET views = views + 1 WHERE special_id = ?");
$stmt->bind_param('i', $special_id);
$stmt->execute();
echo '<div class="content-box">';
echo '<h1>'.sanitize_input($note['titel'], $dbcreat).'</h1>';
echo '<textarea readonly rows="10" cols="50">'.htmlspecialchars($text, ENT_QUOTES, 'UTF-8').'</textarea>';
echo '<p><small>IP Address: '.sanitize_input($ip_anoniem, $dbcreat).'</small></p>';
echo '</div>';
}
}
} else {
echo 'Note not found.';
}
$stmt->close();
} else {
echo 'No note ID specified.';
}
Je moet die flag ENT-QUOTE uit die functie verwijderen zodat het beter in een textarea staat.
Sowieso maak je de fout om te sanitizen VOORDAT je het in de database stopt. Dit hoor je uitsluitend bij je output te doen.
'sanitize_input' moet eigenlijk 'sanitize' of 'sanitize_output' gaan heten!
Gewijzigd op 01/07/2024 12:02:23 door - Ariën -
- Ariën - op 01/07/2024 11:44:51:
Je maakt ze onschadelijk met htmlspecialchars(), dus daarom zie je die 'entities'.
Je kan een flag ENT-QUOTE in die functie zetten zodat het beter in een textarea staat. (als dat inderdaad ene textarea is).
Sowieso maak je de fout om te sanitizen VOORDAT je het in de database stopt. Dit hoor je uitsluitend bij je output te doen.
'sanitize_input' moet eigenlijk 'sanitize' of 'sanitize_output' gaan heten!
Je kan een flag ENT-QUOTE in die functie zetten zodat het beter in een textarea staat. (als dat inderdaad ene textarea is).
Sowieso maak je de fout om te sanitizen VOORDAT je het in de database stopt. Dit hoor je uitsluitend bij je output te doen.
'sanitize_input' moet eigenlijk 'sanitize' of 'sanitize_output' gaan heten!
Bedankt, dat heeft al 80% van het script opgelost! Ik heb echter nog één probleem: de tekens < en > worden nog steeds weergegeven als > en ", en enters worden weergegeven als /r of /n.
en hier is de code met de aanpassingen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function sanitize_input_for_db($input, $dbcreat) {
return $dbcreat->real_escape_string(trim($input));
}
function decrypt_data($data, $encryption_key, $encryption_iv) {
$encryption_iv = substr($encryption_iv, 0, 16); // Ensure IV is 16 bytes long
return openssl_decrypt($data, 'aes-256-cbc', $encryption_key, 0, $encryption_iv);
}
if (isset($_GET['id'])) {
// Sanitize the special_id for database query
$special_id = sanitize_input_for_db($_GET['id'], $dbcreat);
$special_id = (int) $special_id; // Convert to integer
$stmt = $dbcreat->prepare("SELECT * FROM notities WHERE special_id = ?");
$stmt->bind_param('i', $special_id);
$stmt->execute();
$result = $stmt->get_result();
$note = $result->fetch_assoc();
if ($note) {
if ($note['password_lock'] == 1 && $_SERVER['REQUEST_METHOD'] !== 'POST') {
header("Location: ?page=privatenote");
exit();
} else {
if ($note['unlimited'] == 0 && $note['views'] >= $note['maximum_viewers']) {
echo 'The maximum viewers has been reached.';
} else {
$ip_anoniem = decrypt_data($note['ip_anoniem'], $encryption_key, $encryption_iv);
$text = decrypt_data($note['text'], $encryption_key, $encryption_iv);
// Increment views
$stmt = $dbcreat->prepare("UPDATE notities SET views = views + 1 WHERE special_id = ?");
$stmt->bind_param('i', $special_id);
$stmt->execute();
// Display the note in a textarea
echo '<div class="content-box">';
echo '<h1>'.htmlspecialchars($note['titel'], ENT_QUOTES | ENT_HTML401, 'UTF-8').'</h1>';
echo '<textarea readonly rows="10">'.htmlspecialchars($text, ENT_QUOTES | ENT_HTML401, 'UTF-8').'</textarea>';
echo '<p><small>IP Address: '.htmlspecialchars($ip_anoniem, ENT_QUOTES | ENT_HTML401, 'UTF-8').'</small></p>';
echo '</div>';
}
}
} else {
echo 'Note not found.';
}
$stmt->close();
} else {
echo 'No note ID specified.';
}
return $dbcreat->real_escape_string(trim($input));
}
function decrypt_data($data, $encryption_key, $encryption_iv) {
$encryption_iv = substr($encryption_iv, 0, 16); // Ensure IV is 16 bytes long
return openssl_decrypt($data, 'aes-256-cbc', $encryption_key, 0, $encryption_iv);
}
if (isset($_GET['id'])) {
// Sanitize the special_id for database query
$special_id = sanitize_input_for_db($_GET['id'], $dbcreat);
$special_id = (int) $special_id; // Convert to integer
$stmt = $dbcreat->prepare("SELECT * FROM notities WHERE special_id = ?");
$stmt->bind_param('i', $special_id);
$stmt->execute();
$result = $stmt->get_result();
$note = $result->fetch_assoc();
if ($note) {
if ($note['password_lock'] == 1 && $_SERVER['REQUEST_METHOD'] !== 'POST') {
header("Location: ?page=privatenote");
exit();
} else {
if ($note['unlimited'] == 0 && $note['views'] >= $note['maximum_viewers']) {
echo 'The maximum viewers has been reached.';
} else {
$ip_anoniem = decrypt_data($note['ip_anoniem'], $encryption_key, $encryption_iv);
$text = decrypt_data($note['text'], $encryption_key, $encryption_iv);
// Increment views
$stmt = $dbcreat->prepare("UPDATE notities SET views = views + 1 WHERE special_id = ?");
$stmt->bind_param('i', $special_id);
$stmt->execute();
// Display the note in a textarea
echo '<div class="content-box">';
echo '<h1>'.htmlspecialchars($note['titel'], ENT_QUOTES | ENT_HTML401, 'UTF-8').'</h1>';
echo '<textarea readonly rows="10">'.htmlspecialchars($text, ENT_QUOTES | ENT_HTML401, 'UTF-8').'</textarea>';
echo '<p><small>IP Address: '.htmlspecialchars($ip_anoniem, ENT_QUOTES | ENT_HTML401, 'UTF-8').'</small></p>';
echo '</div>';
}
}
} else {
echo 'Note not found.';
}
$stmt->close();
} else {
echo 'No note ID specified.';
}
Maar wat wil je bereiken met die code in je textarea? Ik hoop dat je niet iets wilt maken waarbij je zelf PHP kan uitvoeren via een textarea? Dat is vragen om problemen, en een makkelijke prooi voor een hacker.
Gewijzigd op 01/07/2024 12:20:55 door - Ariën -
- Ariën - op 01/07/2024 12:19:19:
Die ENT_QUOTES moet je inderdaad weghalen uit je htmlspecialchars functie.
Maar wat wil je bereiken met die code in je textarea?
Maar wat wil je bereiken met die code in je textarea?
Zodat als iemand een code invoert van 64.000 tekens, de pagina niet oneindig lang wordt.
Bedankt, het probleem met de symbolen is nu opgelost. Nu alleen nog het probleem met de /r en /n.
erg bedankt voor het symbolen probleem te helpen oplossen.
$text = str_replace('\\n', "\n", $text);
$text = str_replace('\\r', "\t", $text);
Maar ik snap nog steeds niet waarom die PHP-code in je textarea staat, en wat de bedoeling daarvan is?
Gewijzigd op 01/07/2024 13:16:57 door - Ariën -
- Ariën - op 01/07/2024 13:16:43:
Graag gedaan, al hoopte ik nog steeds reactie te krijgen waarom je die PHP-code in je textarea laat zien? Het idee geeft mij vraagtekens.
Gewoon een willekeurige stuk code gepakt om het mee te testen.
Ik kreeg hierdoor eerder het vermoeden dat je een eigen code-editor wou schrijven, waarbij er gevaren op de loer liggen.