hallo
Das hat zur Konsequenz: Sofern man nicht die Kontrolle über die Data hat, sollte man überhaupt nicht Daten in einem script Element übergeben.
Nein, man muss lediglich kontextgerecht maskieren, die HTML5.2 Spec schreibt auch vor wie. Die Spec hat ironischwerweise aber genau an der Stelle ein Kontextwechsel-Problem :D In HTML5.1 wird der Abschnitt noch richtig dargestellt. In meiner eigenen kleinen Templating-Engine habe ich das auch implementiert – mir selbst auf die Schulterklopf.
Ich kann zwar zugeben dass, diese Version (ich habe es bi meiner gestrigen Antwort verwendet), den Job tut...
my $arrayref=[ "//-><script>alert(\"gotcha\")", "example>2", "\"</script><>\"'&&" ];
my $hashref={a=>"-->\\\n", b=>"example>2", c=>"\"</script><>\"'&&"};
print perldata_to_htmlscript_ob({v1=>$arrayref,v2=>$hashref});
sub perldata_to_htmlscript_ob{
my $hash_of_objects = shift;
my $result = '';
foreach( keys %{ $hash_of_objects } ){
$result .= sprintf( qq{var %s = %s;\n}, $_, encode_json( $hash_of_objects->{$_} ) );
}
$result =~ s{[/]}{\\/}g; #### <---------------
return sprintf("<script>\n//<!--\n%s\n// -->\n</script>\n", $result );
}
Aber wirklich gut getestet ist das nicht. Es maskiert aber AUCH die stellen die in der Spec angegeben sind.
Ehrlich gesagt sieht mir die Empfehlung der Spec da eher als inkonsistener Hack aus.
Neu im Forum! Signaturen kann man ausblenden!