2017-01-17 4 views
0

Kann mir jemand helfen, die htmlspecialchars Zugabe zu verhindern XSS in diesem Code: siehtmlspecialchars in PHP

<?PHP 
    if(isset($_POST['update'])) { 
     $ts=$_POST['ts']; 
     $user=$_POST['user']; 

     mysql_query("UPDATE users SET block_newfriends='". mysql_real_escape_string($ts). "' WHERE username='" .mysql_real_escape_string($user) . "'"); 
     echo '<div class="rounded-container">'; 
     echo '<div class="rounded-green rounded-done">'; 
     echo '<b>reload</b><br>'; 
     echo '</div>'; 
     echo '</div>'; 
    } 
?> 

Ich weiß nicht, wo zu setzen, sollte es in der POST-Funktion sein, oder?

+0

XSS Prävention Aktion passiert in der Regel am Info-Ausgang nicht eingegeben. Wenn Sie jedoch sicherstellen möchten, dass diese beiden Post-Werte bei der Eingabe in die Datenbank keine HTML-Zeichen enthalten, können Sie sie über htmlspecialchars übergeben. – MarkSkayff

+0

yeah Ich will das Mark machen, aber weißt du, WIE ich sie in meinem Skript hinzufügen kann? Ich bin mir nicht sicher, wo ich sie platzieren soll. – IbraDigga

+0

$ ts = htmlspecialchars ($ _ POST ['ts']); und das gleiche für den Benutzer var. – MarkSkayff

Antwort

0

Ersetzen Sie die $ ts und $ user Zeilen mit:

$ts=htmlspecialchars($_POST['ts']); 
$user=htmlspecialchars($_POST['user']); 

dann die Abfrage in Ruhe lassen, es wird dann mysql_real_escape_string() auf den Wert abgezogen htmlspecialchars verwenden.

+0

Danke Patrick, ich habe beide Zeilen ersetzt. Sollte ich in diesem Skript mehr hinzufügen/hinzufügen oder reicht das? – IbraDigga

+0

Dies ist ein schlechter Rat. Sie werden die von Ihnen in die Datenbank eingegebenen Werte html-entschlüsseln. Wenn Sie sie dann wieder aus der Datenbank bekommen, sind Sie sich nicht sicher, ob Ihre Bildschirmausgabe (Echo) -Funktion es verlassen muss oder nicht. Behalten Sie den "rohen" Wert immer im Speicher und konvertieren Sie ihn, wenn Sie in die Datenbank usw. ausgeben/einfügen und dann werden Sie nicht verwirrt. – Robbie

+0

Sie sind also nicht einverstanden mit Patrick? – IbraDigga

0

Sie benötigen, um es sicher verschiedene Funktionen je nachdem, was Sie tun möchten:

Wenn Sie die Ausgabe in HTML, machen es „html-safe“ durch in htmlspecialchars Verpackung.

echo 'Writing to browser ' . htmlspecialchars($_POST['t']); 

Wenn Sie die Ausgabe in SQL, macht es "SQL-safe", indem sie es für SQL entkommen (siehe Hinweis unten).

$sql = 'UPDATE table SET field="' . mysql_escape_string($_POST['t']); 

Wenn Sie Ausgabe an eine URL, machen es "url-safe", indem sie es für Urls zu entkommen.

$link = 'http:/example.com?value=' . urlencode($_POST['t']) 

ähnliche Regeln gelten für JSON-Codierung usw.


Hinweis auf mySQL in XML ausgeben: Sie richtig sind, es zu entkommen, aber Sie Funktionen verwenden, die nicht mehr in PHP vorhanden ist (Sie verwenden daher eine alte Version von PHP). Überprüfen Sie mysqli oder pdo im Handbuch und verwenden Sie stattdessen diese Funktionen.

+0

danke Robbie, ich weiß, es ist ein alter, aber mein derzeitiger Gastgeber benutzt eine alte Version, ich werde sehr bald updaten! Ich habe beide Variablen geändert, glaubst du, dass das reicht? – IbraDigga

+1

mysqli und PDO gibt es seit 10 Jahren +; Sogar "alte" Versionen von PHP auf jedem Host sollten sie haben. Sie werden nicht in ein oder zwei Jahren mysql() haben. So konvertieren Sie jetzt, um zu verhindern, dass Sie eine ungültige Klasse lernen. – Robbie

+0

Siehe auch meinen Kommentar zu Patricks Antwort: Wenn Sie html-escape und dann in die Datenbank einfügen, verlieren Sie möglicherweise den Überblick darüber, welche Werte maskiert wurden und welche nicht. Also "rohe" Werte in der Hand behalten und beim Ausgeben/Einfügen in die Datenbank flüchten/konvertieren; dann folgst du der einfachen Regel, IMMER der Ausgabe zu entkommen und sie nicht selektiv auszuführen.Es wird auch den Übergang erleichtern, wenn Sie eine Vorlagen-Engine ein wenig auf der ganzen Linie verwenden. – Robbie

Verwandte Themen