Niet juiste weergaven van script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Patric hoog

patric hoog

01/07/2024 11:41:23
Quote Anchor link
Hallo iedereen,

Ik heb een probleem met een gedeelte van mijn website waar symbolen niet correct worden weergegeven.
Ik probeer symbolen zoals &quote;, ©, 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.

Afbeelding
ip in de foto is onbelangrijk het is een vpn ip.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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.';
}
 
PHP hulp

PHP hulp

18/07/2024 09:43:09
 
- Ariën  -
Beheerder

- Ariën -

01/07/2024 11:44:51
Quote Anchor link
Je maakt ze onschadelijk met htmlspecialchars(), dus daarom zie je die 'entities'.
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 -
 
Patric hoog

patric hoog

01/07/2024 12:06:54
Quote Anchor link
- 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!

Bedankt, dat heeft al 80% van het script opgelost! Ik heb echter nog één probleem: de tekens < en > worden nog steeds weergegeven als &gt; en &quot;, en enters worden weergegeven als /r of /n.


Afbeelding

en hier is de code met de aanpassingen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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.';
}
 
- Ariën  -
Beheerder

- Ariën -

01/07/2024 12:19:19
Quote Anchor link
Die ENT_QUOTES moet je inderdaad weghalen uit je htmlspecialchars functie.

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 -
 
Patric hoog

patric hoog

01/07/2024 12:25:15
Quote Anchor link
- 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?


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.

Afbeelding
 
- Ariën  -
Beheerder

- Ariën -

01/07/2024 12:31:49
Quote Anchor link
Als ik mijn niet vergis is het dit:

$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?
 
Patric hoog

patric hoog

01/07/2024 12:48:36
Quote Anchor link
Het is gelukt, erg bedankt voor het helpen, kan ik eindelijk de hoofdpijn weg drinken met goed glas koffie.

Afbeelding
 
- Ariën  -
Beheerder

- Ariën -

01/07/2024 13:16:43
Quote Anchor link
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.
Gewijzigd op 01/07/2024 13:16:57 door - Ariën -
 
Patric hoog

patric hoog

01/07/2024 13:18:28
Quote Anchor link
- 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.
 
- Ariën  -
Beheerder

- Ariën -

01/07/2024 13:21:20
Quote Anchor link
Oh zo. Ik doe dan altijd een Lorum Ipsum ofzo.
Ik kreeg hierdoor eerder het vermoeden dat je een eigen code-editor wou schrijven, waarbij er gevaren op de loer liggen.
 



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.