<input type="password" name=\"pw\" value="$aus_der_datenbank">
Das ist fehlerhaftes HTML und/oder fehlerhaftes PHP.
htmlspecialchars()
fehlt.
Das stimmt und das (finde ich) kann man keinem Programmierer zum Vorwurf machen. Kontextwechsel sind für Menschen nicht so leicht zu erkennen, für Maschinen jedoch schon. Eine hilfsbereite Programmiersprache stellt deshalb Sicherheitsmechanismen zur Verfügung, die diese Fehlerklasse kategorisch ausschließen. Das vermeidet riesige Sicherheitslücken und spart dazu noch eine Menge Schreibarbeit. PHP und die meisten objektorientierten Sprachen zählen leider nicht dazu. Unerklärlicherweise werden in PHP HTML-Ausgaben für gewöhnlich immernoch mit String-Konkatenation gebastelt. Wtf? Für eine Sprache, die im Web zu Hause ist.