Ich habe eine Webseite, die Daten aus einer Datenbank liest und dann anzeigt, aber ich habe gerade ein Problem mit Daten gefunden, die HTML darin enthalten könnten.Sanitizing HTML-Code
In meiner Datenbank habe ich die folgenden drei Einträge:
Bob
Jill
<button onClick="alert('hi')">Click me!</button>
Jetzt habe ich meine HTML-Seite, die die Daten erhält und zeigt sie an und hat ein Click-Ereignis auf jeder Eintrag, also ein Beispiel wäre:
Mein Code entfernt e scape Zeichen so < wird <
Das funktioniert gut, bis ich auf den letzten Eintrag bekommen, und ich am Ende mit:
<div onClick="DoSomething()">
<a><button onClick="alert('hi')">Click me too!</button></a>
</div>
Es erwartet Displays so würde ich sehen:
<button onClick="alert('hi')">Click me too!</button>
aber Es wird auch darauf hingewiesen, dass ein Klickereignis "hi" anzeigen soll.
Weiß jemand, wie ich das onClick sicher stoppen kann, das durch den Namen definiert wird, aber noch mein onClick-Ereignis auf dem umgebenden div.
Ich kann die Namen nicht beschränken, die der Datenbank hinzugefügt werden können.
Sie können Ihre App für XSS-Angriffe öffnen, wenn Sie zulassen, dass solche Dinge nicht bereinigt werden. jemand könnte theoretisch Code injizieren und es ausführen – vsync
Der schlechte Name, der das HTML enthält, existiert derzeit nicht, könnte aber. Dies ist ein extremes Beispiel, aber ich habe keine Möglichkeit, die Namen zu beschränken, die in die Datenbank eingegeben werden können (dies ist eine Legacy-Desktop-App, die älter als 15 Jahre ist und nun eine Web-Schnittstelle hat). Also ja, ich muss sanieren, aber ich weiß nicht, wie ich das machen kann, aber den Namen behalten, den der Benutzer eingegeben hat. Ich dachte, wenn ich die Escape-Charaktere änderte, würde es das tun. – sbarnby71
@ sbarnby71 Wenn Sie PHP verwenden, können Sie Striptags verwenden: http://php.net/manual/pt_BR/function.strip-tags.php. Für andere Sprachen ist die Logik dieselbe. – user3753202